
Cisco IOS XE escaneo y detección de implantes (CVE-2023-20198, CVE-2023-20273)
Detección en red de la explotación de CVE-2023-20198 y huella digital de la post-explotación de dispositivos Cisco IOS XE.
La carpeta suricata/ contiene reglas de detección de Suricata para la explotación de CVE-2023-20198. Estas reglas monitorean un porcentaje codificado en porcentaje que puede usarse para eludir la autenticación en dispositivos Cisco IOS XE no parcheados para CVE-2023-20198.
Este directorio también contiene PCAPs de referencia basados en tráfico de explotación observado en la naturaleza:
Este repositorio también contiene información sobre actividades de post-explotación vinculadas a las explotaciones masivas de la Interfaz de Usuario de Gestión Web del Software Cisco IOS XE. Cisco Talos 1 publicó una huella digital que podría verificar si el implante estaba activo en dispositivos Cisco IOS XE. Como referencia:
curl -k -X POST "https://DEVICEIP/webui/logoutconfirm.html?logon_hash=1"
Si la respuesta HTTP consiste en una cadena hexadecimal, esto es un indicador de alta confianza de que el dispositivo está comprometido. Sin embargo, como múltiples fuentes han mencionado 2 3, el número de implantes que se pueden descubrir utilizando este método ha disminuido significativamente.
El tráfico de red investigado hacia un dispositivo comprometido ha mostrado que el actor de amenazas ha mejorado el implante para realizar una verificación adicional de cabecera.
Por lo tanto, para muchos dispositivos, el implante sigue activo, pero ahora solo responde si se establece la cabecera HTTP Authorization correcta.
Revisamos nuevamente la publicación inicial de Cisco Talos y notamos una verificación de ubicación adicional en el código del implante:

Basándonos en la captura de pantalla anterior del código del implante compartido por Cisco Talos, encontramos otro método que se puede utilizar para identificar la presencia del implante.
curl -k "https://DEVICEIP/%25"
Usando %25 (porcentaje codificado en porcentaje), cumplimos las condiciones especificadas en la verificación de ubicación adicional. Esto hará que el servidor responda con una respuesta HTTP diferente a la que normalmente daría cuando el implante no está funcionando.
Actualmente hay tres versiones conocidas del implante. A partir del 1 de noviembre de 2023, el implante se llama BadCandy según Cisco Talos 1.
Una señal característica de la operación del implante es <head><title>404 Not Found</title></head> en el cuerpo. Un ejemplo de cuerpo HTTP es el siguiente:
$ curl -k 'https://DEVICEIP/%25'
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
La tercera variante devuelve la página de inicio de sesión en lugar del 404. Como normalmente se esperaría una redirección javascript en lugar de esta página de inicio de sesión, aún podemos determinar la presencia del implante comprobando si se devuelve o no una página de inicio de sesión:
curl -k 'https://DEVICEIP/%25'
<!DOCTYPE html>
<html>
<!--
Copyright (c) 2015-2019 by Cisco Systems, Inc.
All rights reserved.
-->
<head lang="en">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title id="loginTitle"></title>
Encontramos diferentes respuestas de inicio de sesión en nuestros resultados de escaneo, y terminamos usando la cadena name="Username" como identificador para determinar si se está devolviendo una página de inicio de sesión.
Si el implante no está presente, obtendrá una respuesta diferente. Por ejemplo:
$ curl -k 'https://DEVICEIP/%25'
<script>window.onload=function(){ url ='/webui';window.location.href=url;}</script>
Creamos un pequeño script que verifica el compromiso utilizando el método de identificación anterior. El script se puede encontrar aquí:
Ejemplo de uso:
$ pip3 install requests
$ python3 iocisco.py 192.168.1.1
[!] Checking http://192.168.1.1/%25
WARNING: Possible implant found for 192.168.1.1 (impant v3)! Please perform a forensic investigation!
[!] Checking https://192.168.1.1/%25
WARNING: Possible implant found for 192.168.1.1 (implant v3)! Please perform a forensic investigation!
También es posible escanear una lista de hosts, separados por nuevas líneas.
$ python3 iocisco.py --file cisco-ips.txt