CVE-2022-31631(CVSS9.1):严重的PHP缺陷使网站遭受SQL注入攻击

阅读量40823

发布时间 : 2025-02-17 11:11:05

x
译文声明

本文是翻译文章,文章原作者 do son,文章来源:securityonline

原文地址:https://securityonline.info/cve-2022-31631-cvss-9-1-critical-php-flaw-exposes-websites-to-sql-injection-attacks/

译文仅供参考,具体内容表达以及含义原文为准。

CVE-2024-4577 - CVE-2022-31631

在 PHP 中发现了一个严重漏洞,这可能会使网站和应用程序面临 SQL 注入攻击的风险。强烈建议用户尽快更新到最新版本的 PHP。

该漏洞被标识为 CVE-2022-31631(通用漏洞评分系统评分为 9.1),影响 PHP 8.0.x 版本(8.0.27 之前)、8.1.x 版本(8.1.15 之前)以及 8.2.x 版本(8.2.2 之前)。当与 SQLite 数据库配合使用时,该漏洞存在于 PDO::quote () 函数中。这个函数通常用于在将用户提供的数据用于数据库查询之前对其进行清理,这是防止 SQL 注入的关键步骤。

CVE-2022-31631 漏洞源于一个整数溢出问题。当向 PDO::quote () 传递一个过长的字符串时,该函数可能无法正确转义输入内容。这可能会导致生成格式错误的 SQL 查询,使攻击者能够注入恶意代码,并有可能控制数据库。

核心问题在于 PHP 处理字符串长度的方式。虽然底层的 SQLite 函数 sqlite3_snprintf () 使用 32 位整数作为长度参数,但 PHP 的 PDO::quote () 函数使用的是 zend_long 类型,在现代系统上该类型通常是 64 位的。这种差异可能会导致整数溢出,即长度值会回绕,从而导致字符串没有被正确引用。

在特定场景下,这种溢出甚至可能导致该函数仅返回一个单引号,这就完全抵消了原本预期的清理效果,为 SQL 注入打开了大门。虽然内存限制和 post_max_size 设置可能会起到一定的缓解作用,但它们并不能可靠地防范这个漏洞。

虽然从理论上讲,32 位系统由于整数和 zend_long 类型的大小一致,受到该漏洞影响的可能性较小,但 64 位架构尤其容易受到攻击。所提供的测试脚本展示了在这些系统上如何利用这种溢出漏洞。

对于任何使用受影响的 PHP 版本并搭配 SQLite 数据库的应用程序来说,这个漏洞都构成了重大风险。SQL 注入是一种严重的威胁,攻击者可以借此窃取敏感数据、修改数据库内容,甚至控制服务器。

因此,所有 PHP 用户立即升级到已修复该漏洞的版本(PHP 8.0.27、8.1.15 或 8.2.2 ,或更新的版本)绝对至关重要。网站管理员和开发人员即使在更新之后,也应该彻底检查他们的代码,以确保实施了恰当的数据清理措施。

本文翻译自securityonline 原文链接。如若转载请注明出处。
分享到:微信
+10赞
收藏
安全客
分享到:微信

发表评论

Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66