2021.11.02,Redhat官方公布修复了一个Unicode双向覆盖字符漏洞,此漏洞可导致看似正常无害的代码,实际隐藏了恶意攻击代码。发布后,Rust官方积极响应,立刻推出了1.15.1版本,来防护此漏洞。本文使用Rust 1.15.0来对此漏洞进行解析和复现。
只能说是非常非常广,这个洞在国外火的飞起,国内一点动静没有。。。
Rust < 1.15.1
还有confluence官方发布的影响产品
等等产品,都会受到影响
二、漏洞环境
docker push vultarget/rust_cve-2021-42574:1.56.0
三、复现
使用VSCode等编辑器打开显示这样
可以看到此时代码逻辑,应该输出
user
我们实际来看下rust编译后,输出的结果
docker run -it vultarget/rust_cve-2021-42574:1.56.0
居然输出 admin!代码玄学了??
当然不是,我们用 vim 打开代码文件
原来真正的代码长这样。。。。这个逻辑一定会输出
admin
所以看到的代码不一定是真实的。。。
四、漏洞简析
Unicode支持从左到右的语言,也支持从右到左的语言。为了支持在从右到左的语言中插入从左到右读的单词,推出了一个不可见码点的特性 -- 双向覆盖。
这些码点通常在 Internet 上用于在另一种语言的句子中嵌入一个单词(具有不同的文本方向)。但它们可以被用来操纵源代码在某些编辑器的显示方式,导致开发人员看到的代码与编译的代码不同。
例如,以下代码段({U+NNNN} 替换 Unicode 码点NNNN)
if access_level != "user{U+202E} {U+2066}// Check if admin{U+2069} {U+2066}" {
将由双向感知工具呈现为:
if access_level != "user" { // Check if admin
五、修复方案
1. 升级编译器版本,如Rust
2. 对代码转义处理
3. 定期检查代码中是否存在
U+202A、U+202B、U+202C、U+202D、U+202E、U+2066、U+2067、U+2068、U+2069
等字符,注意不要用支持双向感知的工具打开
目前Github会对双向感知代码进行提示
六、参考链接
https://blog.rust-lang.org/2021/11/01/cve-2021-42574.html
https://nvd.nist.gov/vuln/detail/CVE-2021-42574
https://confluence.atlassian.com/security/multiple-products-security-advisory-unrendered-unicode-bidirectional-override-characters-cve-2021-42574-1086419475.html
本公众号内的文章及工具仅提供学习用途,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。
今日关注福利
回复 40x ,获取 Python版自动化绕过401/403的工具
原文始发于微信公众号(我不是Hacker):Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论