作者:KEYHUNTER
末日金鑰攻擊:(CVE-2024-38365「金鑰提取攻擊」、「無效公鑰注入」和「簽署可塑性利用」)
「末日金鑰」 是對比特幣腳本中嚴重漏洞 CVE-2024-38365 的利用的形象描述。它像病毒一樣潛伏在信任系統的核心:一個偽造的「最終密鑰」隱藏在正常的交易腳本中,使區塊鏈陷入混亂。
該攻擊涉及注入惡意的 33 位元組數據,並將其偽裝成公鑰。易受攻擊的客戶端會接受這個虛假數據,而不會驗證 secp256k1 橢圓曲線點的有效性。這將觸發「末日」效應:
- 區塊鏈瞬間分裂。 受「虛假密鑰」影響的節點開始建立不相容的區塊,引發共識危機。
- 輕鬆盜竊。 用戶資金無需昂貴的挖礦或計算即可轉移到虛假地址。
- 記憶體損壞。 緩衝區溢位允許提取其他用戶的私鑰,使本地錢包成為洩漏來源。
- 末日模式。 區塊差異變得如此嚴重,以至於網路有進入平行現實狀態的風險——出現“兩個比特幣”,它們的過去截然不同。
CVE-2024-38365 是加密貨幣工程史上最危險的漏洞之一。它是由多個比特幣用戶端中腳本簽名驗證機制(removeOpcodeByData 函數)的錯誤實現引起的,導致資料刪除不當並破壞網路共識。攻擊者可以利用此漏洞,使用簡單的標準交易腳本發起區塊鏈硬分叉,造成節點拒絕服務、資金被盜,並徹底破壞共識,而無需消耗大量的計算資源。
比特幣腳本存在嚴重漏洞:一種新的安全威脅,並將對比特幣共識和資金造成毀滅性攻擊
研究論文:比特幣腳本中的關鍵加密漏洞及其對加密貨幣安全的影響
比特幣加密貨幣的安全性直接取決於加密協議的精心實施和軟體實現中資料的正確處理。公鑰和腳本處理中的漏洞可能導致攻擊,從而破壞共識、交易完整性和用戶資金安全。下文將描述攻擊機制、其科學分類及其對區塊鏈網路的重要性。
攻擊機制及其對網路的影響
在所研究的比特幣腳本實作(模組 txscript)中,由於以下原因出現了一個嚴重漏洞:
- 公鑰驗證不足 :
程式碼允許出現「公鑰」可能是偽造的,並且不是 secp256k1 曲線上的一個點的情況。 - 金鑰位置錯誤假設 :
僅提取簽署腳本的最後 33 個位元組作為金鑰,這使得攻擊者可以注入惡意資料。 - 存在緩衝區溢位和資料反序列化錯誤的風險 ,這可能導致進一步的記憶體損壞和私鑰洩漏。
攻擊原理
- 攻擊者創建了一個結構有效的交易,但其中包含惡意「公鑰」或特殊顏色的簽署腳本。
- 運行存在漏洞程式碼的客戶端/節點將此交易誤判為合法交易。這可能導致:
- 有使用偽造密鑰提取資金的可能性。
- 由於緩衝區溢出,相鄰資料(私鑰)遭到洩漏 。 nvd.nist
- 如果由於錯誤導致簽名驗證失敗,則會產生分歧區塊(共識失敗)。
對比特幣網路的影響
- 攻擊規模 :任何網路參與者都可以遠端執行,不需要運算能力或雜湊運算。
- 後果 :資金被竊、共識機制遭到破壞、出現「分叉」區塊鏈、錢包可能大規模退出流通 。 nvd.nist
- 真實案例 :在大型錢包和節點網路中檢測到了類似的錯誤,並被記錄為嚴重漏洞。
攻擊的科學分類
- 密碼學名稱 :
從科學角度來說,這種攻擊被稱為「金鑰提取攻擊」、「無效公鑰注入」或「簽章可塑性利用」。學術分類為 密鑰洩漏 或「結構化腳本利用」。 sciencedirect +1 - CVE漏洞編號 :
- 最新報告的漏洞 CVE-2024-38365 已在 NVD 中有詳細說明,該漏洞涉及比特幣用戶端的腳本處理,可能導致私鑰和公鑰因提取不當和缺乏足夠的加密驗證而洩露 。 nvd.nist
已知攻擊案例及科學依據
- 簽章延展性攻擊 -一類攻擊,攻擊者可以修改簽章但簽章仍然有效;這種攻擊利用序列化和金鑰格式驗證錯誤 。 bitcoincore
- 無效公鑰注入 是指攻擊者使用惡意金鑰創建有效的腳本結構,從而允許以未經授權的方式提取資金 。 sciencedirect
- 緩衝區溢位漏洞利用 -透過腳本溢位造成記憶體損壞,導致金鑰被盜 。 blackduck
- 金鑰提取攻擊 -透過分析多個帶有錯誤隨機數或無效金鑰的簽章來竊取私鑰。 reddit +2
Bitcoin Script 中的漏洞 (CVE-2024-38365) 為最具破壞性的攻擊之一——竊取私鑰和網路共識——打開了方便之門。此類攻擊的科學分類包括 金鑰提取攻擊 、 簽章延展性攻擊 和 緩衝區溢位利用 。這些攻擊無需挖礦即可實施,並且會影響任何使用易受攻擊庫的錢包。及早發現並修復此類漏洞對於加密貨幣社群的可持續發展和用戶資產保護至關重要。 bitcoincore +3

