KeyFrame內部研究專用

Solana: The Bugs You're Missing | DeFi Security Summit 2025

DeFi Security Summit - DSS·11月23日週日·21 min英文

三句話摘要

Solana 智能合約中六種「帳戶生命週期漏洞」的成因、攻擊手法與防禦策略。 Solana 帳戶地址可被重複使用這一設計,讓「懸空指標」成為比帳戶驗證錯誤更隱蔽、更致命的一類漏洞,審計時必須系統性追問每個關閉操作是否留下孤兒引用。 帳戶關閉 ≠ 引用消失:Solana 帳戶關閉後其地址仍可重新分配給任意程序,但若其他帳戶仍儲存該地址,程式邏輯會繼續信任它,形成懸空指標,導致 DoS 或資金損失。

重點整理

重點
  • 1

    帳戶關閉 ≠ 引用消失:Solana 帳戶關閉後其地址仍可重新分配給任意程序,但若其他帳戶仍儲存該地址,程式邏輯會繼續信任它,形成懸空指標,導致 DoS 或資金損失。

  • 2

    零 lamport 帳戶被垃圾回收器靜默重置:交易結束時,lamport 為零的帳戶由 runtime 將所有者重置為系統程序,攻擊者可藉此製造外觀合法(屬於 token program、大小正確、可反序列化)但實際已被重置的偽造 mint 帳戶。

  • 3

    帳戶關閉後原地址重建是高頻攻擊向量:同一 PDA 地址關閉後以不同配置重建,可使舊的關聯帳戶(如 bug report)指向新帳戶,在審計競賽場景中直接導致資金被盜取。

  • 4

    過度約束反而製造漏洞:開發者出於謹慎而要求帳戶必須是「系統帳戶」作為驗證條件,但系統帳戶本身可被重新分配,反而讓攻擊者輕易繞過該約束。

實用技巧與重點

乾貨
  • Solana 系統程序地址:全零,Base58 顯示為 `111...1`
  • 關閉帳戶的兩種方式:(1)清零數據 + 重置所有者為系統程序;(2)lamport 歸零,由垃圾回收器在交易結束時自動清除
  • Token-22 擴展:Closeable Mint Extension — 供應量為零時允許關閉 mint 帳戶
  • 租金押金(rent deposit)約 $0.30 / 帳戶;1,000 個帳戶 = $300,10,000 個帳戶 = $3,000
  • 審計競賽攻擊流程:創建 0 存款比賽 → 建立 100 份免費 bug report → 關閉比賽帳戶 → 原地址重建 $100 存款比賽 → 提取舊報告退款 → 每筆獲利 $100
  • mint 帳戶序列化所需大小:82 bytes
  • 防禦方案一:不關閉仍被引用的帳戶,或保留「墓碑記錄(tombstone)」
  • 防禦方案二:PDA 派生路徑加入單調遞增數字,確保同地址無法重建
  • 防禦方案三:使用引用計數器(reference counter),有引用時禁止刪除
  • 講者公司:Accretian,專注 Solana 審計,正在招募

結論

結論

Solana 帳戶地址可被重複使用這一設計,讓「懸空指標」成為比帳戶驗證錯誤更隱蔽、更致命的一類漏洞,審計時必須系統性追問每個關閉操作是否留下孤兒引用。

完整解析

詳細

Solana 的帳戶模型決定了其狀態管理方式:所有鏈上狀態都儲存在帳戶中,每個帳戶都有地址與所有者程序,只有所有者程序才能寫入資料。帳戶的生命週期從屬於系統程序開始,可被分配給特定程序(如 token program),使用後可被關閉並回到原始狀態,地址甚至可以再次被新帳戶佔用。正是這個「同一地址可多次輪迴」的特性,催生了一整類被 Robert 稱為「帳戶生命週期漏洞」的攻擊面。

第一類最直觀:AMM 程式將用戶的 token 帳戶地址儲存在池子帳戶中。一旦用戶關閉該 token 帳戶,所有嘗試向該地址轉帳的 AMM 指令都會失敗,形成低成本的拒絕服務攻擊。類似地,在 Launchpad 場景中,若項目方代替用戶支付帳戶租金(約每帳戶 $0.30),攻擊者可大量關閉 token 帳戶,迫使 Crank 執行者反覆付租,帳戶創建後隨即被攻擊者關閉取回押金,形成持續的租金榨取。

