Unicode算法漏洞几乎祸害所有编程语言,Rust紧急发布补丁

Posted 程序员大咖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unicode算法漏洞几乎祸害所有编程语言,Rust紧急发布补丁相关的知识,希望对你有一定的参考价值。

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

文 | 罗奇奇

出品 | OSC开源社区(ID:oschina2013)

11 月 1 日,剑桥大学研究人员:Nicholas Boucher 和 Ross Anderson 公布了一个 Unicode 双向算法“bidi”相关的漏洞,该漏洞被命名为“ Trojan Source”,追踪代号 CVE-2021-42574 。

bidi 双向算法设计之初是用于处理不同语言的文字排序问题,比如将阿拉伯语单词(从右到左阅读)写入英语句子(从左到右)。大多数编程语言都允许开发者将 bidi 字符放在字符串文字和注释里边,但是,注释和字符串需要遵守语法,Bidi overrides 却不用遵守。因此,将一段代码使用 Bidi 算法多层 LRI 和 RLI 相互嵌入,就可以把其中的字符串任意组合,重新排序。如果你有足够的时间,甚至可以重排一份源代码的字符,生成一份新的符合语法规范的代码。

这对于像 Linux 或 Webkit 这样的超大型开源项目来说并不是一个好消息。如果这个漏洞被用于恶意攻击,将导致一个很大的问题:审查者看到的代码逻辑很可能和编译器编译出来的程序逻辑不一样。来看一下这个 python 的例子:

图一和图二都定义 alice 的值为100, 并调用同一个函数:将 alice 减去 50 ,根据程序逻辑,两组程序都应该返回 50。

但图一插入了 RLI ,subtract_funds 函数体的 return 实际上是由于 bidi RLI 覆盖而执行的,因此图一的 bank{account} _=amount 语句永远也不会执行,只会返回 100 。

相同的原理也可以应用于其他语言,这个漏洞实际上是 Unicode 自身的问题,却实实在在地影响到了所有支持 Unicode 的语言,包括 C、C++、C#、javascript、Java、Rust、Go 和 Python 等一系列流行的编程语言。

目前,研究组已将“ Trojan Source”漏洞通知所有受影响的编程语言组织和软件商,“ Trojan Source”漏洞报告原文可点此查看:https://www.trojansource.codes/trojan-source.pdf

后续发展

  • Rust 收到消息后迅速发布 1.56.1 版本,以解决此问题。

  • 据 theregister 报导,软件开发商 Atlassian 迅速发布了针对 CVE-2021-42574 的安全公告,影响了从 Confluence 到 Jira 的一系列产品,并通过多个软件更新来解决该问题。

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

以上是关于Unicode算法漏洞几乎祸害所有编程语言,Rust紧急发布补丁的主要内容,如果未能解决你的问题,请参考以下文章

Unicode 详解

javascript 核心语言笔记- 2 语法结构

所有语言的 MySQL 排序规则

漏洞预警英特尔 CPU 曝严重漏洞, 几乎影响所有操作系统

Unicode与编码方式

eng和rus的区别