
Résumé
Fin 2023, des chercheurs en sécurité ont découvert une vulnérabilité critique en chaîne affectant l'interface Web de Cisco IOS XE, permettant à des attaquants non authentifiés de prendre le contrôle total des appareils concernés. La chaîne d'attaque combine deux vulnérabilités de sécurité - CVE-2023-20198 et CVE-2023-20273 - qui, lorsqu'elles sont exploitées ensemble, conduisent à l'exécution de commandes au niveau racine sur l'hôte Linux sous-jacent exécutant l'IOS XE. Cela permet une prise de contrôle complète de l'appareil, un accès persistant et un mouvement latéral potentiel à travers les réseaux d'entreprise.
- CVE-2023-20198: Présente dans les versions 16.0.x à 17.9.x du Software Cisco IOS XE, cette vulnérabilité permet à des attaquants non authentifiés d'obtenir un accès initial et de créer un compte de niveau de privilège 15 (administrateur) via l'interface Web. Une fois créé, l'attaquant peut effectuer n'importe quelle action administrative sur l'appareil, ce qui représente un risque de sécurité important.

- CVE-2023-20273: Affectant les mêmes versions du logiciel, cette vulnérabilité permet aux utilisateurs authentifiés disposant de privilèges de niveau 15 d'exécuter des commandes arbitraires avec les privilèges de l'administrateur (root) sur le système d'exploitation Linux sous-jacent grâce à une faille d'injection de commande dans le composant de gestion du logiciel.

Au cours du programme de bourses OPSWAT , nos boursiers, Hoa X.Nguyen et Nhan Nguyen, ont effectué une analyse technique approfondie de cette chaîne d'attaque. Dans notre recherche, nous avons reproduit les vulnérabilités sur un commutateur Cisco Catalyst 9300-24T-E fonctionnant sous IOS XE 17.01, démontrant comment les failles peuvent être enchaînées pour atteindre une compromission complète du système dans des conditions réelles.
Contexte
Présentation de Cisco IOS XE

Cisco IOS XE est un système d'exploitation de réseau moderne et modulaire qui équipe de nombreuses plates-formes d'entreprise de Cisco, notamment des routeurs, des commutateurs et des contrôleurs sans fil. Il fusionne les riches fonctionnalités de l'IOS classique de Cisco avec une architecture plus sûre, programmable et basée sur Linux, offrant aux administrateurs de réseau une flexibilité et des performances accrues.
À la base, IOS XE fonctionne comme un système d'exploitation Linux hébergeant le processus principal appelé IOSd (IOS Daemon). Ce démon gère les tâches traditionnelles de mise en réseau telles que le routage, la gestion de la CLI et le contrôle de la configuration. Dans IOS XE 17.01, le binaire IOSd réside dans /usr/binos/bin/x86_64_crb_linux_iosd_ngwc-universalk9-ms.
Contrairement aux anciens systèmes Cisco, les utilisateurs d'IOS XE qui se connectent via SSH sont placés dans un shell restreint du sous-système IOSd plutôt que dans l'environnement Linux sous-jacent. Cette conception isole le véritable accès au niveau racine du système d'exploitation, renforçant ainsi de manière significative la frontière de sécurité globale entre les interactions de l'utilisateur et le noyau de l'hôte.
Niveaux de privilège Cisco
Les appareils Cisco mettent en œuvre un modèle de privilège hiérarchique pour contrôler les autorisations des utilisateurs :
- Niveau 0 - Accès de niveau zéro : Il s'agit du niveau le plus restreint. Il n'autorise généralement qu'un ensemble limité de commandes de base telles que la déconnexion, l'activation, la désactivation, l'aide et la sortie.
- Niveau 1 - Mode EXEC utilisateur : Accès par défaut pour les connexions standard, permettant une visualisation de base du système mais aucune modification de la configuration.
- Niveau 15 - Mode EXEC privilégié : Il s'agit du niveau de privilège le plus élevé, qui permet un contrôle total de l'appareil. Les utilisateurs de ce niveau peuvent exécuter toutes les commandes, y compris les commandes de configuration, et recharger l'appareil.
Les niveaux intermédiaires (2-14) peuvent être personnalisés pour accorder des autorisations spécifiques. Les privilèges sont hérités, ce qui signifie que les utilisateurs des niveaux supérieurs possèdent automatiquement les droits des niveaux inférieurs.
Architecture de l'interface Web de Cisco
L'interface Web de Cisco IOS XE fournit une interface basée sur un navigateur pour la gestion et la surveillance des appareils - offrant des fonctions de configuration et de diagnostic sans nécessiter d'accès à la ligne de commande. En interne, l'interface Web tire parti de NGINX en tant que proxy middleware pour acheminer les demandes des utilisateurs vers divers services internes, y compris l'agent de gestion des services Web (WSMA).
Le composant WSMA sert de pont de communication entre l'interface Web et le démon IOSd sous-jacent, traduisant les actions basées sur le Web en commandes de configuration IOS XE correspondantes.