第三類涉及 Token-22 的 Closeable Mint 擴展:若 mint 供應量歸零,mint 帳戶可被關閉並在同地址重建為攻擊者控制的偽 mint,若有程式未嚴格驗證 mint 歸屬,就可能被欺騙。第四類是演講中最精彩的案例:審計競賽平台管理員先以 0 入場費創建比賽並批量建立 bug report,關閉帳戶後在同地址以 $100 入場費重建,等真實研究員存入款項後,用之前免費建立的舊報告申請退款,每筆套取 $100,直接造成資金損失。

第五類是反直覺的「過度約束」:開發者要求 order book PDA 的 creator 種子必須是系統帳戶,本意是加強安全性,卻因為系統帳戶本身可被重新分配而使該約束形同虛設。第六類最為底層:攻擊者創建一個屬於 token program、大小為 82 bytes 的空帳戶,使其通過 mint 驗證檢查,但由於 lamport 為零,交易結束後垃圾回收器將其所有者重置為系統程序,池子帳戶從此持有一個指向隨機系統帳戶的懸空指標。

防禦這類漏洞的核心思路是:追蹤帳戶關閉時是否仍有其他帳戶持有其引用;若必須支持關閉,則保留墓碑記錄、使用帶單調遞增編號的 PDA 路徑確保地址不可重用,或引入引用計數機制在引用存在時禁止刪除。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web3 安全」的內容

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️
8 min
Web3 安全英文8月14日

IF YOU OWN XRP YOU NEED TO SEE THIS PRICE MANIPULATION! ⚠️

Zach Humphries

  • 機構支撐的積極意義:價格操縱常被視為負面,但Ripple掌握大量XRP供應與escrow,在熊市期間提高價格下限,實際上替零售投資者鎖定了低風險的積累區間,這不是剝削而是市場穩定機制。
  • 歷史模式驗證:2024年7月至11月XRP在50美分附近橫盤整理,低點觸及42美分(wick),高點65美分;隨後11月5日至12月5日單月上漲456%,年底到2025年初累計漲幅534%,這個歷史周期正在1美元價位重演。
  • 比特幣聯動邏輯:講者在4-5月就預測「如果比特幣跌至60k以下,XRP會跌至1美元或更低」,此預測精準應驗,反映出熊市中兩者的明確連動關係。
Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady
72 min
Web3 安全英文PODCAST8月5日

Minimmit, Multimmit and the New Consensus Frontier with Patrick O'Grady

Zero Knowledge

  • 反向 Linux 架構:Commonware 刻意暴露棧各層級控制,讓開發者自訂執行環境、共識機制、密碼學實現,而非像 Cosmos SDK 只允許應用層以上定制。2-3 個月能組裝一條定製鏈,代價是額外深度但回報是長期維護成本降低及效能優化彈性。
  • 容錯假設的典範轉移:Alpine Glow(Solana 2025)實現單輪投票定終的關鍵是將容錯預算分離為獨立的 Byzantine 和 Crash 容限。傳統系統把 33% 當一個整體預算;新模型允許 20% 惡意加 20% 崩潰,打破了 PBFT 理論界線,釋放單輪設計空間。
  • Minimet 與 Multimet 的遞進:Minimet 是 5F+1 設定下的乾淨構造,實現更短視圖延遲;Multimet(剛發布)進一步允許並行 mini-commits 且驗證者可推翻領導者審查,使用者交易在全球分布式網路達到 200-300 毫秒端到端定終。
Private Information Retrieval (PIR) with Alex Hoover
64 min
Web3 安全英文PODCAST7月29日

Private Information Retrieval (PIR) with Alex Hoover

Zero Knowledge

  • PIR 保護的是訪問模式,不是資料本身
  • PIR 與加密不同,它關注的是隱藏「客戶端查詢了什麼」,而非「資料是否加密」。在公開資料庫(如區塊鏈)上,客戶端可以在不洩露查詢對象給伺服器的情況下檢索特定條目,解決了輕量級客戶端的隱私和防審查問題。
  • 客戶端預處理方案是突破瓶頸的關鍵