返回部落格

當「SafeTransfer」不再安全:QBridge 安全事件的教訓

Code Auditing
2022年1月28日
閱讀約 2 分鐘

1 月 28 日,QBridge 遭到攻擊,約 8,000 萬美元的資產被盜。經過分析,我們發現程式碼中的根本原因在於 safeTransfer(以及 safeTransferFrom)函數的實作方式。

根本原因

首先,該項目並未使用普及的 OpenZeppelin SafeERC20 函式庫來進行代幣轉帳,而是實作了一個名為 SafeToken 的函式庫。

其次,該實作未檢查目標是否為有效的合約(或是否為零地址)。

第三,EVM 的底層呼叫(low-level call)在目標合約為零時不會回傳 false。 這與開發者的常識相違背。

當然,此次事件還有其他原因,例如將零地址放入了白名單中。然而,如果程式碼能正確處理這種特殊情況,那麼它就不會存在漏洞。

順帶一提:市面上還有其他項目使用了類似的程式碼,它們可能也容易受到類似問題的影響。

實驗

為了驗證第三點(即當目標合約為零時,虛擬機不會回傳 false),我們開發了一個測試合約,如下所示:

執行 TestSafeTransfer.test() 不會觸發回滾(revert)。

教訓與如何降低風險

我們建議:

  • 除非有非常充分的理由,否則請使用普及的函式庫,不要嘗試「重新發明輪子」。
  • 在資產轉移前後檢查餘額,以確保轉移的資產數量符合預期。這同時也能避免通貨緊縮和通貨膨脹代幣帶來的問題。

關於 BlockSec

BlockSec 是一家領先的區塊鏈安全公司,於 2021 年由一群全球傑出的安全專家創立。公司致力於提高新興 Web3 世界的安全性和可用性,以促進其大規模採用。為此,BlockSec 提供智慧合約與 EVM 鏈安全審計服務、用於安全開發與主動阻斷威脅的 Phalcon 平台、用於資金追蹤與調查的 MetaSleuth 平台,以及協助 Web3 開發者在加密世界中高效探索的 MetaDock 擴充功能。

迄今為止,公司已服務超過 300 家知名客戶,如 MetaMask、Uniswap Foundation、Compound、Forta 和 PancakeSwap,並已獲得 Matrix Partners、Vitalbridge Capital 和 Fenbushi Capital 等頂級投資機構兩輪數千萬美元的融資。

官方網站:https://blocksec.com/

官方 Twitter 帳號:https://twitter.com/BlockSecTeam

訂閱最新動態
Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇
Security Insights

Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇

2026年9月24日,攻擊者利用第三方安全產品漏洞,獲取內部憑證並偽造提款指令,導致約3.875億美元從Bitget部分營運錢包(涵蓋Ethereum、其他EVM網絡、XRP Ledger、Zcash及TRON)轉出;私鑰及冷錢包未受影響。本文深入梳理事件路徑與資金流向,分析快速轉換為原生資產及生態恢復應對,提出機構縱深防禦框架,並說明授權區塊鏈滲透測試如何驗證跨層假設。

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly
Security Insights

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly

本報告涵蓋2026/09/14至2026/09/20期間,探討以太坊與Starknet上兩起合計損失約1130萬美元的安全事件。較大一起中,多重呼叫路由器將自身位址接受為分派目標,導致巢狀呼叫以路由器自身已授權身分而非外部呼叫者身分進入Safe錢包的Gateway模組,約2900枚`aEthrsETH`被轉出至攻擊者建立的Uniswap v4池。在Starknet上,Nostra預言機整合僅要求最少一個聚合來源,當三個設定價格來源中僅兩個達成聚合時,操縱的薄池報價與正常報價平均後將`NSTR`估值約49.52美元,支撐約350萬美元以高估抵押品借貸。

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec
Security Insights

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec

本報告涵蓋2026/09/07至2026/09/13,探討兩起造成約3.2億美元損失的安全事件,包括前份報告未提及、發生於2026/09/06的Liquid Network漏洞事件。較大者為該Liquid Network漏洞:Elements中的rangeproof驗證快取藉由雜湊四個欄位(其中兩個長度可變)串接而成金鑰,且未標示欄位邊界,導致某輸出的驗證結果被錯誤套用至另一個未經檢驗證明的輸出,使攻擊者得以憑空創造4,000枚無擔保L-BTC,並將幾乎全數兌回比特幣。在橫跨BNB Smart Chain、Ethereum與Rootstock的Symbiosis跨鏈橋比特幣路徑中,讀取比特幣存款的鏈下程式碼從存款人可自行控制的欄位取得其身份,並在未檢查手續費是否為負值的情況下自存款中扣除,使330聰的存款鑄造出`46,116,860,184.27388234 syBTC`;其須賣出所經之資金池僅有11.26 syBTC,致使流動性提供者與用戶損失約9.97 BTC(約77萬美元)。

Web3 最佳安全審計方

在上線之前驗證設計、程式碼與業務邏輯,對標業內最高安全標準。

BlockSec 審計
當「SafeTransfer」不再安全:QBridge 安全事件的教訓