SQLite数据库被曝存在漏洞,漏洞已存在22年
SQLite数据库存在一个高危漏洞,该漏洞被追踪为CVE-2022-35737(CVSS评分:7.5),已经存在22年之久。据了解,该漏洞是2000年10月代码更改的一部分,可能使攻击者崩溃或控制程序。值得庆幸的是,该漏洞在2022年7月21日发布的版本3.39.2中得到解决。
Trail of Bits研究人员Andreas Kellas在一篇技术文章中表示,CVE-2022-35737在64位系统上是可利用的,可利用性取决于程序的编译方式。当编译库时没有堆栈金丝雀时,任意代码执行是确认的,但是当堆栈金丝雀存在时,任意代码执行是未确认的,并且在所有情况下都确认拒绝服务。
SQLite是用C语言编程,使用最广泛的数据库引擎,默认情况下包含Android、iOS、Windows和macOS,以及流行的web浏览器,如谷歌Chrome、Mozilla Firefox和Apple Safari。
所以,为了利用CVE-2022-35737漏洞,攻击者必须将大字符串输入传递给printf函数的 SQLite 实现,并且格式字符串包含 %Q、%q 或 %w 格式替换类型。该漏洞与printf调用的名为“ sqlite3_str_vappendf ”的函数处理字符串格式的方式有关。
然而,漏洞库成功武器化的前提是字符串包含%Q、%Q或%w格式替换类型,当用户控制的数据写入超出堆栈分配缓冲区的边界时,可能会导致程序崩溃。
研究人员解释,如果格式字符串包含’!’特殊字符以启用unicode字符扫描,那么在最坏的情况下就有可能实现任意代码执行,或者导致程序无限期地挂起和循环。
最后,该漏洞是几十年前被认为不切实际的例子,分配1GB字符串作为输入,随着64位计算机系统的出现而变得可行。研究人员Kellas表示,当系统主要是32位体系结构时,这个bug在编写时可能看起来并不是一个错误。因为追溯到2000年的SQLite源代码,当时系统主要是32位架构。
不管怎么样,SQLite数据库中存在的CVE-2022-35737漏洞,已经在2022年7月21日发布的版本3.39.2中得到解决。用户尽快升级更新,防止不法分子利用该漏洞进行攻击。