從唯讀副本到報價價差:研究者模擬五百萬美元漏洞攻擊
How to steal $5M with a read-only bug
場次摘要
Bartosz Barwikowski 分享研究 Move 虛擬機器的漏洞經過。他發現,只有一個元素的串列,可讓同一物件同時以可修改與唯讀形式傳入交易,並產生不同副本。但唯讀副本不能直接用來轉移資產。他表示,研究原生合約約兩週仍找不到利用方式,於是轉向已部署的智慧合約。 他用 Python 腳本找出五百個同時接受可修改與唯讀物件的函式,最後鎖定依交易池計價的報價工具(預言機),以及使用其報價的演算法穩定幣。他利用副本保留交換前後的不同價格,再循環高賣低買。他表示,搭配二千三百萬美元閃電貸借款,在主網副本模擬中達成單筆交易五百萬美元獲利;逐字稿未提供實際失竊的證據。
值得記下的 5 件事
- [1:20]
單一元素串列繞過物件傳入限制 講者指出,同一物件原本不應同時以可修改與唯讀形式傳入交易,但只有一個元素的串列出現例外
交易內取得的也不是同一物件,而是各自的副本,成為後續利用的基礎。
- [2:40]
能複製物件,不代表能直接取走資產 講者表示,大量複製唯讀物件可造成阻斷服務,也就是讓系統無法正常提供服務,他也因此取得另一筆獎金
但轉移或交換資產仍需可修改物件;他研究原生合約約兩週,仍未找到能利用唯讀副本取走資產的方法。
- [3:20]
以腳本尋找可利用的合約函式 講者把搜尋範圍擴至已部署的智慧合約,透過反編譯檢視程式,尋找同時接受可修改與唯讀物件的函式
他表示,Python 腳本找出五百個符合條件的函式,之後才找到可執行攻擊的位置。
- [4:20]
交換前後的報價副本形成獲利路徑 講者將目標轉向依交易池計價的預言機,利用副本保留大額交換前後的兩個價格
再搭配使用這類報價的演算法穩定幣,反覆以高價賣出、低價買回,藉此取出協議金庫的資產。
- [5:20]
五百萬美元是模擬獲利,不是已證實的失竊 講者表示,攻擊需要二千三百萬美元閃電貸,也就是在同筆交易內借入並償還的借款;他在主網副本上模擬,達成單筆交易五百萬美元獲利
他將漏洞風險的提升歸因於閃電貸、預言機與演算法穩定幣的組合,而非唯讀副本本身。
更多來自 DEVCON 8
Arrow 的硬體 DAO 實驗:AI 協作、在地製造與責任分工
A DAO Shipped an Aircraft: What It Takes to Coordinate Atoms with Tokens
Thomas Garrison
Kohaku:以 SDK 將隱私與安全功能帶入以太坊錢包
Kohaku : privacy for everyone, by default
Nico、Vitalik
私密區塊鏈的取捨:隱私、去中心化與合約協作
Private State, Public Network: The Tradeoffs Behind Privacy
Zachary Williamson