作者:23pds & Thinking
昨天,當我還在整理?APT 攻擊相關的素材時,山哥(@im23pds) 突然激動地來到我的工位旁邊:“Thinking,我發現了一個有趣的項目,CZ 在高頻使用,我們或許可以 0 成本和 CZ Say Hi。”于是我們迅速擬定了幾個可能的漏洞點:
劫持?CZ 在 ReachMe 的賬號;
更改?CZ 在 ReachMe 的設置;
不花錢給?CZ 發消息,繞過給他發消息要花費 1 BNB 的限制。
大約在?10 分鐘后,我們發現可以在 ReachMe.io 低成本和任意用戶 Say Hi 的漏洞,于是我們第一時間聯系了項目方團隊,并提供漏洞驗證的詳情。項目團隊也在第一時間就迅速修復了該漏洞,同時聯系我們進行復測。為 ReachMe 團隊認真嚴謹對待安全問題的態度點贊!
(https://x.com/SlowMist_Team/status/1905212712956665896)
此外,慢霧安全團隊很榮幸獲得了?CZ 和 ReachMe 項目方團隊的致謝。
(https://x.com/cz_binance/status/1905240886986039437)
ReachMe.io 是一個基于 BNB Chain 的付費聊天平臺,旨在通過加密貨幣支付機制連接 KOL(關鍵意見領袖)與粉絲。用戶向 KOL 發送私信需支付 BNB ,KOL 可獲得 90% 費用(平臺抽成 10%);若 KOL 5 天內未回復,用戶可獲 50% 退款。
2025 年 3 月 27 日,幣安創始人 CZ 將其 X 賬號簡介改為:“DM: https://reachme.io/@cz_binance (fees go to charity)”,即“在 ReachMe 上 DM 我,費用將用于慈善”。
我們可以看到,和?CZ Say Hi 的成本是 1 枚 BNB,于是我們設想了一些方案,并進行嘗試,看如何繞過 1 枚 BNB 的限制來和 CZ Say Hi。
和山哥一陣研究后,我們發現?ReachMe 在給任意 KOL 發送消息的時候會通過“/api/kol/message”接口生成消息的概要信息,其中包含“_id”字段,這個字段是在發消息的時候附帶到鏈上合約?Function: deposit(string _identifier,address _kolAddress)使用,對應的是?_identifier?字段。
并且給?KOL 發送消息附帶的 BNB 其實就是調用合約?Function: deposit?附帶的?BNB 數量,于是我們構造了一筆交易,將“Hi CZ”的消息對應的“_identifier”以及 CZ 的地址,并附帶 0.01 BNB(最低僅需 0.001 BNB)發送給合約。
由于?ReachMe 在設計之初并沒有將 KOL 預設的發消息成本放在合約中進行檢測(或許是為了方便?KOL 更好地隨時調整消息的價格并且節省 Gas 費?),因此可以通過修改前端代碼,修改網絡響應包或者直接與合約進行交互來繞過 1 BNB 的限制。這是由于服務端在檢索鏈上的交易時也遺漏了消息價格與鏈上交易的 BNB 數量的檢查。
于是我們用了大約?10 分鐘,成功繞過了和 CZ 對話要花費 1 BNB 的規則,僅花費了 0.01 BNB 就可以和 CZ Say Hi。
另外,值得注意的是,其實還有更深一步的利用,如:給?CZ 發有趣的消息,進行魚叉釣魚?鑒于 CZ 本人影響較大,后面就放棄了這部分測試,大家也多注意安全,謹防釣魚。
這類結合中心化與去中心化的產品設計,經常會出現鏈上和鏈下的安全檢查不一致的情況。因此,攻擊者可以通過分析鏈上鏈下的交互流程,繞過某些檢查限制。慢霧安全團隊建議項目方盡可能在鏈上和鏈下的代碼中同步必要的安全檢查項,避免被繞過的可能。同時,建議聘請專業的安全團隊進行安全審計,以發現潛在的安全風險并加以防范。