一个隐藏SQLite数据库长达22年的漏洞

发布时间 2022-10-27

安全专家Andreas Kellas详细介绍了2000年10月推出的SQLite数据库中的一个高严重性漏洞,被追踪为CVE-2022-35737(CVSS评分:7.5)。

1666848358_635a1666c269cec4151a9.png

CVE-2022-35737漏洞是一个整数溢出问题,影响到SQLite 1.0.12至3.39.1版本。该漏洞已在2022年7月21日发布的3.39.2版本中得到解决。此前,如果在C API的字符串参数中使用了数十亿字节,则有时会允许数组边界溢出。攻击者可以触发这个问题,在受影响的系统上执行任意代码。

CVE-2022-35737在64位系统上可被利用,可利用性取决于程序的编译方式。在没有堆栈金丝雀的情况下编译库时确认任意代码执行,存在堆栈金丝雀时未确认,并且在所有情况下都确认拒绝服务。

所以,为了利用CVE-2022-35737漏洞,攻击者必须将大字符串输入传递给printf函数的 SQLite 实现,并且格式字符串包含 %Q、%q 或 %w 格式替换类型。该漏洞与printf调用的名为“ sqlite3_str_vappendf ”的函数处理字符串格式的方式有关。

当sqlite3_str_vappendf函数收到一个大字符串,并且格式替换类型为%q、%Q或%w时,就会触发有符号的整数溢出。

研究人员还发现,如果启用 unicode 字符扫描的特殊字符,那么在最坏的情况下有可能实现任意代码执行,或者导致 DoSS 条件。

最后,安全专家Andreas Kellas总结说道:"这是一个在编写时可能并不像错误的错误”。因为追溯到2000年的SQLite源代码,当时系统主要是32位架构"。