SQLite FTS5中的整数溢出漏洞CVE-2025-7709
FTS5是一个SQLite虚拟表模块,SQLite 的 FTS5(全文搜索扩展)是强大的全文搜索引擎,允许在SQLite数据库快速执行全文搜索查询。
一、基本情况
FTS5是SQLite 3.9.0版本中引入的,用以取代之前的FTS3和FTS4扩展,提供更丰富的特性和更好的性能,特别是在处理大型文本数据时。
FTS5为数据库应用程序提供全文搜索功能,在最基本形式中,全文搜索引擎允许用户高效搜索包含一个或多个搜索词实例子集大量文档。
栋科技漏洞库关注到SQLite FTS5扩展中的存在一个整数溢出漏洞,该漏洞现已被追踪为CVE-2025-7709,该漏洞的CVSS 3.1评分为6.9。
二、漏洞分析
CVE-2025-7709是存在于SQLite FTS5扩展中的整数溢出漏洞,当计算逻辑删除指针数组的大小并将其截断为32位整数时就会发生该漏洞。
攻击者可以通过操控数据,利用该漏洞导致指向部分受控数据的指针越界写入,然后,可以利用漏洞将指向部分受控数据的指针写入界外。
溢出可能由能够执行任意查询的攻击者或能够使应用程序进程成为受控SQLite DB文件的攻击者触发,从而导致内存损坏或任意代码执行。
我们可以对该漏洞进行详细分析:
1、当nByte被计算为指针数组的总大小时,fts5SegIterAllocTombstone()中会出现漏洞:


2、nByte是一个有符号的32位整数。
虽然SZ_FTS5TOMBSTONEARRAY宏中完成的乘法是64位乘法,但如果结果值超过2^32-1,则结果将被截断为32位。
pIter->pSeg->nPgTombstone是一个完全由攻击者控制的32位值,存储在FTS5表的元数据表中:

3、通过将nPgTombstone设置为例如1610612738,nByte变为32。因此,对于应该适合1610612738个条目的数组,只分配了32个字节。
4、然后在fts5MultiIterIsDeleted()函数中使用此数组。
数组索引使用当前上下文的Rowid计算,并通过Tombstone指针的数量进行绑定检查。
由于nTombstone是未溢出的原始值,因此iPg条目可以指向界外。
5、如果iPg处的条目为0,则分配一个结构,并将指向该结构的指针写在边界之外:

三、POC概念验证

四、影响范围
SQLite <= 3.49.1
五、修复建议
SQLite >= 3.50
六、参考链接
