“特洛伊木马源”漏洞可能导致隐秘的应用中毒 媒体
新发现的源代码编译漏洞风险
关键要点
新的漏洞“特洛伊源”允许攻击者在源代码中插入恶意代码,逃避安全审核。使用Unicode双向算法Bidi可以隐藏恶意代码,影响代码执行。现代编程语言和一些工具已采取措施来检测此类攻击,但不是全面有效。开发者需注意源代码安全,特别是来自共享库的代码片段。最近披露的一项漏洞显示,源代码编译的方式可能使企业面临上游攻击的风险。
来自英国剑桥大学的两位研究者表示,这种被称为特洛伊源的条件,使攻击者能够插入恶意源代码,并且能够逃避安全审核的检测。
研究者尼古拉斯布歇尔和罗斯安德森指出,问题在于代码片段在源代码中可以以特定方式呈现,而编译后却以完全不同的方式表现。
“自20世纪60年代以来,研究者们就开始探讨正式方法,以数学方式证明编译器的输出正确实现其接收的源代码,”研究者们解释道。

“源代码逻辑与编译器输出逻辑之间的许多差异源于编译器的优化,这在一定程度上难以推理。”
特别是,研究者发现Unicode的双向算法Bidi可以被操控,以隐藏潜在的恶意代码。Bidi的目的是允许左右语言如英语或俄语和右向左语言如阿拉伯语和希伯来语之间的互操作,Bidi指令使文本顺序可以按需切换。
他们发现,在某些情况下,Bidi指令也可以在源代码中被隐藏。这使得源代码的外观能够被操控,从而在审核进行质量或安全检查时可能逃避检测。
在某些情况下,操控会导致指令执行的方式发生变化,例如“提前返回”攻击会提前结束操作。在其他情况下,Bidi的操控会使整个代码块如安全措施或输入验证被解释为注释而不被执行。
这使得攻击者能够故意在项目的源代码中注入漏洞,从而可能导致上游攻击,例如2020年的SolarWinds供应链攻击。更令人担忧的是,Bidi指令在复制粘贴操作中会持续存在,这意味着代码共享平台可能会成为攻击目标,感染多个应用程序和服务,通过注入的恶意源代码进行传播。
目前已有一些缓解措施。研究者提到,现代编程语言如Rust和C包含了一些语法检查,可以捕捉到部分描述的技术,但并不全面。像Python和SQL这样的脚本语言则可能面临更广泛的攻击技术。
剑桥的研究团队表示,在漏洞披露之前,已实施了一些缓解措施。GitHub和BitBucket现在高亮显示源代码中的Bidi字符,而Visual Studio Code、Emacs和Rust也采取了措施,检测并警告Bidi控制字符。
白鲸加速器最新版下载安装开发者仍然被建议密切关注他们的源代码,特别是从共享库中复制的代码片段。