ERC-6492 部署漏洞:通過預編譯合約繞過 isValidSignature

本文為機器翻譯
展示原文

在2025年1月23日,ODOS協議OdosLimitOrderRouter合約中存在漏洞被利用,導致在E太Base上損失約50,000美元。該攻擊是由於未經驗證的使用者輸入導致的任意呼叫漏洞,加上使用預編譯合約繞過簽名檢查而造成的。

概述

攻擊者合約: https://basescan.org/address/0x22a7da241a39f189a8aec269a6f11a238b6086fc

易受攻擊的合約: https://basescan.org/address/0xb6333e994fd02a9255e794c177efbdeb1fe779c7

交易攻擊: https://basescan.org/tx/0xd10faa5b33ddb501b1dc6430896c966048271f2510ff9ed681dd6d510c5df9f6

漏洞分析

  • 攻擊者主要利用了任意呼叫漏洞,用於部署ERC6492合約。他們可以利用任意呼叫來竊取該合約中的代幣,使用ERC20.transfer,但必須繞過簽名檢查IERC1271Wallet(_signer).isValidSignature,這最初似乎是不可能的,因為_signer程式碼長度必須為零-意味著它不能被執行。但是,某些特殊合約確實具有零程式碼長度但仍可以執行命令:預編譯合約

  • 攻擊者使用了0x4身份預編譯合約,該合約旨在在記憶體部分之間複製資料。在使用任意呼叫竊取代幣後,攻擊者透過使用0x4合約作為_signer繞過了簽名檢查。該合約呼叫IERC1271Wallet(0x4).isValidSignature而不會回滾,成功完成了攻擊。

結論

在構建自己的專案時,不要相信任何使用者輸入。任何給定的引數都必須由程式碼仔細驗證。對不受信任的合約的呼叫可能會引入幾種意外的風險或錯誤。外部呼叫可能會觸發惡意程式碼,無論是在目標合約內部還是在其生態系統中。每個外部呼叫都應被視為潛在的安全風險,必須謹慎處理。

在使用合約程式碼長度時要非常謹慎,因為這可能會引入與合約建構函式和預編譯合約相關的真正問題。使用ERC-6492的協議應該仔細檢查以減輕類似的風險。

此外,強烈建議進行安全審計,不僅針對首次釋出版本,也針對未來新增的任何新功能。由於升級過程可能會引入各種問題,因此也應該進行徹底的審計。

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論