兩名來(lái)自劍橋大學(xué)的研究人員Nicholas Boucher與Ross Anderson,在本周揭露了一個(gè)藏匿在統(tǒng)一碼(Unicode)中的安全漏洞,此一編號(hào)為CVE-2021-42574的漏洞,將影響所有支援Unicode的程式語(yǔ)言,目前已確定受到波及的涵蓋了C、C++、C#、java script、Java、Rust、Go與Python等,推測(cè)可能也有其它受害的語(yǔ)言。該漏洞將允許駭客于開(kāi)源碼中、注入人類程式碼審查員看不見(jiàn)的安全漏洞,因而被研究人員稱為木馬源(Trojan Source)攻擊。
木馬源漏洞和攻擊模式
Anderson和他的同事Nicholas Boucher(博士生)揭示了兩種攻擊模式,統(tǒng)稱為特洛伊源攻擊。
漏洞涉及到兩個(gè)CVE,這兩個(gè)CVE都是根據(jù)Unicode規(guī)范發(fā)布的。研究人員稱之為對(duì)Unicode的“潛在破壞性”攻擊雙向算法(BiDi),從14.0版開(kāi)始跟蹤為CVE-2021-42574。BiDi處理文本的顯示順序,例如,使用拉丁字母從左到右,或者從右到左使用阿拉伯語(yǔ)或希伯來(lái)語(yǔ)字符。
另一個(gè)相關(guān)的攻擊依賴于使用視覺(jué)上相似的字符,稱為同形符,跟蹤為CVE-2021-42694號(hào)。
為了給漏洞修復(fù)騰出時(shí)間,安全研究人員特地拖了99天才正式披露相關(guān)漏洞信息。與此同時(shí),研究人員已經(jīng)與19個(gè)組織進(jìn)行了協(xié)調(diào),其中許多組織現(xiàn)在正在發(fā)布更新,以解決代碼編譯器、解釋器、代碼編輯器和存儲(chǔ)庫(kù)中的安全弱點(diǎn)。
解決措施
研究人員已證實(shí),這種攻擊已波及 C、C++、C#、java script、Java、Rust、Go、以及 Python 等編程語(yǔ)言,并且有望擴(kuò)大覆蓋其它現(xiàn)代語(yǔ)言。
他們還提出了一些防御措施,這些措施應(yīng)該在編譯器、解釋器和支持Unicode的構(gòu)建管道中實(shí)現(xiàn);語(yǔ)言規(guī)范;以及代碼(文本)編輯器和存儲(chǔ)庫(kù)前端。
他們向各種組織和公司披露了他們的發(fā)現(xiàn)(在禁令下),這些組織和公司可以建立這些防御。
“我們認(rèn)為,這個(gè)問(wèn)題的長(zhǎng)期解決方案將部署在編譯器中。我們注意到,幾乎所有的編譯器都已經(jīng)防范了一種相關(guān)的攻擊,這種攻擊涉及使用零寬度字符創(chuàng)建對(duì)抗性函數(shù)名,而有三種編譯器會(huì)對(duì)另一種生成錯(cuò)誤,這就利用了函數(shù)名中的同形符號(hào),”他們分享道。
“我們?cè)诠_(kāi)期間聯(lián)系的編譯器維護(hù)者中,大約有一半正在開(kāi)發(fā)補(bǔ)丁,或者已經(jīng)承諾要這么做。當(dāng)其他人在拖后腿時(shí),在這段時(shí)間內(nèi)部署其他控制是明智的,因?yàn)檫@是快速和廉價(jià)的,也是非常必要的。三家維護(hù)代碼庫(kù)的公司也部署了防御措施。我們建議依賴關(guān)鍵軟件的政府和公司應(yīng)該確定其供應(yīng)商的立場(chǎng),對(duì)他們施加壓力,要求他們實(shí)施充分的防御,并確保任何漏洞都被他們工具鏈上的其他控制覆蓋!
目前,已經(jīng)實(shí)施修復(fù)并在其供應(yīng)鏈中進(jìn)行檢測(cè)的組織包括Rust團(tuán)隊(duì)、GitHub、RedHat和Atlassian(多個(gè)產(chǎn)品受到影響)。