CVE-2026-63221 (CVSS 9.4) - CodeIgniter is a PHP full-stack web framework. From 4.3.0 through 4.7.3, Query B

CVE-2026-63221 是 CodeIgniter 4.3.0 至 4.7.3 版本的 SQL 注入漏洞,位于 Query Builder 的 deleteBatch() 方法。攻击者可利用未转义的 where 绑定值执行任意SQL,导致数据泄露或批量删除。CVSS 9.4,建议立即升级到 4.7.4。了解漏洞原理、攻击场景与修复方案。

🔥 热门漏洞情报 · NVD-Latest · 2026-07-31

CVE-2026-63221 (CVSS 9.4) - CodeIgniter is a PHP full-stack web framework. From 4.3.0 through 4.7.3, Query B

Critical · CVSS 9.4 SQL注入
CVE-2026-63221

📋 漏洞概述

CodeIgniter 4.3.0至4.7.3的Query Builder deleteBatch()存在SQL注入漏洞,用户可控条件值可被当作SQL执行,可能导致数据泄露或破坏。

📋 基础信息

受影响版本CodeIgniter >= 4.3.0, <= 4.7.3
漏洞类型SQL注入
CVSS9.4 · Critical
CVECVE-2026-63221

🔬 漏洞根因

deleteBatch() 方法在生成批量删除SQL时,将 where() 条件中的绑定值直接替换进SQL语句,但未遵循这些绑定值对应的转义标志(escape flags)。导致用户提供的条件值在拼接时未经过正确的参数化转义,从而可以被解释为SQL代码。该缺陷仅存在于 deleteBatch() 代码路径,常规的 delete() 操作能正确转义 where() 绑定值。

🎯 攻击场景

1. 攻击者发现目标应用使用 CodeIgniter 4.3.0-4.7.3,且后端代码调用了 deleteBatch(),并将用户可控参数(如HTTP请求参数)赋给了 where() 条件。2. 攻击者构造恶意值,例如 `value' OR 1=1 -- `,作为 where 条件值提交。3. 应用将 user_input 传入 where('field', $user_input) 后调用 deleteBatch(),生成SQL时未转义该值,导致注入的OR子句被执行。4. 攻击者可能删除表中所有记录或根据注入条件操作任意数据;若数据库权限较高,还可能读取敏感数据或执行其他SQL语句。5. 攻击成功的标志是批量删除操作返回异常影响行数,或观察到数据被非预期删除。

💥 漏洞影响

攻击者可在未经授权的情况下执行任意SQL语句,主要影响是数据完整性:批量删除任意或全部记录,造成拒绝服务或数据丢失。在特定配置下,结合堆叠查询或文件读写权限,可能进一步实现数据泄露、权限提升甚至远程代码执行。由于CVSS 9.4,影响范围广泛且无需特殊权限即可利用。

🛡️ 修复建议

1. 立即升级 CodeIgniter 到 4.7.4 或更高版本,官方已修复 deleteBatch() 的转义逻辑。2. 临时缓解:避免将用户输入直接传入 deleteBatch() 的 where() 条件,改用白名单验证或使用参数化查询(如 QueryBuilder 的 where() 配合手动转义)。3. 若无法立即升级,通过代码审计定位所有 deleteBatch() 调用,确保所有 where 绑定值使用 escape(true) 或经过严格过滤。4. 限制数据库账户权限,禁止高权限账户执行删除操作。

📎 参考链接

🚨 威胁评估

📈 EPSS 利用概率低 (0.4%) (高于 30.4% 的漏洞)
🚨 CISA KEV未被已知利用
🔧 公开 PoC暂无公开 PoC

⚠️ 本文由漏洞情报系统自动生成,仅供安全研究与防御参考。生成时间: 2026-08-02 08:14 | 来源: NVD-Latest

🤖 常见问题解答(FAQ)

❓ 如何检测当前系统是否受影响?

检查 CodeIgniter 版本是否在4.3.0-4.7.3之间,并搜索代码中 deleteBatch() 调用,重点查看 where() 条件是否包含用户可控输入且未显式转义。也可运行包含单引号测试字符串的请求观察SQL错误。

❓ 攻击者利用该漏洞需要什么条件?

攻击者需能向 deleteBatch() 的 where() 条件值注入数据。通常要求应用程序将请求参数直接传入 where(),并执行批量删除。无需认证或低权限即可触发,但必须存在可访问的删除入口。

❓ 临时缓解措施有哪些?

升级前可禁用 deleteBatch(),改用循环 delete();对 where() 值使用 intval/专业过滤器;或使用独立数据库WAF拦截常见SQL注入载荷。同时收紧数据库账户权限,确保连接账号仅具有必要表的删除权限。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)