photo by Irvan Smith on unsplash

兩名來自劍橋大學的研究人員Nicholas Boucher與Ross Anderson,在本周揭露了一個藏匿在統一碼(Unicode)中的安全漏洞,此一編號為CVE-2021-42574的漏洞,將影響所有支援Unicode的程式語言,目前已確定受到波及的涵蓋了C、C++、C#、JavaScript、Java、Rust、Go與Python等,推測可能也有其它受害的語言。該漏洞將允許駭客於開源碼中、注入人類程式碼審查員看不見的安全漏洞,因而被研究人員稱為木馬源(Trojan Source)攻擊。

國際化的文字編碼必須同時支援由左到右、以及由右到左的文字,前者像是英文與俄文,後者則有希伯來文或阿拉伯文,當以不同的顯示排序來混合腳本時,則必須解決方向的衝突,Unicode所採用的演算法稱為「雙向」(Bidirectional,Bidi)。

在某些情況下,光由雙向演算法來設定排序是不夠的,因而可透過覆蓋控制字元來解決,這是個不可見的字元,可用來切換字元組的顯示排序。

於是,當駭客於開源碼中嵌入不可見的控制字元時,程式碼中的字元排序與它真正執行時是不同的。例如透過執行一個看起來像是在註釋中的return語句,來造成功能短路;或者是讓一個註釋看起來看是程式碼,但它並不會被執行;也能讓字串的部份看起來像是程式碼,但它們其實屬於不會被執行的字串。

研究人員表示,迄今有心人士若要在開源碼中嵌入漏洞,通常是在晦澀的程式碼中插入一個不顯眼的錯誤,然而,重要的開源碼專案通常會有人類審查員來審核程式,CVE-2021-42574卻可讓人類審查員看不見漏洞的存在。建議支援Unicode的編譯器、直譯器或建置管道,應該要在註釋與字串中出現未關閉的Bidi控制字元或混淆字元時,顯示錯誤或警告;而程式語言的規範則應直接禁止於註釋或字串中,寫入未關閉的Bidi控制字元。

這兩名研究人員已在99天之前,就將漏洞提報給19個相關組織,包括Unicode、紅帽、Atlassian及Rustc等,Unicode亦已於今年9月發布的Unicode 14改善了Bidi的規則。

熱門新聞

Advertisement