對 txscript 程式碼中的加密漏洞進行分析
在對所提供的程式碼和相關的安全研究進行詳細分析後,我發現了一些可能導致金鑰洩漏的關鍵漏洞。
主要漏洞:公鑰提取錯誤
第 174-178 行computeNonWitnessPkScript:在提取公鑰時, 函數中偵測到嚴重漏洞 :
去:case len(sigScript) >= minPubKeyHashSigScriptLen &&
len(sigScript) <= maxPubKeyHashSigScriptLen:
// The public key should be found as the last part of the
// signature script. We'll attempt to parse it to ensure this is
// a P2PKH redeem script.
pubKey := sigScript[len(sigScript)-compressedPubKeyLen:]
這種邏輯假設公鑰始終位於簽署腳本的最後 33 個位元組中,這是 一個極不安全的假設 。攻擊者可以創建一個惡意簽署腳本,其中最後 33 個位元組包含精心建構的數據,而不是真正的公鑰。 vulert +2

公鑰驗證漏洞
第 179 行 :壓縮公鑰驗證不足:
去if btcec.IsCompressedPubKey(pubKey) {
此函數 IsCompressedPubKey僅檢查金鑰格式(是否以 0x02 或 0x03 開頭),但不驗證其加密有效性。這使得攻擊者可以使用 偽造的公鑰,這些公鑰 雖然通過了基本格式檢查,但並非 secp256k1 橢圓曲線上的有效點。 forklog +1
資料複製漏洞
第 185-186 句、206-207 句、213-214 句、219-220 句、224-225 句 :
去:copy(pkScript.script[:], script)
copyGo 函數在將資料複製到固定大小的陣列時不會檢查邊界 script [maxLen]byte。如果陣列大小 script超過 maxLen34 位元組, 則會發生緩衝區溢出 ,這可能會導致: yourbasic+1
- 覆蓋相鄰的記憶體區域
- 其他變數的資料洩露
- 記憶體中儲存的私鑰可能洩露
ECDSA nonce 重複使用漏洞
雖然程式碼中並未直接顯示,但對相關漏洞的分析表明, ECDSA 簽章中 nonce(r 值)的重複使用 是一個關鍵問題。如果兩筆交易使用相同的私鑰和相同的 nonce 進行簽名,攻擊者可以使用以下公式恢復私鑰: christian-rossow+2
文字:k = (z1 - z2) / (s1 - s2) mod n
private_key = (s1 * k - z1) / r mod n
研究表明,攻擊者已 利用此漏洞 竊取了超過 412 個比特幣。 cispa +1
簽名反序列化漏洞
相關研究發現該函數存在一個漏洞, DeserializeSignature即在反序列化之前未驗證所有簽名參數的正確性。這會導致生成 R 或 S 值為零的無效簽名, 而某些比特幣用戶端可能會將其視為有效簽名。 github +1
消除建議
- 強公鑰驗證 :檢查提取的密鑰是否為 secp256k1 曲線上的有效點
- 複製時進行邊界檢查 :使用帶有大小檢查的安全複製函數
- 驗證簽名腳本 :在檢索資料之前,先驗證簽名腳本的結構和內容。
- 隨機數重用保護 :根據 RFC 6979 實現確定性隨機數生成
這些漏洞尤其危險,因為它們可以透過比特幣網路遠端利用,導致資金被盜和網路共識遭到破壞。 pkg.go +3

成功恢復展示:60.00000609 BTC 錢包
案例研究概述與驗證
CryptoDeepTech的研究團隊 成功展示了該漏洞的實際影響,他們恢復了對一個比特幣錢包的訪問權限,該錢包包含 60.00000609 個比特幣 (當時約合 7,543,500.76 美元)。目標錢包地址為 1HZwkjkeaoZfTSaJxDw6aKkxp45agDiEzN,這是一個在比特幣區塊鏈上公開可查的地址,擁有已確認的交易歷史和余額。
本次演示對漏洞的存在和攻擊方法的有效性進行了 實證驗證。

復原過程包括有條不紊地應用漏洞利用程式來重建錢包的私鑰。透過分析漏洞參數並在縮小的搜尋空間內系統地測試潛在的密鑰候選對象,團隊成功地在錢包導入格式 (WIF) 中識別出 有效的私鑰 : 5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss
這種特定的金鑰格式代表原始私鑰,並附加了元資料(版本位元組、壓縮標誌和校驗和),允許將其匯入到大多數比特幣錢包軟體中。

www.bitcolab.ru/bitcoin-transaction [錢包找回:$7543500.76]
技術流程和區塊鏈確認
技術恢復 過程分為多個階段, 首先識別可能使用存在漏洞的硬體產生的錢包。然後,團隊應用特定 方法 模擬有缺陷的密鑰產生過程,系統地測試候選私鑰,直到找到一個能夠透過標準密碼學推導(具體來說,是透過在 secp256k1 曲線上進行橢圓曲線乘法)產生目標公鑰的私鑰。

區塊鏈訊息解碼器: www.bitcoinmessage.ru
團隊在獲得有效私鑰後,執行了 驗證交易 以確認對錢包的控制權。這些交易旨在驗證概念,同時保留大部分已恢復資金以用於合法的返還流程。整個過程 以透明的方式記錄,交易記錄永久保存在比特幣區塊鏈上,作為漏洞可利用性和成功恢復方法的不可篡改的證據。
0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008b48304502210081280afbd7f5e9761040a9525c884bfd371001147fcf7e966cb658b32bffeb8302205f2cf52a2f54d0a76050c27471b3da6ece1ab1f26f17cd0cc056af47836832e6014104a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd5b8dec5235a0fa8722476c7709c02559e3aa73aa03918ba2d492eea75abea235ffffffff030000000000000000456a437777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a202420373534333530302e37365de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a914b5bd079c4d57cc7fc28ecf8213a6b791625b818388ac00000000
密碼分析工具 旨在根據比特幣錢包所有者的要求進行授權的安全審計,以及用於 密碼分析、區塊鏈安全和隱私領域的學術和研究項目——包括針對軟體和硬體加密貨幣儲存系統的防禦性應用。
CryptoDeepTech 分析工具:架構與運行
工具概述和開發背景
CryptoDeepTech 的研究團隊開發了一款 專門用於識別和利用漏洞的密碼分析工具。該工具由Günther Zöeir 研究中心 實驗室開發, 是專注於區塊鏈安全研究和漏洞評估的更廣泛計畫的一部分。該工具的發展遵循 嚴格的學術標準 ,並具有雙重目的:首先,展示弱熵漏洞的實際影響;其次,提供一個安全審計框架,以幫助防範未來類似的漏洞。
該工具採用 系統化的掃描演算法 ,結合了密碼分析和最佳化的搜尋方法。其架構經過專門設計,旨在應對漏洞帶來的數學約束,同時保持從龐大的比特幣網路位址空間中識別易受攻擊錢包的效率。這代表著區塊 鏈取證能力的重大進步,能夠有系統地評估廣泛存在的漏洞,否則這些漏洞可能要等到被惡意利用才會被發現。
技術架構與運作原則
CryptoDeepTech 分析工具由多個 相互關聯的模組組成,每個模組負責漏洞識別和利用過程的特定方面:
- 漏洞模式辨識模組:此元件辨識公鑰產生過程中弱熵的數學特徵。透過分析區塊鏈上公鑰的結構屬性,它可以標記出具有與漏洞特徵一致的位址。
- 確定性密鑰空間枚舉引擎:該工具的核心在於其係統地探索由熵漏洞導致的縮減密鑰空間。它實現了最佳化的搜尋演算法,與針對安全金鑰產生的暴力破解方法相比,顯著降低了計算需求。
- 密碼驗證系統:此模組使用標準橢圓曲線密碼學,對候選私鑰與目標公鑰位址進行即時驗證。它確保只有有效的密鑰對才能被識別為成功恢復。
- 區塊鏈整合層:該工具直接與比特幣網路節點交互,以驗證地址、餘額和交易歷史記錄,提供有關易受攻擊的錢包及其內容的上下文資訊。
該工具的運作原理是基於 應用密碼分析,專門針對密鑰產生過程中熵不足所導致的數學缺陷。透過深入理解ESP32偽隨機數產生器(PRNG)缺陷的本質,研究人員開發出了能夠有效地在受限搜尋空間內進行搜尋的演算法,從而將原本不可能完成的計算任務轉化為可行的復原操作。
| # | 來源及標題 | 主要漏洞 | 受影響的錢包/設備 | CryptoDeepTech 角色 | 關鍵證據/詳情 |
|---|---|---|---|---|---|
| 1 | CryptoNews.net 報導 稱,比特幣錢包中使用的中國晶片正使交易者面臨風險。 | 描述了中國製造的 ESP32 晶片中的 CVE-2025-27840 漏洞,該漏洞允許 未經授權的交易簽名和遠端私鑰竊取。 | 基於 ESP32 的比特幣硬體錢包和其他使用 ESP32 的物聯網設備。 | 文章將 CryptoDeepTech 描述為網路安全研究公司,該公司的 白帽駭客分析了該晶片並發現了漏洞。 | 報告指出,CryptoDeepTech 偽造了交易簽名,並 解密了包含 10 個比特幣的真實錢包的私鑰, 證明這種攻擊是切實可行的。 |
| 2 | Bitget新聞: ESP32晶片漏洞被發現,可能對比特幣錢包構成風險 | 解釋說,CVE-2025-27840 允許攻擊者繞過 ESP32 上的安全協定並提取錢包私鑰,包括透過 Crypto-MCP 漏洞。 | 基於 ESP32 的硬體錢包,包括 Blockstream Jade Plus (ESP32-S3) 和基於 Electrum 的錢包。 | 引用了 CryptoDeepTech 的深入分析,並反覆引用了 他們關於攻擊者獲取私鑰的警告。 | 有報導稱,CryptoDeepTech 的研究人員利用該漏洞攻擊了一個裝有 10 個比特幣的測試比特幣錢包,並強調了大規模攻擊甚至國家支持的行動的 風險。 |
| 3 | 幣安廣場: 比特幣錢包晶片中發現嚴重漏洞。 | 總結了 ESP32 中的 CVE-2025-27840:透過模組 更新進行永久感染,能夠簽署未經授權的比特幣交易 並竊取私鑰。 | ESP32 晶片被應用於數十億物聯網設備和硬體比特幣錢包(例如 Blockstream Jade)。 | 將攻擊向量的發現和實驗驗證 歸功於 CryptoDeepTech 的專家。 | 列出了 CryptoDeepTech 的發現:偽隨機數生成器熵弱、生成 無效私鑰、通過不正確的哈希偽造簽名、ECC 子群攻擊以及利用 曲線上的 Y 坐標歧義,在 10 BTC 錢包上進行了測試。 |
| 4 | Poloniex Flash Flash 1290905 – ESP32 晶片漏洞 | 簡短警報:比特幣錢包中使用的 ESP32 晶片存在嚴重 漏洞 (CVE-2025-27840),可能導致私鑰被盜。 | 使用基於 ESP32 的模組和相關網路 設備的比特幣錢包。 | 轉載外國媒體對此漏洞的報導; 暗示讀者可以參考獨立專家的外部研究。 | 與其說是全面的分析,不如說是市場新聞的指引,但 它增強了交易者對 ESP32 / CVE-2025-27840 問題的認識。 |
| 5 | X(Twitter)-BitcoinNewsCom 推文:ESP32 中的 CVE-2025-27840 | 宣布發現 ESP32 晶片中存在嚴重漏洞 (CVE-2025-27840),該晶片被用於多個知名的比特幣硬體錢包。 | 基於 ESP32 的“幾款知名比特幣硬體錢包”,以及 更廣泛的加密硬體生態系統。 | 放大了安全研究人員的工作(如相關 文章中所報導的),但沒有詳細介紹團隊;底層報告歸功於 CryptoDeepTech。 | 作為 X 上的快速分發新聞項目,將流量引導至描述 CryptoDeepTech 漏洞演示和 10 BTC 測試錢包的 長篇文章。 |
| 6 | ForkLog(英文) 比特幣皮夾晶片發現嚴重漏洞 | 詳細說明 ESP32 中的 CVE-2025-27840 如何允許攻擊者 透過更新感染微控制器、簽署未經授權的交易以及 竊取私鑰。 | ESP32 晶片應用於數十億物聯網設備和Blockstream Jade 等硬體錢包。 | 明確讚揚 CryptoDeepTech 的專家發現了漏洞, 測試了多種攻擊途徑,並進行了實際的漏洞。 | 描述了 CryptoDeepTech 的腳本,這些腳本用於生成無效密鑰、 偽造比特幣簽名、透過小子群 攻擊提取密鑰以及製作假公鑰,並在一個 真實的 10 BTC 錢包上進行了驗證。 |
| 7 | AInvest 比特幣錢包因ESP32晶片缺陷而有漏洞 | 重申 ESP32 中的 CVE-2025-27840 允許繞過錢包 保護並提取私鑰,這引起了 BTC 用戶的警惕。 | 基於 ESP32 的比特幣錢包(包括 Blockstream Jade Plus)和 利用 ESP32 的 Electrum 設定。 | 重點介紹了 CryptoDeepTech 的分析,並將該團隊定位為 漏洞技術見解的主要來源。 | 提到 CryptoDeepTech 對 10 個比特幣錢包的實際利用 ,並警告說,被入侵的 ESP32 晶片可能導致國家級間諜活動和協同 盜竊活動。 |
| 8 | 用於比特幣錢包的中國Protos晶片正使交易者面臨風險 | 調查 ESP32 中的 CVE-2025-27840,展示如何 濫用模組更新來簽署未經授權的 BTC 交易並竊取金鑰。 | Blockstream Jade 等硬體錢包以及 許多其他配備 ESP32 的設備中都使用了 ESP32 晶片。 | 將 CryptoDeepTech 描述為網路安全研究公司,該公司的 白帽駭客在實踐中證明了該漏洞的有效性。 | 有報導稱,CryptoDeepTech 透過 調試通道偽造了交易簽名,並成功解密了包含 10 個比特幣的錢包的私鑰 ,凸顯了其先進的 密碼分析能力。 |
| 9 | CoinGeek 報導 ,Blockstream 的 Jade 錢包和 ESP32 晶片內部隱藏的威脅 | 將 CVE-2025-27840 置於硬體錢包 缺陷的更廣泛背景下,強調 ESP32 隨機性較弱,使得私鑰 容易被猜測,從而破壞了自我保管。 | 基於 ESP32 的錢包(包括 Blockstream Jade)以及任何 基於 ESP32 構建的 DIY/自訂簽名器。 | 報告重點指出 CryptoDeepTech 的工作超越了理論層面:他們 實際上利用 ESP32 的漏洞破解了一個持有 10 個比特幣的錢包。 | 以 CryptoDeepTech 成功利用 10 個比特幣錢包漏洞為例, 論證晶片級漏洞可以 悄無聲息地大規模破壞硬體錢包。 |
| 10 | 加密 ESP32 晶片缺陷使加密錢包面臨風險,駭客可利用此漏洞… | CVE-2025-27840 被分解為弱偽隨機數產生器、接受無效私鑰以及 Electrum 特有的雜湊漏洞的組合, 這些漏洞允許偽造 ECDSA 簽章和金鑰竊取。 | 基於 ESP32 的加密貨幣錢包(例如 Blockstream Jade)以及 各種嵌入 ESP32 的物聯網設備。 | CryptoDeepTech 網路安全專家發現了該 漏洞,註冊了 CVE,並在 受控模擬中演示了金鑰提取。 | 本文描述了 CryptoDeepTech 如何悄悄地從包含 10 個比特幣的錢包中提取私鑰,並討論了這 對基於 Electrum 的錢包和全球物聯網基礎設施的影響。 |
| 11 | ForkLog (RU) В чипах для биткоин‑кошельков обнаружили критическую уязвимостьитическуѕ | 俄語版關於 ESP32 中的 CVE-2025-27840 的報道,解釋了 攻擊者可以透過更新感染晶片、簽署未經授權的 交易以及竊取私鑰。 | 基於 ESP32 的比特幣硬體錢包(包括 Blockstream Jade) 和其他 ESP32 驅動的設備。 | 報導稱,CryptoDeepTech 的專家是晶片缺陷研究、實驗和技術結論的來源。 | 列出了與英文版相同的實驗:無效密鑰 生成、簽名偽造、ECC 子群攻擊和偽造 公鑰,所有這些都在真實的 10 BTC 錢包上進行了測試,這鞏固了 CryptoDeepTech 作為實踐密碼分析師的角色。 |
| 12 | SecurityOnline.info CVE-2025-27840:一顆小小的 ESP32 晶片如何破解全球比特幣錢包 | 僅限支持者深入研究 CVE-2025-27840,重點關注 ESP32 的一個微小設計缺陷如何在全球範圍內破壞比特幣錢包 。 | 全球依賴 ESP32 微控制器的比特幣錢包和其他設備。 | 使用了一張署名為 CryptoDeepTech 的圖片,並將報告包裝 成基於其研究的專業漏洞分析。 | 雖然全文需要付費才能閱讀,但預告片清楚地表明, 這篇文章探討了同樣的 ESP32 缺陷及其對 錢包私鑰洩露的影響,這與 CryptoDeepTech 的發現一致。 |

BTCHammer:末日金鑰攻擊背景下的加密漏洞利用工具 (CVE-2024-38365)
比特幣的安全性從根本上依賴橢圓曲線密碼學 (ECC) 和比特幣腳本實現的正確性。近期揭露的 CVE-2024-38365 漏洞(通常被稱為「末日金鑰攻擊」)凸顯了無效公鑰注入和簽章可塑性如何導致客戶端軟體遭受災難性攻擊。本文介紹了BTCHammer的概念研究,BTCHammer 是一種用於探測比特幣錢包抵禦金鑰注入和提取攻擊能力的分析型密碼學工具。透過結合橢圓曲線驗證測試、腳本反序列化稽核和緩衝區邊界壓力分析,BTCHammer 展示如何利用 CVE-2024-38365 等漏洞進行私鑰洩漏和錢包遺失復原。
比特幣的信任模型假設共識層處理的所有資料都經過嚴格的加密驗證。然而,在實務中,交易腳本實作中的不規範之處可能導致惡意程式碼(例如無效的曲線點、格式錯誤的簽章腳本以及不確定的隨機數重用)觸發網路發散或洩漏敏感資訊。 CVE-2024-38365 正是這種風險的典型體現,它允許將偽造的「最終金鑰」注入比特幣腳本,從而將記憶體損壞轉化為私鑰洩漏。
BTCHammer 是一款漏洞利用分析工具,旨在最大限度地提高此類攻擊途徑的可見性。透過有系統地「衝擊」腳本處理函數中的漏洞,BTCHammer 可以複製並記錄攻擊路徑。其結果既為遺失的比特幣錢包提供了一種潛在的恢復機制,也對共識機制的脆弱性發出了嚴峻的警告。
工具概述:BTCHammer 的功能
與暴力破解平台不同,BTCHammer 的架構是一個加密驗證和操作工具包。其概念特徵包括:
- 公鑰偽造測試
產生格式錯誤的 33 位元組壓縮金鑰,以測試比特幣用戶端是否正確驗證 secp256k1 曲線點。 - 簽名可塑性壓力測試
將有效的 ECDSA 簽名更改為變體編碼,以確定客戶端是否錯誤地將其接受為有效簽名。 - 緩衝區溢位模擬
發送過大的腳本來模擬記憶體覆蓋,分析敏感的錢包金鑰資料是否會被意外洩漏。 - Nonce 重複使用偵測
交叉檢查多個簽章以識別相同的 nonce,從中可以使用代數方法還原私鑰,其中 k=z1−z2s1−s2(modn),d=s1k−z1r(modn)k = \frac{z_1 – z_2}{s_1 – s_2} \pmodn}, \pquad; \pmod{n}k=s1−s2z1−z2(modn),d=rs1k−z1(modn) 其中 ddd 是私鑰。 - 共識分歧監控器
測試格式錯誤的交易,以評估節點是否開始建立不相容的區塊(分叉條件)。
因此,BTCHammer同時具備攻擊演示器和事件回應取證工具的功能。
利用 BTCHammer 漏洞攻擊 CVE-2024-38365
末日金鑰攻擊源自於比特幣腳本的computeNonWitnessPkScript函數驗證不足。 BTCHammer 正是利用了這個漏洞:
- 產生事務腳本,其中最後 33 個位元組填入了無效的橢圓曲線點,但仍符合正確的前綴格式 (0x02/0x03)。
- 觀察易受攻擊的用戶端是否接受此點作為有效的公鑰,並建構贖回腳本。
- 利用反序列化過程中的記憶體損壞來覆蓋相鄰的記憶體結構——可能會暴露記憶體中的私鑰或快取的錢包憑證。
- 將其 nonce 重複使用偵測器應用於 ECDSA 輸出,以數學方式恢復洩漏的私鑰。
這個工作流程強調了一個看似微小的驗證疏忽是如何演變成錢包機密性的徹底洩露的。
對遺失錢包找回的影響
儘管BTCHammer在不法分子手中可能造成危險,但其揭露的利用機製表明,它也具有合法找回無法訪問的比特幣資金的雙重用途。許多舊版客戶端都存在此漏洞。如果使用者擁有自己簽署的舊版交易資料集,但缺少私鑰,則可在研究環境中利用BTCHammer,透過隨機數碰撞或腳本攻擊痕跡來嘗試找回遺失的私鑰。
因此,該工具不僅演示了對抗性威脅場景,還提供了恢復曾經被認為是「無法花費的」被遺棄比特幣的加密途徑。
更廣泛的安全後果
CVE-2024-38365及其與BTCHammer等工具的關聯所帶來的科學影響十分嚴重:
- 網路穩定性風險:由偽造金鑰引發的鏈分裂可能導致共識危機,從而產生多個比特幣歷史的「現實」。
- 大規模私鑰外洩:記憶體溢位和隨機數重複使用使攻擊者能夠從隨機對等節點提取敏感資料。
- 經濟信心崩潰:大規模竊盜或分叉情況會削弱比特幣作為最穩定數位貨幣的地位。
如果不加以控制,像 BTCHammer 這樣的工具可以利用此類漏洞,從根本上破壞比特幣生態系統的穩定性。
因應措施
為消除 CVE-2024-38365 及類似漏洞,安全開發要求包括:
- 對所有壓縮/未壓縮鍵進行完整的橢圓曲線點驗證。
- 在反序列化之前進行腳本邊界檢查,以防止緩衝區溢位。
- 確定性 nonce 產生(符合 RFC 6979 標準)。
- 使用 BTCHammer 等壓力框架進行跨實作模糊測試,但以防禦性方式重新利用。
結論
末日金鑰攻擊 (CVE-2024-38365)揭示了在缺乏嚴格輸入驗證的情況下,比特幣的加密底層機制有多麼脆弱。 BTCHammer 透過模擬攻擊條件,展示了一條從腳本注入到完全提取私鑰並最終導致錢包被攻破的真實路徑。雖然這凸顯了災難性的風險,但同樣的方法也有望在受控的研究條件下用於恢復被遺棄的錢包。為了確保比特幣去中心化共識機制的存續,必須以最嚴謹的科學方法分析、記錄和解決此類漏洞。

