Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

  • A+
所属分类:安全漏洞
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
点击蓝字·关注我们
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
全文 932 字,预计阅读时间 3 分钟
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

前言

2021.11.02,Redhat官方公布修复了一个Unicode双向覆盖字符漏洞,此漏洞可导致看似正常无害的代码,实际隐藏了恶意攻击代码。发布后,Rust官方积极响应,立刻推出了1.15.1版本,来防护此漏洞。本文使用Rust 1.15.0来对此漏洞进行解析和复现。

Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

一、影响范围

只能说是非常非常广,这个洞在国外火的飞起,国内一点动静没有。。。

Rust < 1.15.1

还有confluence官方发布的影响产品

Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

等等产品,都会受到影响

Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

二、漏洞环境

docker push vultarget/rust_cve-2021-42574:1.56.0
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

三、复现

使用VSCode等编辑器打开显示这样

Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

可以看到此时代码逻辑,应该输出

user

我们实际来看下rust编译后,输出的结果


docker run -it vultarget/rust_cve-2021-42574:1.56.0

Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)


居然输出 admin!代码玄学了??


当然不是,我们用 vim 打开代码文件

Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

原来真正的代码长这样。。。。这个逻辑一定会输出

admin

所以看到的代码不一定是真实的。。。

Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

四、漏洞简析

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
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

五、修复方案

1. 升级编译器版本,如Rust

2. 对代码转义处理

3. 定期检查代码中是否存在

U+202A、U+202B、U+202C、U+202D、U+202E、U+2066、U+2067、U+2068、U+2069

等字符,注意不要用支持双向感知的工具打开


目前Github会对双向感知代码进行提示

Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)


Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

六、参考链接

https://blog.rust-lang.org/2021/11/01/cve-2021-42574.htmlhttps://nvd.nist.gov/vuln/detail/CVE-2021-42574https://confluence.atlassian.com/security/multiple-products-security-advisory-unrendered-unicode-bidirectional-override-characters-cve-2021-42574-1086419475.html
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
END
Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
免责声明

本公众号内的文章及工具仅提供学习用途,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本公众号及文章作者不为此承担任何责任。


今日关注福利

Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)
发表于1小时前cckuailong
查看:xxxx回复:yyyy

回复  40x ,获取 Python版自动化绕过401/403的工具


好文分享收藏赞一下最美点在看哦

原文始发于微信公众号(我不是Hacker):Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: