Wormhole 跨鏈橋被攻擊
2月3日 Solana 跨鏈橋 Wormhole 遭攻擊,攻擊者在 Solana 側的橋鑄造了約 12萬枚 wETH,獲利約 3.2 億美元。這是繼 Poly Network 攻擊損失 6億美元後史上第二大 DeFi 攻擊事件。
漏洞主要在於 Wormhole 的驗簽 Instruction 是由輸入指定的,在正常的使用中,此項輸入應該為系統賬戶 Instructions sysvar。由於代碼缺乏有效校驗,Wormhole 可使用攻擊者偽造的 sysvar 生成簽名。後續該簽名可進一步被利用進行鑄幣操作,從而源鏈無需鎖定的情況下,在目標鏈鑄幣,實現攻擊獲利。
Cobo Comment :
跨鏈橋本身架構就要比普通 DApp 複雜,尤其當源鏈與目標鏈架構不同時復雜性會更加突出。目前區塊鏈安全主要集中在以太坊及EVM兼容的網絡上(以及曾經輝煌過的 EOS),對於較新的公鏈、DApp 的安全審計發展的尚不成熟。而新公鏈、新智能合約架構上,又必然會產生新的問題,無論攻擊方和防守方都是值得關注的方向。
Reference:
https://threadreaderapp.com/thread/1489044939732406275.html
https://mp.weixin.qq.com/s/x39VlJM0tKQ7r8Xzzo25gQ
https://www.tuoniaox.com/news/p-532969.html
KLAYswap 前端 JS 投毒攻擊
2 月 3 日,韓國公鏈 Klaytn 上的 DeFi 項目 KLAYswap 遭遇前端 JS 投毒攻擊,導致用戶將錢包資產授權給攻擊方,共造成約 183 萬美元損失。
攻擊者通過 BGP 路由器劫持,使用戶在訪問 KLAYswap 時頁面中加載的 Kakao SDK JS 文件內容( https://developers.kakao.com/sdk/js/kakao.min.js )會解析到攻擊者可控的服務器 IP 上。另一方面由於攻擊者已經控制了路由策略,攻擊者成功從 ZeroSSL 註冊到了 developers.kakao.com 的臨時 SSL 證書。至此通過路由器劫持,完成了 JS 投毒。篡改的代碼修改了原始 KLAYswap 中內置的合約地址為攻擊的惡意合約,這樣當用戶正常應該授權給官方合約的資產就會授權到攻擊者,從而進行竊取。
Cobo Comment :
此次針對 KLAYswap 的攻擊並不需要項目方的智能合約和前端腳本中存在安全漏洞,直接攻擊了底層路由器這樣的網絡基礎設施。目前區塊鏈世界雖然可以在合約、P2P 網絡層面實現去中心化,但在實際的 DApp 使用中,域名、服務器、瀏覽器等基礎設施仍然是存在明顯的中心化特徵的,而這在整個區塊鏈底層基礎設施建設的十分完備前,都很難避免。僅從前端攻擊的角度來說,目前瀏覽器的安全機制保證了前端腳本與插件(錢包)執行環境的隔離,因此即使前端完全被攻擊者控制,只要用戶不主動進行人工的交互簽名操作,就不會造成資產損失。對於用戶而言,建議在每次簽名時,仔細檢查交易信息,確認授權的目標合約確實是官方 DApp 的合約。這在實際操作上對普通用戶來說有一定難度,如果未來錢包 App 可以主動完成這一校驗,可以極大的提高交易過程中的安全性。
Reference:
https://medium.com/klayswap/klayswap-incident-report-feb-03-2022-f20ba2d8e4dd
https://medium.com/s2wblog/post-mortem-of-klayswap-incident-through-bgp-hijacking-898f26727d66
Meter.io 跨鏈橋被攻擊
2 月 6 日 Meter Passport 跨鏈橋遭受攻擊,攻擊者在無抵押的情況下,在以太坊、BSC、Moonriver 等鏈上鑄造了價值約 400 萬美元的代幣資產。
漏洞成因與 1 月份的 Qubit 跨鏈橋攻擊比較類似,均是在區別處理鏈的原生代幣與 ERC20 代幣兩類資產的代碼中邏輯不嚴謹導致。Qubit 攻擊中將原生代幣作為零地址的 Token 處理,出現錯誤。Meter.io 中則是在抵押 WETH, WBNB 等 ERC20 Token 時會當作原生代幣處理,沒有使用 transferFrom 收取攻擊者的代幣(因為合約假設原生代幣的情況下,已經通過 msg.value 完成轉賬檢查)。最終導致攻擊者在源碼沒有抵押的情況即可在目標鏈上鑄造資產,攻擊獲利。
Cobo Comment :
Meter 和 Qubit 跨鏈橋攻擊雖然漏洞成因細節稍有不同,但大體都是在處理原生代幣與 ERC20 資產羅邏輯出現錯誤導致(deposit 和 depositETH 函數)。在對類似的跨鏈橋項目進行安全審計時,可以將其作為一種典型的漏洞模式重點審查。
Reference:
https://mp.weixin.qq.com/s/-xKQV-R6ACUIundJwqO68w
https://mp.weixin.qq.com/s/yzGuD6UGopOBATYzBKDpng
Superfluid 攻擊事件
2月8日,Polygon 原生穩定幣協議 QiDao 第三方合約 SuperFluid 遭到黑客攻擊,損失超過1300萬美元。SuperFluid 是一個流支付項目,可以實現自動轉賬等複雜功能,Superfluid 採用 ctx 這一數據結構作為協議之間通信的手段,按照正常邏輯這一重要的數據結構是由合約本身構造的,但是合約在打包用戶自定義calldata 和 ctx 時沒有校驗 ctx 的合法性,攻擊者可以將自己構造的惡意 ctx 附加在 calldata 之後,使得合約接受的 ctx 為用戶構造 的 ctx,原本合法的 ctx 被丟棄,從而造成攻擊者可以繞過驗證偷走其他用戶的資產。
Cobo Comment :
此類安全漏洞的成因在於開發者對於設計上由合約本身構造的數據過於信任,敏感數據在後續的每一步使用和處理中都需要檢查其合法性。雖然 SuperFluid 開發者對於 ctx 的有效性專門設置了一個 hash 值作為校驗,但是在後續的處理中沒有保證每一步都進行驗證,最終導致了這一攻擊事件的發生。所以對於開發者和安全審計人員來說一定要確保敏感數據的合法性檢查。
Reference:
https://halborn.com/explained-the-superfluid-hack-february-2022/
https://medium.com/superfluid-blog/08-02-22-exploit-post-mortem-15ff9c97cdd
https://www.tuoniaox.com/news/p-533223.html
Build Finance DAO遭惡意接管
2月13日 Build Finance 發推表示項目遭受惡意治理攻擊。攻擊者鑄造了 1.1M $BUILD 並耗盡了相關的流動性池。
攻擊細節:攻擊者 suho.eth 發起了提案0xfa9c...35e9(見參考鏈接),內容為對 BUILD Finance (BUILD) 合約調用 setGovernance(0xdcc8a38a3a1f4ef4d0b4984dcbb31627d0952c28)。並為其投贊成票 2367 BUILD。該提案會將 BUILD 鑄幣權限轉移到 0xdcc8.. 單簽 EOA 地址,是明顯的惡意提案。隨後 valueless.eth 投 5000 BUILD 反對票。在投票結束前幾分鐘前,0xdcc8 補充投票 2675 贊成票,使贊成票數超過反對票數,提案通過。1 天后(即 2 月11日)提案交易成功執行。至此0xdcc8 已擁有 BUILD 治理權限,開始大量鑄幣拋售。查看 0xdcc8 的交易記錄,可以看到攻擊者也使用了類似手法洗劫了 Grap Finance( GRAP )。此次攻擊獲利超 160 ETH,已通過 Tornado.Cash 洗走。
攻擊發生時 BUILD 的 totalSupply 為 130000,總值 20萬美金左右,因此其實是規模很小的 DAO(反而是前面提到的 GRAP 還要大一些)。攻擊發生時,官方 Discord 社區已經很不活躍,雖然有 bot 監測到了惡意提案的出現,但社區成員並沒有積極投反對票,導致最終的接管行為發生。合約中的 quorum 固定為 5000(即提案生效要求至少有 5000 BUILD 贊成票),在攻擊前約佔總量的 4%,從比例上看不算是一個過低的閾值,但因整體市值規模較小,成本僅需 $7500,給了攻擊者機會。另一方面,由於合約本身不支持撤消已經通過的提案,攻擊者利用最後幾分鐘加票的 trick 使提案通過,通過後必將可以執行。而提案通過後,社區也沒有及時響應,如撤出相應的流動性池的資金等。
Cobo Comment :
項目規模小;合約不支持撤銷提案;社區響應不及時等多種因素共同存在最終導致了攻擊的發生。學到的教訓:對於項目方或者開發者,有必要在治理合約中添加撤銷機制,避免通過惡意提案後無法挽回;同時社區需要監測合約層的提案交易,發現惡意提案及時呼籲持幣成員投票反對;惡意提案通過後,在執行前及時通知各方,盡可能降低損失。對於普通投資者,要積極參與社區投票(尤其是反對票)以提高惡意治理攻擊的成本;另外要謹慎投資體量過小的項目。
Reference:
https://twitter.com/finance_build/status/1492591680716951556
https://etherscan.io/tx/0xfa9cca40f225745c2eac97521d979ddfa4edae589ff0f1b543b94345e52335e9
https://www.youtube.com/watch?v=y5TGrGf8vA0
神魚提示 X2Y2 NFT 市場合約中心化風險
2月18日,神魚 @bitfish1 在社交媒體提示 X2Y2 NFT 掛單挖礦項目合約存在一定中心化風險。NFT 授權的合約 admin 為多簽但無時間鎖;交易合約(DELEGATION_CALLER 合約)為可升級合約,可升級合約的 owner 為單簽地址。理論上項目方可通過添加新交易合約或者升級原有交易合約轉走所有用戶授權的 NFT。目前項目方已更新相關合約 admin/owner 為時間鎖合約。
Cobo Comment :
根據 Certik 2021 DeFi 安全報告的總結,目前 DeFi 項目中心化風險已經是出現頻率最高的風險類型。幾乎每個月都會有項目方 Rug Pull 或疑似 Rug Pull。優質的去中化項目應該在一些關鍵權限上使用多籤和時間鎖,儘管這會在一定程度上提高項目方管理的複雜度,但好處是十分明顯的:一方面可以提高投資者對項目方的信任度,另一方面也可降低因項目方單簽私鑰保管不當遭受黑客攻擊的風險。
Reference:
https://twitter.com/bitfish1/status/1494559762499125248
白帽發現 Coinbase 漏洞獲$250,000賞金
2月19 日 Coinbase 發布文章稱修復了交易平台的漏洞,並向報告者支付了高達 25 萬美金的漏洞獎金。漏洞存在於 Coinbase 的 Retail Advanced Trading platform,其中 Retail Brokerage API 校驗不嚴格。API 只檢查了訂單金額,但沒有校驗資產幣種。如:某賬戶有 100 SHIB,卻可以利用該 API 發起出售 100 BTC 的訂單。
Cobo Comment :
區塊鏈行業的安全漏洞往往可以直接的造成資產損失,因此在漏洞獎勵上十分慷慨。25萬美金已經是 Google 為 Android 遠程 root 漏洞提供的獎勵金額了。
Reference:
https://medium.com/the-coinbase-blog/retrospective-recent-coinbase-bug-bounty-award-9f127e04f060
OpenSea 用戶遭受釣魚攻擊
2 月 21 日 OpenSea 官方(@opensea )發推表示有部分用戶遭受了釣魚攻擊,造成損失約 170 萬美元。
隨後的調查披露了釣魚攻擊的細節:OpenSea 因合約升級推送了要求用戶進行 listing 遷移的郵件。攻擊者利用此機會發送了內容相似的郵件,但郵件內鏈接指向攻擊者偽造的惡意頁面。受害者訪問惡意頁面時,被要求進行一些離線數據簽名,簽名的數據實際是允許將手中 NFT 以 0 ETH 出售的定單。攻擊者利用此合法簽名提交交易將 NFT 轉到自己賬戶上。根據官方說明,OpenSea 合約升級完成後將使用新的 EIP-712 格式簽名,可以降低此類釣魚簽名事件的發生。另有消息稱攻擊者事後返還了一部分 NFT。
Cobo Comment :
釣魚攻擊在傳統安全領域也是重要的攻防課題,釣魚主要利用人性弱點而非技術漏洞,實現攻擊成本低,收益高。規避此類問題更多的需要用戶自身提高安全意識,具體來說在簽名交易時,仔細核查當前網站是否是官方網站,交易內容(如轉賬地址、合約地址、方法參數)是否為預期內容。另外對於如 NFT 交易中涉及的離線信息簽名,也可保持與交易簽名一樣的重視程度。
Reference:
https://twitter.com/opensea/status/1495625884514066433
https://twitter.com/NadavAHollander/status/1495509511179755530
https://blog.checkpoint.com/2022/02/20/new-opensea-attack-led-to-theft-of-millions-of-dollars-in-nfts/
福布斯文章稱找到 The DAO 攻擊者
2 月 22 日,記者 Laura Shin 在福布斯網站發文稱發現了 The DAO 事件攻擊者的真實身份:TenX 的 CEO ,36 歲的程序員 Toby Hoenisch。但 Toby Hoenisch 本人表示結論不實。
2016 年發生的 The DAO 事件是以太坊歷史上非常有名的攻擊事件,攻擊者利用合約重入漏洞盜取了約 360 萬個ETH(現價值近 100 億美金),佔當時 ETH 總流通量的 5%。該攻擊直接導致了以太坊的硬分叉以及以太經典(ETC)鏈的產生。分叉後的以太坊將盜取的資金歸還給用戶,所以攻擊者最終獲得的並非 ETH 而是 ETC(現在價值約 1 億美元)。
文章披露了發現對攻擊者的追溯細節:Chainalysis 發現疑似 The DAO 攻擊向 Wasabi 混幣錢包發送了 50 BTC。Chainalysis 對混幣交易進行了分離,最終追踪到 4 家交易所。一家交易所的員工確認了該筆資產被兌換成了隱私幣 Grin 並提款到了一個稱為 grin.toby.ai 的 Grin 節點。而該結點服務器託管在 Amazon Singapore,在比特幣閃電網絡上的別名為 TenX。而 TenX 的 CEO Toby Hoenisch 在各大社交網站的賬戶均為 @tobyai,這與上文提到的交易所賬戶名匹配。同時有多方證據表示,在 2016 年 Toby Hoenisch 曾多次表示 The DAO 合約代碼中可能存在隱患,但最終未受重視。
Cobo Comment :
我們無法確認消息的真實性。但無可否認的是 2016 年的 The DAO 事件確實影響極為深遠。區塊鏈世界居民第一次如此深刻地見識了 Code is Law 的威力,並有力地推動了智能合約審計等區塊鏈安全領域的發展。
Reference:
https://www.forbes.com/sites/laurashin/2022/02/22/exclusive-austrian-programmer-and-ex-crypto-ceo-likely-stole-11-billion-of-ether/?sh=30dc183a7f58
https://twitter.com/chainalysis/status/1496087885061181443
Flurry Finance遭閃電貸攻擊
2月23日,Flurry Finance的 Vault 合約遭到閃電貸攻擊,導致 Vault 合約中價值約 293,000 美元的資產被盜。
該項目引用的第三方合約 StrategyLiquidate.execute 合約函數存在漏洞,未驗證傳入的流動性代幣地址的合法性,攻擊者可以傳入事先構造好的偽造代幣地址執行惡意函數。此次攻擊過程中,攻擊者將惡意 Token 中的 approve 函數設置為調用 FlurryRebaseUpkeep.performUpkeep() 函數,該函數最終會調用vault 合約中的 rebase 函數,在閃電貸過程中更新了 rho token 係數函數,從而造成 rho token 幣價下跌,攻擊者可以以此製造兌換差價以此獲利。
Cobo Comment :
儘管Flurry Finance項目本身合約代碼沒有問題,但是不安全的第三方合約的引用也會帶來嚴重的安全風險。DeFi 項目方應該在引用第三方合約時對合約的安全性做一個考量。
Reference:
https://twitter.com/CertiKCommunity/status/1496263130728603648
Solidly 疑存在前端 bug 造成用戶大額滑點損失
2 月 26 日,有用戶稱使用 Solidly 進行 Swap 時實際滑點與 UI 顯示不一致,因此造成了數万美金的損失。
Solidly 是 Fantom 鏈上新興的去中心化交易所項目,上線後 TVL 迅速超過 20 億美金。Solidly 號稱擁有更低的滑點與手續費(0.01%)。Solidly 支持兩類池,穩定幣池(Stable Pool ) 和非穩定幣池 ( Volatile Pool )。非穩定幣池參考 Uniswap V2 實現。穩定幣池使用新的 AMM 曲線 x^3*y + x*y^3 = K,以獲得更低的滑點。
根據用戶推文及相關交易分析,滑點損失很可能是由前端 bug 導致的。用戶在進行 USDC-FTM 兌換時前端顯示的是 USDC-FTM 的非穩定幣池對應的兌出值與滑點,但提交時實際通過 USDC-FTM 的穩定幣池進行兌換,由於穩定幣池深度較小(總量不超過$1000),用戶兌換 $24000 的 USDC 最終只得到 390 FTM(約 $600)。而兌換完成後,池子中的 USDC 很快又被套利機器人換走,最終用戶產生了 2 萬多美金的損失。
據 Cobo 團隊針對鏈上數據的分析,此類用戶兌換路由中存在穩定池與非穩定池錯用的情況的問題並非個例,造成用戶損失數千到十幾萬美金不等。詳情見參考鏈接中的交易。
Cobo Comment :
DApp 的安全性要由前端代碼、合約代碼、區塊鍊網絡三方共同保證。其中合約和網絡層近年來已經比較受重視,但前端代碼的重視程度還明顯不夠。目前很少有項目開源前端未打包的源碼,更不用說做第三方審計了。項目方 bug、項目方做惡、xss 釣魚等前端問題仍可能存在。對於普通用戶來說,自行驗證前端代碼安全有一定難度,為防範此類事件,建議用戶在簽名交易前,務必反复確認交易合約、函數、參數與期望一致,避免因前端問題遭受資產損失。
Reference:
https://twitter.com/solidlytxissue/status/1497243098673557507?s=21
https://ftmscan.com/tx/0x8d601600e7f08add8c37e8a3312a621bc7384671c8a6d7f6686ee4f28d828d2c
https://ftmscan.com/tx/0x5f411f38bc1d8ef301025fce63a0c47cfb1871786912f9216e3bb66efc9b8750
https://ftmscan.com/tx/0xc64e2d0b38ebc813ff28bb1e7a7bc8a4d1445b3a4b32e1f0bce15524ce8a4c2c
https://ftmscan.com/tx/0x734aa352c1abe0658282e849669e42b00a812db97bf621180280b4977a273c93
Singapore
2022年03月08日