广泛使用的SQLite数据库库中报告的22年漏洞

SQLite数据库库中披露了一个高度严重的漏洞,该漏洞是2000年10月作为代码更改的一部分引入的,攻击者可能会使程序崩溃或控制程序。
该问题被追踪为CVE-2022-35737(CVSS评分:7.5),有22年历史,影响SQLite 1.0.12至3.39.1版本,已在2022年7月21日发布的3.39.2版本中解决。
“CVE-2022-35737在64位系统上是可利用的,可利用性取决于程序的编译方式,”比特之路研究员Andreas Kellas在今天发表的一篇技术综述中表示。
当编译库时没有堆栈金丝雀时,会确认任意代码的执行,但如果存在堆栈金丝雀,则不会确认,并且在所有情况下都会确认拒绝服务

SQLite以C语言编程,是使用最广泛的数据库引擎,默认情况下包括在Android、iOS、Windows和macOS中,以及流行的web浏览器,如Google Chrome、Mozilla Firefox和Apple Safari中。
Trail of Bits发现的漏洞涉及一个整数溢出错误,当将非常大的字符串输入作为参数传递给printf函数的SQLite实现时,该错误会发生,而printf函数又会使用另一个函数来处理字符串格式化(“sqlite3_str_vappendf”)。
但是,如果字符串包含%Q、%Q或%w格式替换类型,则缺陷库的成功武器化可能会在用户控制的数据写入堆栈分配缓冲区边界之外时导致程序崩溃。
Kellas解释道:“如果格式字符串包含'!'特殊字符以启用unicode字符扫描,那么在最坏的情况下可能实现任意代码执行,或者导致程序无限期地挂起和循环”。
该漏洞也是几十年前一度被认为不切实际的场景的一个例子——分配1GB字符串作为输入——随着64位计算系统的出现而变得可行。
Kellas说:“当系统主要是32位体系结构时,这个bug在编写时(在SQLite源代码中可以追溯到2000年)可能看起来并不是一个错误”。