Claude adatta un exploit RCE a un PLC WAGO: shellcode ARM eseguito senza autenticazione
Vulnerabilidades

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:

  1. envío de solicitudes ICMP echo a un sistema controlado por el investigador;
  2. 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.

Lee también

Fuentes

Este artículo es una reelaboración original basada en las siguientes fuentes.

CVE tratadas en este artículo

Temas relacionadosClaude AIPLC WAGOCVE-2021-31886exploit RCEshellcode ARMciberseguridad OTNucleus RTOS
Volver al inicio