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

admin 2021年11月5日01:11:50评论397 views字数 1468阅读4分53秒阅读模式
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)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年11月5日01:11:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Rust && Confluence紧急防护!Unicode双向覆盖字符漏洞(CVE-2021-42574)http://cn-sec.com/archives/609666.html

发表评论

匿名网友 填写信息