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

渗透技巧 6个月前 admin
163 0 0

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














01

漏洞概述


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

处置建议

03

技术分析

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;}

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 subqueryn",i+1));      sqlite3ExprListDelete(db, pSub->pOrderBy);      pSub->pOrderBy = 0;    }...}

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验证如下:

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



参考链接:

[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余个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖基础安全研究、移动与物联网安全研究、工控安全研究、信创安全研究、云安全研究、无线安全研究、高级威胁研究、攻防体系建设。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等





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

原文始发于微信公众号(ADLab):SQLite3漏洞分析(CVE-2022-3039)

版权声明:admin 发表于 2023年10月18日 下午5:31。
转载请注明:SQLite3漏洞分析(CVE-2022-3039) | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...