Pour renforcer le contrôle d'accès, chaque demande est soumise à une authentification SOAP et à une vérification des privilèges par le biais d'un en-tête HTTP dédié (Priv-Level), ce qui garantit que seuls les utilisateurs autorisés peuvent effectuer des opérations privilégiées.

Analyse technique
CVE-2023-20198 - Contournement de l'authentification et escalade des privilèges
Nos collègues ont découvert que la vulnérabilité est ancrée dans le point de terminaison HTTP de l'interface Web de Cisco IOS XE. Lors du traitement des requêtes entrantes, l'interface Web transmet les commandes et les autorisations utilisateur associées à un point de terminaison interne (/lua5), qui est ensuite acheminé par NGINX vers l'un des deux gestionnaires WSMA - /webui_wsma_http ou /webui_wsma_https - en fonction du protocole.


L'analyse statique du binaire IOSd révèle également une configuration NGINX qui inclut un gestionnaire de secours par défaut :

La vulnérabilité provient de la façon dont NGINX et IOSd gèrent l'encodage des URL. Les deux composants décodent les chemins d'URL de manière indépendante, ce qui permet à un attaquant d'exploiter un contournement du double encodage.
Par exemple, si /webui_wsma_https est envoyé sous la forme /%2577ebui_wsma_https, NGINX effectue un seul décodage et voit /%77ebui_wsma_https(qui ne correspond pas directement à la route interne protégée), il distribue donc la requête via un gestionnaire de secours moins restrictif. Lorsque la requête atteint le backend IOSd, IOSd effectue un second décodage et résout le chemin en /webui_wsma_https.

Comme NGINX achemine initialement cette requête malformée en utilisant son gestionnaire par défaut, il n'applique pas la logique normale d'authentification et de contrôle d'accès. En conséquence, l'attaquant peut injecter un en-tête Priv-Level falsifié qui lui attribue des privilèges de niveau administrateur (15). Combiné à une charge utile SOAP XML contenant une commande de création d'un nouvel utilisateur, il en résulte la création silencieuse d'un compte local à haut niveau de privilèges.

