8月2日7時,加密KOL @0xfoobar發推稱,跨鏈互操作性協議Nomad橋正在被黑客攻擊,WETH和WBTC正以每次百萬美元的頻次轉出,合約中仍有1.26億美元可能存在風險。提醒用戶盡快提取資金。最近的一次就有1萬枚以太坊(約合1600萬美元)轉出,Nomad橋還有8000萬美元的USDC正在流出。
Nomad官方團隊稱,已知曉涉及Nomad 代幣橋的事件,目前正在調查中。受該事件影響,Moonbeam稱:Moonbeam 網絡已進入維護模式,以調查網絡上部署的智能合約的安全事件。在此期間,功能將受到限制,用戶將無法執行常規用戶交易和智能合約交互。治理、質押、取消暫停和升級的能力將繼續有效。
截至目前,據defillama數據顯示,Nomad TVL 中超過1.9 億美元的加密貨幣在幾小時內被撤出,錢包中目前僅剩5336美元。 Terra研究員FatMan評論此次攻擊事件稱,這是以真正的加密方式——第一次去中心化的搶劫。
對此,投資機構Paradigm研究員@samczsun試圖還原黑客攻擊的全過程:
1,一切都開始於@officer_cia分享@spreekaway ETH Security Telegram 頻道的推文。儘管當時並不知道發生了什麼事,但從橋上撤離的大量資產來看顯然是一個不好的信號。
2,第一個想法是代幣的小數點配置有誤。畢竟,橋上好像在運行“發送0.01 WBTC,返還100 WBTC”的促銷活動。
3,然而,在Moonbeam 網絡上進行了一些手動挖掘之後,確認雖然Moonbeam 交易確實橋接了0.01 WBTC,但以太坊交易以某種方式橋接了100 WBTC。
4,此外,在WBTC 中橋接的交易實際上並沒有證明什麼。它只是直接調用了`process`。可以說,能夠在不首先證明的情況下處理消息是非常不好的
5,在這一點上,有兩種可能性。要么是在較早的區塊中單獨提交了證明,要么是Replica 合約存在嚴重錯誤。但是,絕對沒有跡象表明最近有任何事情被證明。
6, 這只剩下一種可能性——副本合約存在致命缺陷。但是怎麼做?快速瀏覽表明提交的消息必須屬於可接受的根。否則,第185 行的檢查將失敗。
7,幸運的是,有一種簡單的方法可以檢查這個假設。知道沒有被證明的消息的根是0x00,因為messages[_messageHash] 將未初始化。接下來所要做的就是檢查合同是否會接受它作為根。
8,事實證明,在例行升級期間,Nomad 團隊將可信根初始化為0x00。需要明確的是,使用零值作為初始化值是一種常見的做法。不幸的是,在這種情況下,它具有自動驗證每條消息的微小副作用。
9,這就是黑客如此混亂的原因——你不需要了解Solidity 或Merkle Trees 或類似的東西。你所要做的就是找到一個有效的交易,用你的地址找到/替換對方的地址,然後重新廣播它。
10,例行升級將零哈希標記為有效根,這具有允許在Nomad 上欺騙消息的效果。攻擊者濫用它來複製/粘貼交易,並在瘋狂的混戰中迅速耗盡了橋。
A16z應用安全成員Matt Gleason發推介紹了Nomad 被攻擊的原因:
Nomad 橋以與Qubit 的QBridge 類似的方式獲得。橋的不安全配置導致特定路徑允許發送任何事務。錯誤出現在Replica 的“進程”函數中。
Process 旨在確保消息已被證明,然後處理該消息,這通常應該沒問題。
它使用acceptableRoot 來執行此操作,它將檢查根是否已被證明或在當前時間之前已被確認。
出現這個問題是因為在solidity 中,如果一個映射鍵在此之前沒有被看到,那麼它將默認為零,從而導致嘗試確認根值為零。但是,由於它們初始化時使用的是0 的confirmed Root ,這意味著零在技術上是一個已確認的根。
因此,系統會接受任何以前從未見過的消息,並將其當作真實消息來處理,這意味著你所需要做的就是要求所有的橋的錢,你就會得到它。
Paradigm工程師@ParadigmEng420發推提醒用戶如果在Nomad 、Evmos、Moonbeam、Milkomeda有任何資金,需要交換出游牧資產,並使用不同的跨鏈橋,盡快回到以太坊或另一個鏈。他還指出,Nomad 暫停了中繼器,並試圖使用觀察者審查所有橋接交易,但是,這可能沒什麼幫助,因為漏洞利用是在合同方面而不是在基礎設施方面。