CVE-2023-32692 是 CodeIgniter 4 PHP 框架中的一个代码注入漏洞,影响版本 4.0.0 到 4.3.4。该漏洞已在 4.3.5(2023 年 6 月发布)中修复。这是一个供任何想尝试的人使用的演示环境。
漏洞详情可在 MOGWAI LABS 博客 中找到。
此仓库包含一个最小的 CodeIgniter 4 应用程序,演示该漏洞。它附带 Dev Container 配置,因此你可以直接从 VS Code(或任何兼容的编辑器)启动,无需本地 PHP 安装。
底层 Docker 容器使用 PHP 8.3 并安装 XDebug 扩展以支持调试。CodeIgniter 框架所需的其他 PHP 模块作为本地“Devcontainer 特性”安装,主要是因为我尝试了一下这个功能。
包含以下 VS Code 扩展(全部安装在容器内,而不是你的 VS Code 实例):
| 扩展 | 用途 |
|---|---|
xdebug.php-debug | PHP XDebug 支持 — 逐步执行易受攻击的代码路径 |
bmewburn.vscode-intelephense-client | PHP Intelephense 用于代码导航 |
humao.rest-client | HTTP 客户端,用于发送附带的请求模板 |
composer 自动安装,无需在此处执行任何操作。cp env .env
Dev Container 包含 Apache,但 PHP 内置开发服务器对此 PoC 来说已足够。在 VS Code 内打开终端并运行:
./spark serve --host 0.0.0.0
应用程序将在 http://localhost:8080 上可用。你可以使用常规网页浏览器在容器外部访问它。
.vscode/launch.json 配置 XDebug 监听 TCP 端口 9003(也在 Dev Container 的 Dockerfile 中设置):
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003
}
]
}
在启动 PHP 开发服务器之前启动调试监听器:单击 VS Code 侧边栏中的“运行和调试”图标,然后按“Listen for Xdebug”旁边的播放按钮。

易受攻击的端点实现在 app/Controllers/Poc.php 中。它暴露了两个路由:
| 路由 | 描述 |
|---|---|
POST /poc/update | 易受攻击的端点 — 使用基于字符串的验证规则 |
POST /poc/updateSafe | 安全端点 — 使用基于数组的验证规则 |
在 Poc::update() 中设置断点,并跟踪 {id} 占位符在 CodeIgniter 验证引擎中如何扩展为规则字符串。相关框架代码位于 vendor/codeigniter4/framework/system/Validation/Validation.php。
http_requests/ 文件夹包含用于 VS Code REST Client 扩展的现成模板:
| 文件 | 描述 |
|---|---|
reqular_request.http | 基准合法请求 — 无注入,验证正常通过 |
打开任意 .http 文件,然后点击请求块上方的 Send Request 执行它。
basic_poc.http通过 id 参数注入额外的验证规则 |
system_call.http | 利用注入调用 system() 并执行操作系统命令(touch /tmp/pwn) |