Imagen ilustrativa generada con IA
Claude adapta un exploit de RCE a un PLC WAGO: shellcode ARM ejecutado sin autenticación
Claude adaptó un exploit RCE del WAGO 750-852 al 750-831 y ejecutó shellcode ARM sin autenticación explotando CVE-2021-31886 en el servidor FTP.
Texto generado por inteligencia artificial, publicado sin revisión humana. Transparencia IA
Del exploit existente al código ejecutado en hardware real
Forescout Research, a través de Vedere Labs, adaptó con la asistencia de Claude un exploit de ejecución remota de código de un PLC WAGO a un modelo diferente. La prueba funcionó en hardware real, permitiendo ejecutar shellcode ARM controlado por el investigador sin autenticación previa.
El punto de partida era un exploit ya desarrollado para el WAGO 750-852. El objetivo elegido para el porting era, en cambio, un WAGO 750-831, equipado con el firmware V01.04.16.
A Claude se le proporcionaron tres elementos: el exploit anterior, el binario del firmware que debía analizarse y el controlador físico. El modelo podía utilizar un terminal, la herramienta de ingeniería inversa Ghidra e interactuar directamente con el PLC.
Las sesiones comenzaron con Claude Sonnet 4.6. Después de que los primeros intentos de obtener la RCE se estancaran, el trabajo continuó con Claude Opus 4.6.
No se trató de un proceso autónomo. El investigador tuvo que guiar continuamente al modelo, evaluar los resultados y corregir el rumbo del análisis. La fase final duró 8 horas y 32 minutos y consumió 535,74 dólares en llamadas a la API.
Forescout también identificó un aspecto poco favorable para la IA: el mismo investigador probablemente habría podido completar el porting inicial más rápido, con un coste menor y sin destruir el dispositivo durante los experimentos posteriores.
CVE-2021-31886 afecta al comando FTP USER
El exploit aprovecha CVE-2021-31886, una vulnerabilidad crítica en el servidor FTP del componente Nucleus NET, integrado en el sistema operativo en tiempo real Nucleus RTOS.
El fallo consiste en un desbordamiento de búfer basado en la pila (stack-based buffer overflow) provocado por una validación insuficiente de la longitud del comando FTP USER. Siemens también lo clasifica como CWE-170, es decir, gestión incorrecta de la terminación NULL.
La vulnerabilidad es accesible a través de TCP/21 antes de la autenticación. Por tanto, un atacante no necesita disponer de credenciales ni convencer a un operador para que realice una acción. La puntuación es CVSS 9.8, con el siguiente vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Entre las consecuencias previstas se incluyen la denegación de servicio y la ejecución remota de código, con un posible impacto en la confidencialidad, integridad y disponibilidad.
CVE-2021-31886 forma parte del grupo de 13 vulnerabilidades denominado NUCLEUS:13, hecho público en noviembre de 2021. El aviso de Siemens ProductCERT SSA-044112 se publicó el 2021-11-09 y se actualizó el 2021-12-14 a la versión V1.1.
No hay indicios de que CVE-2021-31886 se haya incluido en el catálogo Known Exploited Vulnerabilities de CISA ni de que exista una fecha límite federal de remediación. No obstante, la demostración confirma la existencia de un exploit funcional en laboratorio.
Una búsqueda realizada el 1 de septiembre no encontró repositorios de GitHub identificados por su nombre o descripción con CVE-2021-31886. Tampoco aparecieron resultados en Exploit-DB o Packet Storm. Sin embargo, la comprobación de los metadatos de GitHub no descarta que código pertinente se encuentre en repositorios con otros nombres.
El cambio decisivo: de QUIT a CWD, sin CRLF
El porting exigía superar una diferencia en el comportamiento del WAGO 750-831. Durante la gestión normal de la sesión FTP, el dispositivo ponía a cero 256 bytes del búfer controlado por el atacante. Por tanto, el payload se eliminaba antes de poder ejecutarse.
El exploit original para el 750-852 utilizaba una secuencia compuesta por USER y QUIT. Claude modificó el flujo sustituyendo el segundo comando por CWD y eliminando el terminador CRLF.
Esta combinación alteraba la ruta de procesamiento del servidor FTP. La solicitud no se completaba según el comportamiento habitual y el búfer permanecía intacto el tiempo suficiente para permitir la ejecución del payload.
Después del primer resultado, basado en un shellcode NOP sencillo, Claude produjo en 12 minutos dos payloads ARM con efectos observables:
- envío de solicitudes ICMP echo a un sistema controlado por el investigador;
- transmisión de un datagrama UDP que contenía la cadena
PWNED.
La ejecución tenía lugar en el contexto de la callback de recepción Ethernet. Por tanto, la prueba demuestra el control del flujo de ejecución y la capacidad de generar tráfico de red desde el PLC.
Sin embargo, por sí sola no demuestra la manipulación del proceso industrial, de la lógica de escalera (ladder logic) ni de las funciones completas de la aplicación del controlador. Ese paso requeriría capacidades adicionales y conocimientos específicos de la instalación.
Durante el análisis, Claude también señaló un posible fallo independiente en el ciclo de extracción de comandos FTP. La revisión humana consideró plausible la existencia de una vulnerabilidad distinta, pero el problema no tiene un identificador CVE y no se ha demostrado que sea explotable.
Dispositivos WAGO afectados y ausencia de actualizaciones
La lista de productos vulnerables incluye numerosos PLC y acopladores de bus de campo WAGO basados en Nucleus V1 RTOS:
| Dispositivo | Versiones afectadas |
|---|---|
| WAGO 750-829 | FW16 y anteriores |
| WAGO 750-831/000-00x | FW14 y anteriores |
| WAGO 750-852 | FW16 y anteriores |
| WAGO 750-880/0xx-xxx | FW16 y anteriores |
| WAGO 750-881 | FW16 y anteriores |
| WAGO 750-882 | FW16 y anteriores |
| WAGO 750-885/0xx-xxx | FW16 y anteriores |
| WAGO 750-889 | FW16 y anteriores |
| WAGO 750-331 | FW16 y anteriores |
| WAGO 750-352/xxx-xxx | FW16 y anteriores |
Para estos productos basados en Nucleus V1 RTOS no hay actualizaciones disponibles. También existe una carencia documental: los modelos 750-882 y 750-885/0xx-xxx aparecen entre los dispositivos vulnerables, pero no en la tabla de remediación ni en la sección correspondiente sobre mitigaciones. Su estado de corrección no está especificado.
La situación varía en otros productos Nucleus. Siemens indica que Nucleus ReadyStart V3 debe actualizarse a V2017.02.4 o una versión posterior. Para CVE-2021-31886, la corrección ya estaba incluida en las versiones V2013.08.1 y posteriores.
En el caso de Nucleus NET, todas las versiones aparecen afectadas y no se prevé una remediación general. Los usuarios deben ponerse en contacto con el soporte de Siemens o con el equipo de Nucleus. Para Nucleus Source Code, todas las versiones requieren igualmente contacto directo para obtener parches y actualizaciones.
La prueba de C2 que dejó inutilizable el PLC
Una sesión posterior tenía como objetivo convertir el exploit en una infraestructura de mando y control (command-and-control). Durante el intento, el código escribió en una región de memoria asignada a la memoria flash y dejó el PLC inutilizable de forma permanente.
El incidente pone de manifiesto una diferencia sustancial entre el uso de agentes de IA con software tradicional y la interacción con sistemas físicos. Una escritura incorrecta no provoca necesariamente solo un bloqueo recuperable: puede comprometer el firmware, la memoria persistente o el funcionamiento del equipo.
Por tanto, el riesgo inmediato no es únicamente que un modelo lleve a cabo un ataque de forma autónoma. Incluso un agente autorizado y guiado por un operador puede interpretar incorrectamente una estructura de memoria y ejecutar acciones irreversibles.
Paralelamente, el aviso conjunto AA26-231A de CISA, NSA, FBI, DOE y EPA describe una amenaza activa contra PLC que no se limita al ecosistema de Siemens. Los actores observados utilizan scripts de explotación generados o asistidos por IA, a veces camuflados como herramientas legítimas de monitorización OT.
Servicios como Censys y ZoomEye se utilizan para localizar controladores expuestos a Internet. En el caso de los Siemens S7, las herramientas combinan Python con snap7.dll o python-snap7, obteniendo capacidades de lectura y escritura mediante S7comm.
La actividad, notificada en el aviso del 19 de agosto, se evaluó como probablemente orientada al reconocimiento persistente y al desarrollo de capacidades. No se atribuyó a un grupo específico.
Defensas inmediatas y señales que deben buscarse en la red OT
En los WAGO que no disponen de actualizaciones, la medida prioritaria es deshabilitar FTP cuando no sea imprescindible. Como alternativa, debe bloquearse o filtrarse TCP/21, impidiendo especialmente cualquier exposición directa a Internet.
Los responsables también deberían:
- inventariar los PLC, el firmware y los servicios activos;
- separar las redes IT, OT y las estaciones de trabajo de ingeniería;
- limitar los accesos remotos de proveedores e integradores de sistemas;
- supervisar los cambios realizados fuera de las ventanas autorizadas;
- establecer procedimientos de recuperación compatibles con los controladores instalados;
- verificar la integridad de las configuraciones y de los programas industriales.
En el tráfico FTP deben vigilarse especialmente las solicitudes USER anormalmente largas, las secuencias inusuales con QUIT o CWD y los terminadores CRLF ausentes o manipulados. Las solicitudes ICMP dirigidas a hosts externos y los datagramas UDP que contengan PWNED son indicadores específicos de la prueba de laboratorio, no de una campaña delictiva conocida.
En los entornos Siemens S7 también deben buscarse accesos S7comm desde hosts no autorizados, escaneos secuenciales del puerto 102, enumeraciones de la CPU y escrituras en bloques de datos fuera del horario habitual. La presencia de Snap7.dll o de scripts Python con funciones S7comm en sistemas distintos de las estaciones de ingeniería autorizadas requiere una verificación inmediata.
La demostración con WAGO no prueba que la IA pueda sustituir a un investigador experto. Sin embargo, muestra que un modelo dotado de herramientas, firmware y acceso al objetivo puede contribuir a transformar una vulnerabilidad documentada en código funcional ejecutado en un PLC real.
Fuentes
Este artículo es una reelaboración original basada en las siguientes fuentes.
CVE tratadas en este artículo
- CVE-2021-31886CRITICAL9.8A vulnerability has been identified in APOGEE MBC (PPC) (BACnet) (All versions), APOGEE MBC (PPC) (P2 Ethernet) (All versions), APOGEE MEC (PPC) (BACnet) (All versions), APOGEE MEC (PPC) (P2 Ethernet) (All versions), APOGEE PXC Compact (BACnet) (All versions < V3.5.4), APOGEE PXC Compact (P2 Etherne
- CVE-2021-31884CRITICAL9.8A vulnerability has been identified in APOGEE MBC (PPC) (BACnet) (All versions), APOGEE MBC (PPC) (P2 Ethernet) (All versions), APOGEE MEC (PPC) (BACnet) (All versions), APOGEE MEC (PPC) (P2 Ethernet) (All versions), APOGEE PXC Compact (BACnet) (All versions < V3.5.4), APOGEE PXC Compact (P2 Etherne
- CVE-2021-31346HIGH8.2A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303), PLUSCONTROL 1st Gen (All versions), SIMOTICS CONNECT 400 (All versions < V0.5.0.0), SIMOTICS CONNECT 400 (All versions < V1.0.0.0). The total length o
- CVE-2021-31345HIGH7.5A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303), PLUSCONTROL 1st Gen (All versions). The total length of an UDP payload (set in the IP header) is unchecked. This may lead to various side effects, inc
- CVE-2021-31881HIGH7.1A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303). When processing a DHCP OFFER message, the DHCP client application does not validate the length of the Vendor option(s), leading to Denial-of-Service c
- CVE-2021-31883HIGH7.1A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303). When processing a DHCP ACK message, the DHCP client application does not validate the length of the Vendor option(s), leading to Denial-of-Service con
- CVE-2021-31882MEDIUM6.5A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303). The DHCP client application does not validate the length of the Domain Name Server IP option(s) (0x06) when processing DHCP ACK packets. This may lead
- CVE-2021-31344MEDIUM5.3A vulnerability has been identified in Capital Embedded AR Classic 431-422 (All versions), Capital Embedded AR Classic R20-11 (All versions < V2303), PLUSCONTROL 1st Gen (All versions), SIMOTICS CONNECT 400 (All versions < V0.5.0.0), SIMOTICS CONNECT 400 (All versions < V1.0.0.0). ICMP echo packets
