
Applicazione di esempio, vulnerabile a CVE-2023-32692 (Iniezione di regole di validazione nel framework PHP CodeIgniter)
CVE-2023-32692 è una vulnerabilità di code injection nel framework PHP CodeIgniter 4, che interessa le versioni dalla 4.0.0 alla 4.3.4. È stata corretta nella versione 4.3.5 (rilasciata a giugno 2023). Questo è un ambiente demo per chiunque voglia sperimentarla.
I dettagli della vulnerabilità sono disponibili sul blog di MOGWAI LABS.
Questo repository contiene un'applicazione CodeIgniter 4 minimale che dimostra la vulnerabilità. Include una configurazione per Dev Container così puoi avviarla direttamente da VS Code (o qualsiasi editor compatibile) senza bisogno di un'installazione PHP locale.
Il container Docker sottostante usa PHP 8.3 e installa l'estensione XDebug per consentire il debug. I moduli PHP aggiuntivi, richiesti dal framework CodeIgniter, sono installati come "Devcontainer features" locali, principalmente perché volevo provare quella funzionalità.
Sono incluse le seguenti estensioni VS Code (tutte installate all'interno del container, non nella tua istanza di VS Code):
| Estensione | Scopo |
|---|---|
xdebug.php-debug | Supporto PHP XDebug — consente di eseguire passo-passo il percorso di codice vulnerabile |
bmewburn.vscode-intelephense-client | PHP Intelephense per la navigazione del codice |
humao.rest-client | Client HTTP per inviare i template di richiesta inclusi |
composer durante la creazione del container; non è necessario fare nulla.cp env .env
Il Dev Container include Apache, ma il server di sviluppo integrato di PHP è sufficiente per questo PoC. Apri un terminale dentro VS Code ed esegui:
./spark serve --host 0.0.0.0
L'applicazione sarà disponibile all'indirizzo http://localhost:8080. Puoi accedervi anche dall'esterno del container, usando il tuo normale browser web.
Il file .vscode/launch.json configura XDebug per l'ascolto sulla porta TCP 9003 (impostata anche nel Dockerfile del Dev Container):
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
Avvia il listener di debug prima di avviare il server di sviluppo PHP: fai clic sull'icona "Run and Debug" nella barra laterale di VS Code e premi il pulsante play accanto a "Listen for Xdebug".

L'endpoint vulnerabile è implementato in app/Controllers/Poc.php. Espone due route:
| Route | Descrizione |
|---|---|
POST /poc/update | Endpoint vulnerabile — usa regole di validazione basate su stringhe |
POST /poc/updateSafe | Endpoint sicuro — usa regole di validazione basate su array |
Imposta un breakpoint in Poc::update() e traccia come il segnaposto {id} viene espanso nella stringa della regola all'interno del motore di validazione di CodeIgniter. Il codice pertinente del framework si trova in vendor/codeigniter4/framework/system/Validation/Validation.php.
La cartella http_requests/ contiene template pronti all'uso per l'estensione REST Client di VS Code:
| File | Descrizione |
|---|---|
Apri un qualsiasi file .http e fai clic su Send Request sopra il blocco di richiesta per eseguirlo.
reqular_request.http| Richiesta legittima di base — nessuna iniezione, la validazione passa normalmente |
basic_poc.http | Inietta regole di validazione aggiuntive tramite il parametro id |
system_call.http | Sfrutta l'iniezione per chiamare system() ed eseguire un comando del sistema operativo (touch /tmp/pwn) |