Unicode 算法漏洞“Trojan Source”几乎影响所有编程语言
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, 并调用同一...

