
Backdoor User-Agentt de PHP 8.1.0-dev: Ejecución Remota de Código (RCE)
User-Agentt Backdoor de Ejecución Remota de Código (RCE)Severidad: Crítico (Equivalente CVSS: 10.0)
Tipo de Vulnerabilidad: Backdoor de Cadena de Suministro / Ejecución Remota de Código (RCE)
Software Afectado: PHP 8.1.0-dev (Solo Build de Desarrollo)
Vector de Ataque: Remoto (Sin Autenticación)
Autenticación Requerida: No
Interacción del Usuario: Ninguna
Impacto: Compromiso Total del Sistema
El Backdoor User-Agentt de PHP 8.1.0-dev es uno de los compromisos de cadena de suministro más infames en la historia del software de código abierto. A diferencia de las vulnerabilidades tradicionales que surgen de errores de programación, este problema fue el resultado de código malicioso insertado intencionalmente en el repositorio oficial del código fuente de PHP.
El backdoor apareció en los snapshots de desarrollo de PHP 8.1.0-dev durante marzo de 2021, después de que los atacantes comprometieran con éxito la infraestructura Git de PHP. Los commits maliciosos suplantaron a mantenedores de confianza de PHP e introdujeron un mecanismo oculto capaz de ejecutar código PHP arbitrario siempre que se recibiera una cabecera HTTP especialmente manipulada.
Aunque el backdoor estuvo presente solo brevemente antes de ser descubierto y eliminado, cualquier servidor que implementara uno de los builds de desarrollo comprometidos se volvió instantáneamente vulnerable a la Ejecución Remota de Código (RCE) sin autenticación.
Este incidente cambió fundamentalmente el flujo de trabajo de desarrollo de PHP y finalmente condujo a la migración del repositorio fuente de PHP fuera de su infraestructura Git autogestionada. :contentReference[oaicite:0]{index=0}
La mayoría de las vulnerabilidades de Ejecución Remota de Código se originan en:
Esta vulnerabilidad fue diferente.
No era un bug de código.
Era un backdoor plantado deliberadamente oculto dentro del código fuente legítimo de PHP.
En lugar de explotar una debilidad existente, los atacantes modificaron el propio PHP para ejecutar código PHP arbitrario suministrado por cualquier persona que realizara una solicitud HTTP.
Eso convierte este incidente en uno de los ejemplos más conocidos de un ataque a la cadena de suministro de software.
El 28 de marzo de 2021, aparecieron dos commits sospechosos en el repositorio Git de PHP.
Ambos commits parecían provenir de mantenedores conocidos de PHP.
Inicialmente parecían inofensivos.
Los mensajes de los commits se asemejaban a correcciones ordinarias de erratas.
Sin embargo, los investigadores notaron rápidamente código sospechoso añadido al intérprete de PHP.
El código insertado buscaba en las solicitudes HTTP entrantes una cabecera personalizada:
User-Agentt
Observe la "t" adicional.
Esta sutil diferencia ortográfica ayudó a ocultar el backdoor durante revisiones casuales.
Si la cabecera comenzaba con la cadena de activación:
zerodium
PHP ejecutaba inmediatamente todo lo que venía después usando:
zend_eval_string()
Esto efectivamente permitía a cualquier persona ejecutar código PHP arbitrario de forma remota.
Los commits maliciosos fueron eliminados en cuestión de horas después de su descubrimiento. La investigación indicó posteriormente que los atacantes habían comprometido la infraestructura Git de PHP en lugar de obtener legítimamente las claves de firma de los mantenedores. :contentReference[oaicite:1]{index=1}
El código insertado realizaba aproximadamente la siguiente lógica:
Incoming HTTP Request
│
▼
Read User-Agentt Header
│
▼
Does header start with "zerodium"?
│
Yes ▼
Execute remaining text as PHP
│
▼
Attacker gains Remote Code Execution
En lugar de tratar la cabecera como metadatos inofensivos, PHP la evaluaba directamente como código PHP ejecutable.
Normalmente, una solicitud HTTP contiene cabeceras similares a:
GET / HTTP/1.1
Host: example.com
User-Agent: Mozilla Firefox
La versión comprometida de PHP procesaba adicionalmente:
User-Agentt:
Si su valor comenzaba con:
zerodium
PHP llamaba a:
zend_eval_string()
El contenido restante se convertía en PHP ejecutable.
Conceptualmente:
User-Agentt:
zerodium
│
▼
zend_eval_string(payload)
│
▼
Remote Code Execution
Attacker
│
│ HTTP Request
▼
GET /
User-Agentt: zerodiumsystem("id");
│
▼
PHP 8.1.0-dev
│
▼
Backdoor Triggered
│
▼
system("id")
│
▼
Command Executed
│
▼
Output Returned
Sin autenticación.
Sin sesión.
Sin credenciales.
Una sola solicitud HTTP era suficiente.
Los atacantes eligieron intencionalmente
User-Agentt
en lugar de
User-Agent
porque:
Esta pequeña errata ocultaba un backdoor completo de ejecución remota de código.
Solo:
PHP 8.1.0-dev
Específicamente los snapshots de desarrollo comprometidos publicados durante el incidente de marzo de 2021.
Las versiones estables como:
nunca se vieron afectadas.
El atacante solo necesitaba:
Sin autenticación.
Sin fuerza bruta.
Sin inicio de sesión.
Sin acceso previo.
Una explotación exitosa permite a los atacantes:
En la práctica, esta vulnerabilidad resulta en el compromiso total del servidor.
Los administradores deben investigar inmediatamente los sistemas que expongan:
PHP/8.1.0-dev
dentro de las cabeceras de respuesta como:
X-Powered-By:
PHP/8.1.0-dev
Los registros HTTP también deben examinarse en busca de solicitudes sospechosas que contengan:
User-Agentt
o
zerodium
Muchos sistemas de detección de intrusiones y productos IPS ahora incluyen firmas específicas para este patrón de ataque. :contentReference[oaicite:2]{index=2}
Los posibles indicadores incluyen:
User-Agenttzerodium| Propiedad | Valor |
|---|---|
| Autenticación | Ninguna |
| Interacción del Usuario | Ninguna |
| Complejidad | Muy Baja |
| Privilegios Requeridos |
Esta se considera una de las vulnerabilidades de Ejecución Remota de Código más fáciles de explotar porque el atacante simplemente envía una solicitud HTTP manipulada.
Nunca implemente snapshots de desarrollo de PHP en sistemas de producción.
Si se encontró un servidor ejecutando el build comprometido:
Este incidente demostró varias lecciones importantes:
El compromiso aceleró los cambios en la infraestructura de desarrollo de PHP y destacó la creciente importancia de la seguridad de la cadena de suministro de software en toda la industria. :contentReference[oaicite:3]{index=3}
El Backdoor User-Agentt de PHP 8.1.0-dev sigue siendo uno de los ejemplos más significativos de un ataque a la cadena de suministro de software que afecta a un importante proyecto de código abierto. En lugar de explotar una falla de programación, los atacantes insertaron un backdoor oculto directamente en el código fuente del lenguaje, permitiendo la ejecución remota no autenticada de código PHP arbitrario a través de una cabecera HTTP User-Agentt especialmente manipulada. Aunque los snapshots de desarrollo comprometidos se eliminaron rápidamente y ninguna versión estable de PHP se vio afectada, el incidente subrayó la importancia crítica de asegurar la infraestructura de desarrollo de software, verificar la procedencia del código y evitar la implementación de builds de desarrollo en entornos de producción. Hoy en día, la vulnerabilidad es ampliamente estudiada como un caso emblemático en la seguridad de la cadena de suministro y sirve como recordatorio de que la integridad del proceso de compilación de software es tan importante como la seguridad del propio código.
| Técnica | Descripción |
|---|
| T1195 | Compromiso de la Cadena de Suministro |
| T1059 | Intérprete de Comandos y Scripts |
| T1505 | Componente de Software de Servidor |
| T1105 | Transferencia de Herramientas de Entrada |
| T1071 | Protocolo de Capa de Aplicación |
| T1106 | API Nativa |
| T1055 | Inyección de Procesos (posible post-explotación) |
| T1027 | Archivos o Información Ofuscados |
| Ninguno |
| Remoto | Sí |