低級致命漏洞,1.9 億美元被掏空!黑客牽頭,路人打劫
本周二,跨鏈通訊協議 Nomad 被曝遭遇黑客攻擊,導致其代幣橋內的 1.9 億美元資金幾乎全被 " 掏空 ":據 Defil Lama 統計數據顯示,原本 Nomad 的總價值鎖定(TVL)為 1.9 億美元,但幾個小時后其官方賬戶中只剩下了 651.54 美元。

盡管周二一早,Nomad 官方就發推特表示已得知此事,并稱目前正在調查,但這起事件還是在 Web3 領域引起了巨大爭議:
Terra 研究員 FatMan 認為本次 Nomad 遭遇的攻擊是 " 真正的加密市場中首次發生的去中心化搶劫 "。
Paradigm 研究合伙人兼安全主管 Samczsun 也發推表示:" 剛剛發生的 Nomad 事件是我在 Web3 中見過的最混亂的黑客攻擊之一。"
更令人意外的是,最終導致了這 1.9 億美元損失的源頭,竟然只是一個 " 低級漏洞 "。
大量資產從 Nomad 代幣橋轉移出去
具體來說,Nomad 是以太坊、Avalanche、Milkomeda 和 Moonbeam 之間跨鏈轉移的代幣橋梁,特點在于不依賴大量外部方來驗證跨鏈通信,可通過一種名為 "optimistic" 機制,讓用戶可以安全地發送消息和橋接資產。
最初注意到不對勁的是一名推特用戶 @spreekaway:"Nomad 代幣橋變得很‘崎嶇’???看起來非常可疑。" 從他提供的截圖來看,彼時正有大量資產從 Nomad 代幣橋轉移出去,這顯然不太尋常。

對此,Paradigm 研究合伙人兼安全主管 Samczsun 的第一反應:可能是 Token 小數點的配置有誤。從他的視角來看,當時跨鏈橋似乎正在進行一個 " 發送 0.01 WBTC,返還 100 WBTC" 的促銷活動。

最初 Samczsun 是不信的,但在 Moonbeam 上進行了一些手動挖掘后,他確認了這一事實:" 雖然我從 Moonbeam 只轉出了 0.01 WBTC,但不知道為什么以太坊上卻收到了 100 WBTC。" 也就是說,這不并是 Token 小數點的錯誤配置。
但與此同時,Samczsun 發現了更糟糕的一點:在 WBTC 中橋接的交易實際上并沒有 " 證明(prove)" 這個步驟,而是直接進行 "process" 操作。這明顯不符合邏輯。
Replica 合約中存在致命錯誤
基于此,Samczsun 總結出有兩種可能性:要么是在先前的區塊中單獨提交了證明,要么就是 Replica 合約中存在嚴重錯誤。然而,沒有任何跡象表明最近有什么信息被提前證明了,這也就只剩下了一種可能性,即 Replica 合約中存在致命錯誤。
在快速瀏覽代碼后,Samczsun 推測出了問題所在。在進行 process 操作時,用戶提交的消息必須來自可接受的根(會在 prove 中被設置),其中第 185 行的 "acceptableRoot" 就是用來檢查根是否被證明或已被確認。一般在進行 Replica 合約部署初始化時,會先把可信根設置為 0,再將其改為非 0 數據的新根,同時將舊根設為失效——而 Samczsun 懷疑,可能舊根的 "0" 還處于生效狀態。

這個想法很好驗證,Samczsun 用 0x00 來檢查合同是否會接受這個根,結果居然真的通過了……

" 事實證明,在升級期間,Nomad 團隊將可信根初始化為 0x00。說白了,使用 0 值作為初始化值是一種常見的做法。不幸的是,在這種情況下,它也有一個很小的副作用,即會自動驗證每一條消息。"
這也就意味著,攻擊者可以直接構造任意消息,而這些消息都可以正常執行。這一漏洞的性質決定了本次黑客事件的規模,正如 Samczsun 所說:" 這就是此次事件如此混亂的原因——你甚至不需要知道 Solidity 或默克爾樹(Merkle Trees)這類技術知識,只需找到一個有效交易,用你的地址替換原本的地址,然后再推廣出去。"
主動返還不當獲利,可獲得 20% 的賞金?辟謠!
綜上,總體而言本次攻擊是由于 Nomad 橋 Replica 合約在初始化時將可信根設置為 0x0,但在進行可信根修改時并未令舊根失效,導致攻擊者可以構造任意消息對 Nomad 橋進行資金竊取——更重要的是,由于不需要什么專業技術,攻擊者中不僅有黑客,也有好奇嘗試的許多 " 路人 " 用戶。
文章開頭提到 Terra 研究員 FatMan 對這場攻擊的評價也正因如此:" 在公共 Discord 服務器上彈出的一條消息稱,任意一個人都能從 Nomad 橋上搶 3 千到 2 萬美元:所有人要做的就是復制第一個黑客的交易并更改地址,然后點擊通過 Etherscan 發送即可。"
針對這一事件,Nomad 團隊事后表示目前調查正在進行中,已聯系區塊鏈情報和取證的專業公司協助,也已通知執法部門盡快處理這一情況,及時提供最新信息。
與此同時,有未知來源的消息稱 Nomad 在鏈上呼吁攻擊者返還資金:" 如果你愿意將不當獲利返還則不會對你采取進一步行動,且可獲得 20% 的賞金,按照白帽處理。"
但很快 Nomad 在官方推特辟謠稱:" 我們尚未提供任何返還被盜跨鏈資金的說明。請忽略除 Nomad 官方渠道以外的所有渠道的消息。"
因本次事件可能牽扯到一部分僅因好奇而意外攻擊了 Nomad 的用戶,部分人主動返還了不當獲利。據區塊律動 BlockBeats 報道,本周三派盾在其社交平臺表示,已檢測到約 900 萬美元 Nomad 被盜資金已被歸還至 Nomad 提供的資金回收地址。