IT资讯 Unicode 算法漏洞“Trojan Source”几乎影响所有编程语言

sedrick · 2021-11-03 11:30:06 · 热度: 27

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

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

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

Unicode 算法漏洞“Trojan Source”几乎影响所有编程语言

图一和图二都定义 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”漏洞报告原文可点此查看

后续发展

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

猜你喜欢:
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册