繁體中文English
jason's blog關於網頁標準、瀏覽器與前端開發的觀察筆記

文章分類: 資訊安全

Bybit 事件與冷錢包簽署流程的前端風險

從 Bybit 冷錢包事件理解簽署介面、Blind Signing 與多簽流程的前端風險。

發布 2025/02/21

我看到 Bybit 損失接近 15 億美元的第一個念頭是:冷錢包不是就為了防這種事嗎?後來把攻擊流程看完,反而更不舒服。私鑰可能一直好好待在離線裝置裡,真正被利用的卻是人眼前那個看似正常的簽署畫面。對做前端的人來說,這比「駭客破解密碼」更值得警惕,因為那個被信任的畫面正是我們平常在做的東西。

Bybit 在 2025 年 2 月遭遇大規模加密資產竊案,損失接近 15 億美元。第一眼看到「冷錢包被駭」,很容易以為駭客破解了私鑰,其實這次比較接近簽署畫面遭到動手腳。

Bybit 使用 Safe 多簽管理冷錢包。攻擊者讓簽署者在前端看到正常的交易內容,但真正送去簽署的資料帶有惡意操作。多人都完成簽名,不代表交易一定安全;如果大家都依賴同一個被竄改的畫面,多簽仍可能一起做出錯誤決定。

這件事和前端很有關係。當 UI 用來處理轉帳、權限或合約升級時,它不只是畫面,而是安全流程的一部分。重要操作最好能在另一個可信裝置確認完整內容,也不該只顯示一個簡化過的「確認」按鈕。

多簽保護的是「需要幾個人同意」

多簽常被理解成多重保險,但它解決的是單一私鑰被偷。如果三位簽署者都透過同一個前端看交易,而且那個前端把惡意交易包裝成正常轉帳,三個人仍可能一致簽錯。問題不在密碼學失效,而是人所看到的資訊出了問題。

這也解釋了 hardware wallet 上的 clear signing 為什麼重要。裝置若只顯示一串 hash 或「Contract data」,使用者其實無法確認自己授權了什麼,只能回頭相信電腦畫面。金額愈大,這種信任就愈危險。

如果把它當成前端需求

  • 畫面要顯示實際接收地址、金額與合約操作,不只顯示人類可讀的摘要。

  • 重要操作要有獨立驗證管道,不能讓同一套前端同時負責準備資料和證明資料正確。

  • 部署流程、第三方 script 與開發者權限,都要被視為交易系統的一部分。

「冷錢包」只能降低私鑰直接連網的風險,無法保證每一筆送進去的資料都是對的。這大概是整起事件最容易被標題省略,卻也最值得前端工程師記住的地方。

前端不是把交易 JSON 美化一下而已

區塊鏈交易對一般人很不友善,常見內容可能是合約地址、函式 selector 和一串編碼參數。前端會把它翻成人看得懂的「轉出多少 ETH」或「新增哪個 owner」。這層轉譯很有價值,但也因此取得了很大的信任:翻錯、漏掉或被竄改,使用者就可能在不知情下授權另一件事。

比較安全的設計會盡量做到 what you see is what you sign。硬體裝置至少顯示最重要的目標地址和動作;另一套獨立系統重新解析交易;高風險操作還可以加上延遲,讓異常交易不是簽完立刻生效。

這些作法聽起來比一般前端需求麻煩,原因也很直接:普通表單顯示錯誤還能重填,鏈上資產送錯通常沒有客服可以復原。UI 的風險要跟它控制的價值一起提高,而不是所有確認視窗都用同一個規格。

這件事也讓我重新想了一次「前端驗證」四個字。平常我們說驗證,常指必填欄位、格式和按鈕能不能按;但在高風險系統裡,還要驗證使用者看到的描述是否真的對應即將簽署的 payload。畫面顯示正確不夠,畫面和底層資料之間的關係也必須可以被獨立確認。

如果是我參與這類介面,我會希望 review 不只停在元件層。交易解析規則、未知合約的 fallback、前端部署來源,以及硬體錢包實際顯示多少資訊,都應該畫進同一張 threat model。這不是要前端工程師突然變成密碼學家,而是承認我們寫的那個確認畫面,可能就是使用者做最後判斷的地方。