长亭百川云 - 文章详情

SQLite3漏洞分析(CVE-2022-3039)

ADLab

106

2024-07-13

更多安全资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)

01

漏洞概述

SQLite3具有简单、轻量、高效的特点,广泛应用于小型应用和嵌入式系统的数据存储。在2023年BlackHat-Asian会议上,有三个SQLite3的漏洞被披露,这三个SQLite3的漏洞编号分别是CVE-2022-3039、CVE-2022-3041、CVE-2022-3195。WebSQL是一种前端浏览器数据库API。WebSQL它是在Web浏览器中使用的一种数据库解决方案,允许开发者通过JavaScript使用SQL语句来操作浏览器中的数据库。WebSQL提供了一种简单方式来存储和检索数据,特别适用于离线应用程序和需要在客户端进行数据处理的场景。Chrome和 Safari等都支持通过SQLite来实现WebSQL。

具体漏洞描述如下表所示:

CVE ID

描述

危害

CVESSv3.1得分

CVE-2022-3039

SQLite3在处理SQL语句查询优化时存在UAF漏洞,导致代码执行

代码执行或信息泄露

8.8

CVE-2022-3041

SQLite3在处理SQL语句查询优化时存在UAF漏洞,导致代码执行

代码执行或信息泄露

8.8

CVE-2022-3195

SQLite3存在越界写漏洞,导致堆溢出

代码执行

8.8

02

处置建议

升级到最新版本的Chrome及SQLite3。

03

技术分析

我们选取了CVE-2022-3039作为本次漏洞分析的重点,CVE-2022-3041的原理与CVE-2022-3039类似。

当sqlite3Select函数处理Select语句时,它将处理pElist、 pOrderBy和pHaving节点,并根据不同的AGG_FUNCTION和AGG_COLUMN类型保存到对应的到pAggInfo结构中。这个代码的实现主要是通过addAggInfoColumn及addAggInfoFunc来申请相应的节点内存并保存pAggInfo结构变量中。

`SQLITE_PRIVATE int sqlite3Select(`  `Parse *pParse,         /* The parser context */`  `Select *p,             /* The SELECT statement being coded. */`  `SelectDest *pDest      /* What to do with the query results */``){`      `      sqlite3ExprAnalyzeAggList(&sNC, pEList);`      `sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy);`      `...`      `sqlite3ExprAnalyzeAggregates(&sNC, pHaving);`      `...``   `      `finalizeAggFunctions(pParse, pAggInfo);`      `sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);``   ``}``   ``static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){`  `int i;`  `pInfo->aCol = sqlite3ArrayAllocate(`       `db,`       `pInfo->aCol,`       `sizeof(pInfo->aCol[0]),`       `&pInfo->nColumn,`       `&i`  `);`  `return i;``}``   ``static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){`  `int i;`  `pInfo->aFunc = sqlite3ArrayAllocate(`       `db,`       `pInfo->aFunc,`       `sizeof(pInfo->aFunc[0]),`       `&pInfo->nFunc,`       `&i`  `);`  `return i;``}`

为了提高效率,pHaving节点语句在内部代码优化的过程中,将删除pOrderBy节点。

`SQLITE_PRIVATE int sqlite3Select(`  `Parse *pParse,         /* The parser context */`  `Select *p,             /* The SELECT statement being coded. */`  `SelectDest *pDest      /* What to do with the query results */``){``...`    `if( pSub->pOrderBy!=0`     `&& (p->pOrderBy!=0 || pTabList->nSrc>1)      /* Condition (5) */`     `&& pSub->pLimit==0                           /* Condition (1) */`     `&& (pSub->selFlags & SF_OrderByReqd)==0      /* Condition (2) */`     `&& (p->selFlags & SF_OrderByReqd)==0         /* Condition (3) and (4) */`     `&& OptimizationEnabled(db, SQLITE_OmitOrderBy)`    `){`      `SELECTTRACE(0x100,pParse,p,`                `("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));`      `sqlite3ExprListDelete(db, pSub->pOrderBy);`      `pSub->pOrderBy = 0;`    `}``...``}`

但是这个释放的pOrderBy节点可能是一个AGG_FUNCTION函数,并且它的指针之前保存在pAggInfo结构中。

这个指针将在后续的resetAccumulator函数中被使用,这将导致UAF漏洞。

`SQLITE_PRIVATE int sqlite3Select(`  `Parse *pParse,         /* The parser context */`  `Select *p,             /* The SELECT statement being coded. */`  `SelectDest *pDest      /* What to do with the query results */``){``   `      `...`      `sqlite3VdbeResolveLabel(v, addrReset);`      `resetAccumulator(pParse, pAggInfo);`      `sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag);`      `VdbeComment((v, "indicate accumulator empty"));`      `....``   ``}`

漏洞成因是在代码优化的过程中,程序删除了pOrderBy节点,但是这个节点的指针依然保持在pAggInfo结构中。

我们可以通过堆喷的方式占位,并在resetAccumulator函数中,我们可以任意控制pE指针的指向,所以我们可以伪造有效的pE->x.pList,并调用sqlite3KeyInfoFromExprList,并通过sqlite3KeyInfoFromExprList ->sqlite3ExprNNCollSeq->sqlite3ExprCollSeq->sqlite3GetCollSeq 调用链实现信息泄漏或代码执行。POC验证如下:

参考链接:

[1] https://nvd.nist.gov/vuln/detail/CVE-2022-3195

[2] https://crbug.com/1358381

[3] https://i.blackhat.com/Asia-23/AS-23-Chen-New-Wine-in-an-Old-Bottle-Attacking-Chrome-WebSQL.pdf

启明星辰积极防御实验室(ADLab)

ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截止目前,ADLab已通过CVE累计发布安全漏洞1100余个,通过 CNVD/CNNVD/NVDB累计发布安全漏洞3000余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖基础安全研究、移动与物联网安全研究、工控安全研究、信创安全研究、云安全研究、无线安全研究、高级威胁研究、攻防体系建设。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2