Cette exploitation ne nécessite aucune authentification préalable et permet à l'attaquant de contrôler entièrement la configuration de l'appareil via l'interface Web, ce qui constitue la première étape de la chaîne d'attaque.
CVE-2023-20273 - Injection de commande dans la gestion des Software
Une fois authentifié avec le compte administrateur nouvellement créé, l'attaquant peut exploiter CVE-2023-20273, une vulnérabilité d'injection de commande dans le composant de gestion de logiciel (/webui/rest/softwareMgmt/*). Ce point d'accès est destiné aux administrateurs légitimes pour installer ou mettre à jour des logiciels sur l'appareil.
La faille provient de la logique de validation des entrées dans la fonction validateSmuRequest(req), qui appelle validator.validateIPv4IPv6HostNameAddress(req.ipaddress) pour vérifier l'adresse IP fournie dans la requête. Cette étape de validation est conçue pour garantir que l'adresse fournie est correctement formatée et utilisable en toute sécurité.
Dans validateIPv4IPv6HostNameAddress, la validation s'appuie sur la routine d'aide utils.isIPv6Address(ip) pour évaluer la conformité de la syntaxe IPv6. Cette fonction tente d'analyser l'entrée en la divisant par des deux-points ( :) et en évaluant chaque segment à l'aide d'une expression régulière destinée à rejeter les motifs hexadécimaux non valides ou les valeurs hors plage. Le défaut d'implémentation réside dans cette expression régulière : en raison d'un quantificateur * trop permissif, elle correspond à n'importe quelle entrée, permettant effectivement aux valeurs malformées ou malveillantes de passer la validation sans être vérifiées.

Par conséquent, les données contrôlées par l'attaquant sont acceptées comme valides et passent dans la logique en aval où elles sont utilisées dans la construction de la commande. La valeur de l'adresse IP non approuvée est finalement utilisée dans la fonction runPexecCommand() pour construire une commande système qui initie une requête TFTP. Comme cette opération se produit sans validation d'entrée ni échappement, un attaquant peut injecter des commandes arbitraires dans le processus, ce qui conduit à l'exécution de commandes avec des privilèges élevés et à la compromission complète de l'appareil Cisco.

Preuve de concept (PoC)
Au cours du programme de bourses OPSWAT , nos boursiers Hoa X. Nguyen et Nhan Nguyen ont reproduit l'exploit enchaîné dans un laboratoire contrôlé et protégé par air sur un Cisco Catalyst 9300-24T-E fonctionnant sous IOS XE 17.01. La séquence d'exploitation peut être résumée par les étapes suivantes :

- Demande à double encodage : envoyer un POST spécialement conçu vers un chemin interne à double encodage (par exemple, /%2577ebui_wsma_https) qui est acheminé via le proxy fallback et contient un en-tête Priv-Level et une charge utile SOAP de création de compte falsifiés.
- Obtenir une session d'administration : se connecter avec le compte créé et collecter les jetons de session/CSRF.
- Télécharger la charge utile : utiliser l'interface Web pour placer le fichier attacker_shell.sh sur l'appareil (action réservée aux administrateurs).
- Exécution via SMU : soumettre une requête SMU avec une adresse IP fabriquée (par exemple, 100:100:100:$(/bin/sh /bootflash/attacker_shell.sh)) ; la validation est contournée et le script téléchargé s'exécute en tant que root.

Remédiation
Cisco a publié des versions corrigées du Software Cisco IOS XE qui corrigent à la fois CVE-2023-20198 et CVE-2023-20273. Toutes les organisations utilisant les versions 16.0.x à 17.9.x doivent immédiatement passer à la dernière version corrigée, comme indiqué dans l'avis de sécurité officiel de Cisco. L'application de ces mises à jour supprime effectivement les vulnérabilités sous-jacentes et empêche l'élévation de privilèges non autorisée ou l'injection de commandes par l'intermédiaire de l'interface Web.
Dans les environnements où une mise à niveau immédiate n'est pas possible, les administrateurs doivent restreindre ou désactiver l'accès à l'interface Web à partir de réseaux non fiables, appliquer des contrôles d'authentification stricts pour les interfaces administratives et surveiller en permanence tout comportement inhabituel du système, tel que la création de comptes non autorisés ou des modifications anormales de la configuration.
Pour renforcer la cyber-résilience globale, les organisations peuvent compléter les correctifs des fournisseurs avec MetaDefender Platform d'OPSWAT, un cadre de sécurité unifié conçu pour protéger les infrastructures critiques en détectant et en prévenant les menaces à travers les fichiers, les appareils et les flux de données. L'intégration de MetaDefender dans le réseau et les flux de travail opérationnels améliore la visibilité, assure une inspection plus approfondie des menaces et fournit une protection supplémentaire contre les tentatives d'exploitation potentielles ciblant les systèmes de gestion.
En combinant les mises à jour de Cisco, des contrôles d'accès robustes et une stratégie de défense en couches soutenue par MetaDefender Platform, les entreprises peuvent réduire de manière significative leur exposition à des chaînes d'exploitation similaires et maintenir une posture de sécurité plus forte et plus résiliente.
