
Aplicação de exemplo, vulnerável a CVE-2023-32692 (Injeção de Regras de Validação no Framework PHP CodeIgniter)
CVE-2023-32692 é uma vulnerabilidade de injeção de código no framework PHP CodeIgniter 4, afetando as versões 4.0.0 até 4.3.4. Foi corrigida na versão 4.3.5 (lançada em junho de 2023). Este é um ambiente de demonstração para quem quiser experimentar.
Detalhes da vulnerabilidade podem ser encontrados no blog da MOGWAI LABS.
Este repositório contém uma aplicação mínima do CodeIgniter 4 que demonstra a vulnerabilidade. Ele vem com uma configuração de Dev Container para que você possa iniciá-lo diretamente do VS Code (ou qualquer editor compatível) sem a necessidade de instalação local do PHP.
O contêiner Docker subjacente usa PHP 8.3 e instala a extensão XDebug para permitir depuração. Módulos PHP adicionais, necessários pelo framework CodeIgniter, são instalados como 'recursos do Devcontainer' locais, basicamente porque eu queria testar esse recurso.
As seguintes extensões do VS Code estão incluídas (todas instaladas dentro do contêiner, não na sua instância do VS Code):
| Extension | Purpose |
|---|---|
xdebug.php-debug | Suporte ao PHP XDebug — percorrer o caminho do código vulnerável |
bmewburn.vscode-intelephense-client | PHP Intelephense para navegação de código |
humao.rest-client | Cliente HTTP para executar os modelos de requisição incluídos |
composer quando o contêiner é construído, não é necessário fazer nada aqui.cp env .env
O Dev Container inclui Apache, mas o servidor de desenvolvimento embutido do PHP é suficiente para esta PoC. Abra um terminal dentro do VS Code e execute:
./spark serve --host 0.0.0.0
A aplicação estará disponível em http://localhost:8080. Você pode acessá-la fora do contêiner, usando seu navegador web normal.
O arquivo .vscode/launch.json configura o XDebug para escutar na porta TCP 9003 (também definida no Dockerfile do Dev Container):
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
Inicie o listener de depuração antes de iniciar o servidor de desenvolvimento PHP: clique no ícone "Executar e Depurar" na barra lateral do VS Code e pressione o botão de play ao lado de "Listen for Xdebug".

O endpoint vulnerável está implementado em app/Controllers/Poc.php. Ele expõe duas rotas:
| Route | Description |
|---|---|
POST /poc/update | Endpoint vulnerável — usa regras de validação baseadas em string |
POST /poc/updateSafe | Endpoint seguro — usa regras de validação baseadas em array |
Defina um ponto de interrupção em Poc::update() e trace como o placeholder {id} é expandido na string de regra dentro do motor de validação do CodeIgniter. O código relevante do framework está em vendor/codeigniter4/framework/system/Validation/Validation.php.
A pasta http_requests/ contém modelos prontos para uso da extensão REST Client do VS Code:
| File | Description |
|---|---|
reqular_request.http |
Abra qualquer arquivo .http e clique em Enviar Requisição acima do bloco de requisição para executá-lo.
| Requisição legítima de base — sem injeção, validação passa normalmente |
basic_poc.http | Injeta regras de validação adicionais via o parâmetro id |
system_call.http | Explora a injeção para chamar system() e executar um comando do SO (touch /tmp/pwn) |