
Aplicación de ejemplo, vulnerable a CVE-2023-32692 (Inyección de reglas de validación en el framework PHP CodeIgniter)
CVE-2023-32692 es una vulnerabilidad de inyección de código en el framework PHP CodeIgniter 4, que afecta a las versiones 4.0.0 a 4.3.4. Se corrigió en 4.3.5 (publicada en junio de 2023). Este es un entorno de demostración para cualquiera que quiera experimentar con ella.
Los detalles de la vulnerabilidad se pueden encontrar en el blog de MOGWAI LABS.
Este repositorio contiene una aplicación mínima de CodeIgniter 4 que demuestra la vulnerabilidad. Incluye una configuración de Dev Container para que puedas ponerla en marcha directamente desde VS Code (o cualquier editor compatible) sin necesidad de una instalación local de PHP.
El contenedor Docker subyacente usa PHP 8.3 e instala la extensión XDebug para permitir la depuración. Los módulos PHP adicionales requeridos por el framework CodeIgniter se instalan como "Devcontainer features" locales, básicamente porque quería probar esa funcionalidad.
Se incluyen las siguientes extensiones de VS Code (todas instaladas dentro del contenedor, no en tu instancia de VS Code):
| Extension | Purpose |
|---|---|
xdebug.php-debug | Soporte PHP XDebug: recorre paso a paso la ruta de código vulnerable |
bmewburn.vscode-intelephense-client | PHP Intelephense para navegación de código |
humao.rest-client | Cliente HTTP para ejecutar las plantillas de solicitud incluidas |
composer cuando se construye el contenedor; no necesitas hacer nada aquí.cp env .env
El Dev Container incluye Apache, pero el servidor de desarrollo integrado de PHP es suficiente para este PoC. Abre una terminal dentro de VS Code y ejecuta:
./spark serve --host 0.0.0.0
La aplicación estará disponible en http://localhost:8080. Puedes acceder a ella desde fuera del contenedor con tu navegador web habitual.
El archivo .vscode/launch.json configura XDebug para escuchar en el puerto TCP 9003 (también definido en el Dockerfile del Dev Container):
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
Inicia el listener de depuración antes de iniciar el servidor de desarrollo de PHP: haz clic en el icono "Run and Debug" de la barra lateral de VS Code y pulsa el botón de reproducción junto a "Listen for Xdebug".

El endpoint vulnerable está implementado en app/Controllers/Poc.php. Expone dos rutas:
| Route | Description |
|---|---|
POST /poc/update | Endpoint vulnerable — usa reglas de validación basadas en cadenas |
POST /poc/updateSafe | Endpoint seguro — usa reglas de validación basadas en arrays |
Establece un punto de interrupción en Poc::update() y rastrea cómo el marcador de posición {id} se expande dentro de la cadena de reglas en el motor de validación de CodeIgniter. El código relevante del framework está en vendor/codeigniter4/framework/system/Validation/Validation.php.
La carpeta http_requests/ contiene plantillas listas para usar para la extensión REST Client de VS Code:
| File | Description |
|---|---|
Abre cualquier archivo .http y haz clic en Send Request sobre el bloque de solicitud para ejecutarlo.
reqular_request.http| Solicitud legítima de referencia — sin inyección, la validación pasa con normalidad |
basic_poc.http | Inyecta reglas de validación adicionales a través del parámetro id |
system_call.http | Explota la inyección para llamar a system() y ejecutar un comando del sistema (touch /tmp/pwn) |