CryptoAPI是Windows系统处理与加密相关事务的API。在证书处理方面,负责读取和分析证书来验证是否经过验证的CA。浏览器也会使用CryptoAPI用于TLS证书验证。
2022年,美国国家安全局(NSA)和国家网络安全中心(NCSC)发现了CryptoAPI的一个安全漏洞,漏洞编号CVE-2022-34689,CVSS评分7.5分。攻击者利用该漏洞可以进行身份欺骗,并执行认证、以伪造的目标证书进行代码签名等行为。微软已经2022年8月修复该漏洞。
该漏洞产生的根源在于证书缓存索引密钥(certificate cache index key),该密钥是基于MD5的,而其安全性假设是无碰撞的。但自2009年起,MD5已被证明是可碰撞的。
攻击流程分为2个阶段。第一个阶段要求有一个合法的证书,并修改,然后给受害者。第二个阶段包括创建一个MD5与修复后的合法证书的新证书,并使用新证书来欺骗原始证书主体的身份。
图 攻击流程
构建给定MD5值的证书叫做原像攻击(Preimage Attack),目前在计算上是不可行的。但是可以生成2个具有给定前缀MD5指纹的证书,这叫做选定前缀碰撞。
图 选定前缀攻击
研究人员检索了使用CryptoAPI的可能受到欺骗攻击的应用,发现Chrome v48及之前版本和基于Chromium的应用都可以被利用。研究人员认为受影响的应用还有很多。
研究人员给出了2个漏洞PoC,包括利用Chrome v48和crypt32.dll中有漏洞的MD5检查。
漏洞利用代码中包含2个Python脚本和最终生成的微软身份。Chrome v48攻击流如下:
PoC视频参见:https://user-images.githubusercontent.com/114926055/214040642-beb765f7-4788-45e8-836c-a08dc441b5b4.mp4
本地漏洞利用会范围证书chainContext的trustStatus,即使第一个证书是合法的,但第二个证书是非法的,因此可以证明crypt32.dll有漏洞的MD5检查。
漏洞利用PoC代码参见:https://github.com/akamai/akamai-security-research/tree/main/PoCs/CVE-2022-34689
更多关于漏洞利用的技术细节参见:https://www.akamai.com/blog/security-research/exploiting-critical-spoofing-vulnerability-microsoft-cryptoap
参考及来源:https://www.bleepingcomputer.com/news/security/exploit-released-for-critical-windows-cryptoapi-spoofing-bug/