← 回到 DEVCON 8

從唯讀副本到報價價差:研究者模擬五百萬美元漏洞攻擊

How to steal $5M with a read-only bug

場次摘要

Bartosz Barwikowski 分享研究 Move 虛擬機器的漏洞經過。他發現,只有一個元素的串列,可讓同一物件同時以可修改與唯讀形式傳入交易,並產生不同副本。但唯讀副本不能直接用來轉移資產。他表示,研究原生合約約兩週仍找不到利用方式,於是轉向已部署的智慧合約。 他用 Python 腳本找出五百個同時接受可修改與唯讀物件的函式,最後鎖定依交易池計價的報價工具(預言機),以及使用其報價的演算法穩定幣。他利用副本保留交換前後的不同價格,再循環高賣低買。他表示,搭配二千三百萬美元閃電貸借款,在主網副本模擬中達成單筆交易五百萬美元獲利;逐字稿未提供實際失竊的證據。

值得記下的 5 件事

  1. [1:20]
    單一元素串列繞過物件傳入限制 講者指出,同一物件原本不應同時以可修改與唯讀形式傳入交易,但只有一個元素的串列出現例外

    交易內取得的也不是同一物件,而是各自的副本,成為後續利用的基礎。

  2. [2:40]
    能複製物件,不代表能直接取走資產 講者表示,大量複製唯讀物件可造成阻斷服務,也就是讓系統無法正常提供服務,他也因此取得另一筆獎金

    但轉移或交換資產仍需可修改物件;他研究原生合約約兩週,仍未找到能利用唯讀副本取走資產的方法。

  3. [3:20]
    以腳本尋找可利用的合約函式 講者把搜尋範圍擴至已部署的智慧合約,透過反編譯檢視程式,尋找同時接受可修改與唯讀物件的函式

    他表示,Python 腳本找出五百個符合條件的函式,之後才找到可執行攻擊的位置。

  4. [4:20]
    交換前後的報價副本形成獲利路徑 講者將目標轉向依交易池計價的預言機,利用副本保留大額交換前後的兩個價格

    再搭配使用這類報價的演算法穩定幣,反覆以高價賣出、低價買回,藉此取出協議金庫的資產。

  5. [5:20]
    五百萬美元是模擬獲利,不是已證實的失竊 講者表示,攻擊需要二千三百萬美元閃電貸,也就是在同筆交易內借入並償還的借款;他在主網副本上模擬,達成單筆交易五百萬美元獲利

    他將漏洞風險的提升歸因於閃電貸、預言機與演算法穩定幣的組合,而非唯讀副本本身。

下載摘要 下載 Word 摘要(.docx)

更多來自 DEVCON 8

訂閱