
Prueba de concepto para CVE-2026-84361, que demuestra la inyección de comandos en el controlador Perforce de Composer a través de un P4PORT malicioso, con verificación basada en Docker y orientación de mitigación.
Con Docker Compose puede verificar el comportamiento en un entorno aislado que incluye Composer 2.10.2 afectado y el cliente Perforce p4. El contenedor de ejecución se ejecuta con red deshabilitada, sistema de archivos de solo lectura y sin capabilities; solo /tmp y /work (tmpfs) son escribibles.
# Construir la imagen (p4 se obtiene de la distribución oficial y se verifica su SHA-256)
docker compose build
# Verificar directamente el comportamiento rsh: de p4 (por defecto)
docker compose run --rm poc
# Verificar a través de Composer vulnerable
docker compose run --rm poc /usr/local/bin/run-composer-poc.sh
El último comando ejecuta composer update --prefer-source en un espacio de trabajo temporal dentro del contenedor. Como se utiliza un comando marcador que no es un servidor Perforce, Composer en sí puede fallar, pero si se crea el marcador, se mostrará y terminará con éxito.
[+] VULNERABLEEste es un PoC de verificación local para CVE-2026-84361, presente en el controlador VCS de Perforce de Composer. Cuando el source.type de un paquete es perforce, Composer afectado pasa el source.url controlado por el atacante como P4PORT del cliente p4.
p4 trata los P4PORT rsh: / jsh: como comandos locales, no como destinos de conexión de red. Por lo tanto, si se instala desde source un paquete con metadatos no confiables o un composer.lock, se ejecutarán comandos con los privilegios del usuario que ejecuta Composer o de la cuenta de CI.
El payload de este PoC solo crea un archivo marcador vacío en un área temporal.
Descubierto por: saku0512 (GitHub)
Úselo únicamente con fines educativos y para verificación de seguridad en entornos con autorización explícita. No lo ejecute en sistemas o entornos de CI de terceros sin permiso.
>= 1.0, < 2.2.30 y >= 2.3.0, < 2.10.3Para que sea explotable se requiere que p4 esté en el PATH, que el atacante pueda controlar los metadatos del source de Perforce y que el paquete objetivo se instale desde source. Packagist.org no permite metadatos de source de Perforce, por lo que los entornos que usan únicamente Packagist no se ven afectados.
p4php -v
p4 -V
Por defecto no se ejecuta p4; solo se muestran el P4PORT peligroso y el comando que se ejecutaría.
php poc.php
--execute pasa el P4PORT rsh: a p4. El payload solo crea un marcador único en sys_get_temp_dir() y, por defecto, lo limpia al finalizar.
php poc.php --execute
Si aparece [+] VULNERABLE, se confirma que se ejecutó un comando local a través de P4PORT. Para conservar el marcador, agregue --keep-marker.
El composer.json incluido es un ejemplo mínimo de un inline package repository que distribuiría un atacante. Ejecute lo siguiente con un Composer sin corregir y p4 en un entorno aislado:
composer update --prefer-source
Las versiones corregidas rechazan source.url como puerto Perforce inválido antes de ejecutar p4.
Actualice Composer a 2.2.30 o 2.10.3 o posterior. Utilice únicamente repositorios y lock files confiables, y elimine p4 del PATH en entornos que no usen Perforce.