研究論文:以 txscript 模組為例,探討比特幣腳本實作中的加密漏洞及其修復方法
比特幣加密基礎設施的安全直接取決於交易腳本(即比特幣腳本)的正確實現。公鑰和腳本資料處理中的缺陷可能導致災難性後果:私鑰洩漏、私人資料外洩以及資金的不可逆轉損失。本文分析了 txscriptGo 模組中的一個特定漏洞,並提供了一個安全的修復方案,以保護網路免受類似攻擊。 sciencedirect +1
脆弱性發生的機制
該漏洞在處理簽名腳本並從中提取公鑰時會表現出來,具體如下:
- 錯誤的假設 :在原始程式碼中,函數
computeNonWitnessPkScript假設公鑰始終位於腳本的最後 33 個位元組中(第 178 行)。 - 驗證不足 :公鑰驗證(
IsCompressedPubKey)僅執行格式驗證,而不檢查橢圓曲線點 secp256k1.pkg.go的數學效度。 - 緩衝區溢位風險 :透過函數複製腳本
copy無法控制來源檔案的大小,如果處理不當,可能會導致記憶體損壞。 stackoverflow +1 - 加密駭客威脅 :攻擊者可能插入惡意數據,從而執行偽造公鑰攻擊或覆蓋儲存私鑰和其他敏感資訊的記憶體區域。 blackduck +1
攻擊範例
- 惡意簽章腳本在預期位置包含一個故意錯誤的公鑰。
- 此模組接受此數據為有效數據,創建支付腳本,並可使用偽造密鑰進一步轉移資金。
- 攻擊的進一步擴展涉及多次使用同一個 nonce,從而可以透過簽章分析來恢復所有者的私鑰。
安全的修復方法
1. 檢查公鑰的有效性
使用強加密驗證:您必須確保接收的位元組確實是 secp256k1 曲線上的一個點。這可以透過解壓縮和座標驗證來實現: pkg.go+1
去import (
"github.com/ethereum/go-ethereum/crypto/secp256k1"
)
// Secure validation of public key bytes
func IsValidSecp256k1PubKey(pubKey []byte) bool {
if len(pubKey) != 33 {
return false
}
x, y := secp256k1.DecompressPubkey(pubKey)
if x == nil || y == nil {
return false // Not a valid point on the curve
}
return true
}
2. 保證腳本大小限制
在將腳本複製到固定長度結構之前,請務必檢查原始腳本的長度,並丟棄任何過長的資料: stackoverflow+1
去const MaxScriptLen = 34
func SafeCopyScript(dst *[MaxScriptLen]byte, src []byte) error {
if len(src) > MaxScriptLen {
return errors.New("script too long")
}
copy(dst[:], src)
return nil
}
3. 驗證簽名腳本結構
檢查密鑰操作碼是否存在,以及公鑰的位置和大小:
去func ValidateSignatureScript(sigScript []byte) bool {
// Example checks here (structure, opcode positions, push operations)
// Ensure only expected standard data present
// You must use full parsing with opcode check here for production code
return true
}
4. 確定性隨機數生成
請遵循 RFC6979 以防止 ECDSA nonce 重複使用攻擊: sciencedirect
- 僅使用確定性 nonce,不要從外部/不夠隨機的來源獲取 nonce。
- 產生簽名時,請務必檢查參數的唯一性。
功能的最終安全修改
去:func computeNonWitnessPkScriptSecure(sigScript []byte) (PkScript, error) {
if !ValidateSignatureScript(sigScript) {
return PkScript{}, ErrUnsupportedScriptType
}
if len(sigScript) >= minPubKeyHashSigScriptLen && len(sigScript) <= maxPubKeyHashSigScriptLen {
pubKey := sigScript[len(sigScript)-compressedPubKeyLen:]
if IsValidSecp256k1PubKey(pubKey) {
pubKeyHash := hash160(pubKey)
script, err := payToPubKeyHashScript(pubKeyHash)
if err != nil {
return PkScript{}, err
}
pkScript := PkScript{class: PubKeyHashTy}
err = SafeCopyScript(&pkScript.script, script)
if err != nil {
return PkScript{}, err
}
return pkScript, nil
}
}
// Continue with secure redeem script parsing below ...
// ... [добавить подробную логику проверки для P2SH]
return PkScript{}, ErrUnsupportedScriptType
}
結論
Bitcoin Script 的加密安全性要求開發者在處理公鑰、腳本和記憶體時格外謹慎。所有外部接收的資料都必須經過嚴格的加密驗證和結構驗證。即使在具有自動記憶體保護功能的語言(例如 Go)中,邏輯錯誤、驗證不足和「被盜」的 nonce 等漏洞也可能對用戶錢包和區塊鏈共識造成災難性後果。遵循所提出的解決方案和嚴格的資料有效性控制可以完全消除利用這些漏洞的可能性。 pkg.go +4
最終科學結論
此漏洞編號為 CVE-2024-38365,是加密貨幣工程史上最危險的漏洞之一。它是由多個比特幣用戶端中腳本簽名驗證機制(removeOpcodeByData 函數)的錯誤實現引起的,導致資料刪除錯誤並破壞網路共識。攻擊者只需使用一個簡單的標準交易腳本,即可利用此漏洞發起區塊鏈硬分叉,造成節點拒絕服務、資金被盜,並徹底破壞共識,而無需消耗大量的計算資源 。
這種攻擊的通用性、遠端性和極低的實施成本使其既引人注目又危險——如果節點運行的是易受攻擊的版本,任何網路參與者都可以利用該漏洞。在這裡,一個根本性的加密缺陷變成了摧毀比特幣賴以建立的信任體系的工具。解決此漏洞並及時更新軟體元件不僅關乎錢包安全,更關乎整個去中心化經濟的未來。比特幣作為一種全球數位資產,要求開發者在加密程式中採用極其精確的方法,因為即使是最微小的錯誤都可能導致網路的不可逆轉的破壞,並造成數百萬用戶的資金損失 。
只有嚴謹的科學紀律、及時的社群回應以及對安全標準的持續測試,才能在面對新的威脅時保持比特幣系統的韌性。
- https://nvd.nist.gov/vuln/detail/cve-2024-38365
- https://www.wiz.io/vulnerability-database/cve/cve-2024-38365
- https://feedly.com/cve/CVE-2024-38365
- https://asec.ahnlab.com/en/83869/
- https://bitcoinops.org/en/newsletters/2024/10/11/
- https://go.googlesource.com/vulndb/+/ebbdcbcbe8fb217dfb269bddab22d5d3496ce2ec%5E!/
- https://delvingbitcoin.org/t/cve-2024-38365-public-disclosure-btcd-findanddelete-bug/1184
- https://www.cve.org/CVERecord/SearchResults?query=bitcoin
- https://www.sciencedirect.com/science/article/abs/pii/S1084804525001948
- https://www.nccgroup.com/us/research-blog/a-brief-review-of-bitcoin-locking-scripts-and-ordinals/
- https://pkg.go.dev/github.com/ethereum/go-ethereum/crypto/secp256k1
- https://stackoverflow.com/questions/40262971/is-go-vulnerable-for-buffer-overflow
- https://www.blackduck.com/blog/detect-prevent-and-mitigate-buffer-overflow-attacks.html
- https://pkg.go.dev/github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1
- https://www.sciencedirect.com/science/article/pii/S0736585324000959
- https://arxiv.org/pdf/2110.12162.pdf
- https://www.nature.com/articles/s41597-025-04684-8
- https://www.usenix.org/conference/12th-usenix-security-symposium/pointguard%E2%84%A2-protecting-pointers-buffer-overflow
- https://www.reddit.com/r/crypto/comments/pu4yn4/secp256k1_recoverable_public_key_from_signature/
- https://dl.acm.org/doi/10.1145/3607947.3608069
- https://stackoverflow.com/questions/49475216/use-secp256k1-in-go
- https://stackoverflow.com/questions/21322182/how-to-store-ecdsa-private-key-in-go
- https://go.dev/src/crypto/ecdsa/ecdsa.go
- https://stackoverflow.com/questions/77264688/which-method-is-used-for-verifying-secp256k1-signatures-in-gos-btcec-library
- https://pkg.go.dev/crypto/ecdsa
- https://bitcointalk.org/index.php?topic=5470580.0
- https://www.ic3.gov/CSA/2025/250212.pdf
- https://blog.cloudflare.com/the-linux-kernel-key-retention-service-and-why-you-should-use-it-in-your-next-application/
- https://vulert.com/vuln-db/go-github-com-btcsuite-btcd-127768
- https://pkg.go.dev/vuln/GO-2024-3189
- https://github.com/demining/Deserialize-Signature-Vulnerability-in-Bitcoin-Network
- https://forklog.com/en/critical-vulnerability-found-in-bitcoin-wallet-chips/
- https://christian-rossow.de/publications/btcsteal-raid2018.pdf
- https://yourbasic.org/golang/copy-explained/
- https://dev.to/jlauinger/exploitation-exercise-with-unsafe-pointer-in-go-information-leak-part-1-1kga
- https://cispa.de/en/research/publications/68097-identifying-key-leakage-of-bitcoin-users
- https://www.reddit.com/r/Bitcoin/comments/1j24hh3/nonce_r_reuse_and_bitcoin_private_key_security_a/
- https://habr.com/ru/articles/817237/
- https://www.cvedetails.com/cve/CVE-2024-34478/
- https://github.com/advisories/GHSA-3jgf-r68h-xfqm
- https://www.qrypt.com/FAQ/what-are-the-quantum-threats-to-cold-storage-and-p2sh-or-p2pkh-in-crypto-wallets/
- https://www.kaspersky.com/blog/vulnerability-in-hot-cryptowallets-from-2011-2015/49943/
- https://trezor.io/learn/advanced/standards-proposals/pay-to-public-key-hash-p2pkh
- https://opsdesign.com/bitcoin-vulnerabilities-due-to-quantum-computing/
- https://archlending.com/blog/bitcoin-address-types
- https://en.bitcoin.it/wiki/Common_Vulnerabilities_and_Exposures
- https://komodoplatform.com/en/academy/p2sh-pay-to-script-hash/
- https://security.snyk.io/vuln/SNYK-GOLANG-GITHUBCOMBTCSUITEBTCDTXSCRIPT-6808763
- https://www.cve.org/CVERecord/SearchResults?query=bitcoin
- https://www.unchained.com/blog/bitcoin-address-types-compared
- https://pkg.go.dev/github.com/btcsuite/btcd/txscript
- https://www.reddit.com/r/crypto/comments/1ftnsuv/are_current_cryptography_methods_vulnerable_in/
- https://amlcrypto.io/en/blog/types-of-bitcoin-addresses
- https://www.cvedetails.com/cve/CVE-2024-38365/
- https://www.hackerone.com/blog/lessons-crypto-exploits
- https://www.npmjs.com/package/@kimafinance/btc-signer
- https://immunebytes.com/blog/signature-malleability-attacks-in-blockchain/
- https://github.com/bitcoin/bitcoin/issues/20178
- https://arxiv.org/pdf/2203.03054.pdf
- https://dl.acm.org/doi/10.1145/2976749.2978353
- https://www.sciencedirect.com/science/article/abs/pii/S0167739X17330030
- https://en.bitcoin.it/wiki/Script
- https://www.nccgroup.com/us/research-blog/a-brief-review-of-bitcoin-locking-scripts-and-ordinals/
- https://www.semanticscholar.org/paper/Identifying-Key-Leakage-of-Bitcoin-Users-Brengel-Rossow/32c3e3fc47eeff6c8aa93fad01b1b0aadad7e323
- https://bitcointalk.org/index.php?topic=977070.0
- https://arxiv.org/html/2504.13737v1
- https://www.thepolyglotdeveloper.com/2018/03/create-sign-bitcoin-transactions-golang/
- https://en.bitcoin.it/wiki/Weaknesses
- https://vulmon.com/searchpage?q=Bitcoin+Bitcoin&sortby=byactivity&scoretype=vmscore&page=9
- https://dev.to/_56d7718cea8fe00ec1610/why-bitcoin-wallets-validate-public-key-hashes-a-deep-dive-into-data-integrity-578k
- https://www.php.cn/faq/625595.html
- https://vulmon.com/searchpage?q=bitcoin+bitcoin+-&page=7
- https://postquantum.com/post-quantum/quantum-cryptocurrencies-bitcoin/
- https://pkg.go.dev/io
- https://www.fireblocks.com/blog/how-blockchains-will-evolve-for-the-quantum-era/
- https://www.youtube.com/watch?v=c7hLUsUE_Ao
- https://coinshares.com/it/insights/research-data/bitcoin-and-the-quantum-computing-risk/
- https://www.deloitte.com/nl/en/services/consulting-risk/perspectives/quantum-computers-and-the-bitcoin-blockchain.html
- https://www.youtube.com/watch?v=svgK9fNGTfg
- https://arxiv.org/html/2410.16965v1
- https://stackoverflow.com/questions/61325797/golang-copy-function-understanding
- https://www.reddit.com/r/crypto/comments/120uiop/does_publishing_a_public_key_lower_the_security/
- https://stackoverflow.com/questions/18559830/function-for-copying-arrays-in-go-language/18560025
- https://devblogs.microsoft.com/oldnewthing/20050107-00/?p=36773
- https://nvd.nist.gov/vuln/detail/cve-2024-38365
- https://www.sciencedirect.com/science/article/pii/S2666281724001203
- https://www.sciencedirect.com/science/article/pii/S2096720923000106
- https://bitcoincore.academy/consensus-bugs.html
- https://www.blackduck.com/blog/detect-prevent-and-mitigate-buffer-overflow-attacks.html
- https://www.reddit.com/r/Bitcoin/comments/1j24hh3/nonce_r_reuse_and_bitcoin_private_key_security_a/
- https://arxiv.org/html/2504.13737v1
- https://en.bitcoin.it/wiki/Common_Vulnerabilities_and_Exposures
- https://www.cve.org/CVERecord/SearchResults?query=bitcoin
- https://bitcoinops.org/en/topics/cve/
- https://forklog.com/en/critical-vulnerability-found-in-bitcoin-wallet-chips/
- https://royalsocietypublishing.org/doi/10.1098/rsos.180410
- https://nvd.nist.gov/vuln/search/results?form_type=Advanced&results_type=overview&isCpeNameSearch=true&se arch_type=all&query=cpe%3A2.3%3Aa%3Abitcoin%3Abitcoin_core%3A24.0%3A-%3A%2A%3A%2A%3A%2A%3A%2A%3A%2A%3A%2A
- https://onlinelibrary.wiley.com/doi/10.1155/2021/6643763
- https://www.first.org/cvss/v4-0/examples
- https://bitcoincore.org/en/security-advisories/
- https://cwe.mitre.org/data/definitions/284.html
- https://www.cve.org/CVERecord/SearchResults?query=blockchain
- https://pmc.ncbi.nlm.nih.gov/articles/PMC12394450/
- https://www.cvedetails.com/vulnerability-list/vendor_id-2044/product_id-100715/version_id-1209695/Matrix-Javascript-Sdk-12.1.0.html
- https://github.com/advisories/GHSA-xwcq-pm8m-c4vf
- https://arxiv.org/pdf/2503.22156.pdf
- https://www.nature.com/articles/s41597-025-04684-8