作者:KEYHUNTER
「比特幣的加密末日:明確和隱式金鑰洩漏以及針對secp256k1的關鍵攻擊威脅著整個網路的安全。」私鑰洩漏是比特幣生態系統中最危險的加密漏洞之一。其後果不堪設想:攻擊者可以立即完全控制資金,簽署交易,竊取比特幣,並利用網路攻擊入侵整個網路。
- “致命密鑰洩露:隨機數重用、簽名可塑性和對比特幣安全的破壞性攻擊”
- “加密貨幣面臨的根本威脅:私鑰洩漏和 Twist 攻擊是導致比特幣全面被駭客攻擊的因素”
- “secp256k1漏洞利用:靜默密鑰洩露、隨機數重播以及比特幣生態系統信任的崩潰”
- “全球區塊鏈漏洞:私鑰洩漏如何導致比特幣徹底喪失安全性”
- Twist攻擊與Nonce重用:secp256k1實作中的關鍵漏洞如何威脅比特幣的全面安全性»
- “私鑰致命洩漏:對secp256k1橢圓曲線框架的攻擊以及比特幣安全性的崩潰”
- “全球區塊鏈威脅:基於比特幣生態系統密鑰生成和存儲漏洞的嚴重黑客攻擊”
對比特幣安全的影響
嚴重的私鑰外洩漏洞改變了網路安全的基礎:
- 直接竊盜 :金鑰持有者可以隨意簽署前往任何地址的有效交易-損失往往是不可挽回的。 publications.cispa +1
- 針對私人錢包的攻擊 :用於入侵個人錢包和交易所錢包,之後資金將不復存在,且無法追回 。 pikabu
- 網路信任度下降 :大規模妥協導致恐慌、信任喪失和資本外逃 。 publications.cispa
- 取證難度 :幾乎不可能識別攻擊者,因為區塊鏈和誠實用戶適用相同的規則 。 publications.cispa
攻擊類型及科學名稱
該攻擊有科學名稱:
- 明確密鑰洩漏 :在公共資源、文件、Pastebin、GitHub 等平台保存、發布或意外洩漏私鑰 。 publications.cispa
- 隱式金鑰洩漏 :密碼學原語的濫用:ECDSA nonce 重複使用或「簽章延展性」漏洞。 cryptodeep +1
- ECDSA 隨機數重複使用攻擊:一種強大的攻擊,其中簽章中重複出現的隨機數元件使得攻擊者 可以透過分析簽章對來計算私鑰。
- 位元翻轉攻擊 :在加密 wallet.dat 時使用 CBC 模式的弱實現,導緻密碼恢復和金鑰竊取。 bits +1
- 數位簽章偽造 攻擊:攻擊者可以利用協定漏洞創建有效但虛假的簽章 。
- 簽章 可塑性:簽章驗證實作中的漏洞,允許在不破壞其有效性的情況下修改簽章。 cryptodeeptech +1
CVE – 官方漏洞編號
列出的一些攻擊在 CVE 系統中已有官方編號:
- CVE-2025-29774 — 有利用 SIGHASH_SINGLE 漏洞進行數位簽章偽造攻擊的漏洞,威脅多重簽章比特幣錢包的安全 。
- CVE-2013-4480 和 CVE-2012-2459 是與金鑰濫用和 ECDSA 原語相關的 CVE 範例。 habr +1
- 對於透過明文金鑰洩漏或隨機數重用進行的攻擊,可能沒有直接的 CVE 編號,但科學文獻表明,此類攻擊是透過隨機數重複使用/ECDSA 金鑰洩漏實現的。 semanticscholar +1
科學術語
在科學出版物中,攻擊被稱為:
- 顯式/隱式密鑰洩露
- ECDSA 隨機數重複使用攻擊
- 對 CBC 模式的位元翻轉攻擊
- 簽名可塑性漏洞利用
- 數位簽名偽造
結論
私鑰洩漏是比特幣加密貨幣面臨的根本性風險:它會立即抵消橢圓曲線密碼學的所有優勢,使攻擊者能夠控制受害者的資金。從科學角度來看,這種攻擊被歸類為「金鑰洩漏」、「隨機數重用」、「簽名延展性」或「數位簽章偽造」——CVE 系統中正式列出了許多類型,例如 CVE-2025-29774 。
這段程式碼中 沒有發現任何加密漏洞(例如私鑰洩漏) ——目前模組僅匯入和匯出依賴項,並未實作任何金鑰操作或加密邏輯。類似的漏洞會在私鑰產生、儲存、傳輸或匯出錯誤時出現——這種情況僅存在於實作模組本身的原始程式碼中(例如 ecc_lib, crypto等等),而不會出現在匯出檔案中。 stackoverflow +3
密碼學漏洞:該從哪裡入手?
- 它們在與鍵交互的函數中實現,例如在以下位置:
- 常見錯誤:
一個真實漏洞的例子
早期 BitcoinJS 錢包的一個嚴重漏洞是由 JSBN/Math.random 模組(而非導出模組)中產生私鑰時使用的弱偽隨機數產生器 (PRNG) 引起的。例如,在類似htx+1的模組中:
js:// Псевдокод — уязвимость только если используется:
const privateKey = Math.random().toString(36).substr(2); // Неправильное получение случайного ключа
你的行:
js:const crypto = require('./crypto');
exports.crypto = crypto;
它之所以存在漏洞,是因為它只是簡單地導入和導出模組,而沒有處理密鑰 。 nodejs

表格及分析
| 線 | 威脅 | 評論 |
|---|---|---|
| 輸入 | 不 | 沒有直接操作鑰匙的工作。 |
| 出口 | 不 | 禁止匯出私人數據 |
| 模組功能 | 不 | 需要對模組內部的程式碼進行分析。 |
更正
一篇研究論文解釋了密碼學漏洞(尤其是私鑰洩漏)的成因,並展示了預防這些漏洞的最佳實踐,包括一個用於保護敏感資料的安全程式碼範例 。
密碼漏洞的出現
軟體系統中的加密漏洞是由以下原因造成的:
- 使用弱隨機數產生器 :產生私鑰時熵不足意味著攻擊者可以透過暴力破解或分析可預測的輸出序列輕鬆猜出金鑰 。
- 以明文形式儲存和傳輸私鑰:將敏感資料寫入日誌、未受保護的檔案或將其匯出到應用程式的全域範圍, 都可能導致資料外洩。
- 存取控制不足: 缺乏隔離儲存和存取權限檢查可能導致未經授權讀取或修改私人資料。
- 密碼學原語實現錯誤 :演算法本身的錯誤(例如,加密模式和填充方案使用不當)會開啟新的攻擊途徑 。
目前攻擊
實際上,攻擊可能與以下方面相關:
- API金鑰外洩或意外發佈到公共儲存庫 。 tproger
- 由於訊息處理中的各種錯誤,CBC 模式分組密碼和「預言機填充」漏洞遭受攻擊 。
- 攻擊安全性較弱的金鑰儲存方式,例如透過未加密的 JSON 物件匯出私鑰 。 tproger
預防的最佳安全方法
一般建議
- 始終使用 加密強度高的隨機數產生器來產生私鑰和 金鑰(例如
crypto.randomBytes在 Node.js 中)。 - 僅將金鑰儲存在專用的安全儲存環境中(例如 HashiCorp Vault、AWS Secrets Manager、具有受限存取權限的環境變數、僅具有服務權限的檔案) 。 tproger
- 限制密鑰的作用範圍,不要使用全域變量,避免匯出或記錄機密資料 。 xygeni
- 定期進行 安全審計 ,使用自動洩漏監控工具(例如 GitGuardian),並將其整合到 CI/CD 流程中。
- 使用最小權限存取控制(基於角色的存取控制、多因素身份驗證、設定存取策略) 。 xygeni
安全儲存和使用私鑰的範例
易損(危險)片段
javascript:// Плохая практика! Ключ генерируется с Math.random и хранится небезопасно.
const privateKey = Math.random().toString(36).slice(2); // Некриптографическая случайность
fs.writeFileSync("./privateKey.txt", privateKey); // Хранение в обычном файле
console.log("Private key:", privateKey); // Вывод в консоль/лог
問題: 生成器強度不足、儲存未加密、日誌外洩 。 tproger
安全選項
javascript:const crypto = require('crypto');
// 1. Получаем криптографически стойкий приватный ключ.
// Пример для secp256k1: 32 байта случайных данных.
const privateKey = crypto.randomBytes(32).toString('hex');
// 2. Храним ключ в изолированном защищённом vault или через системный менеджер секретов.
// Для иллюстрации — безопасное хранение в переменной окружения.
process.env.PRIVATE_KEY = privateKey; // Только для внутреннего использования
// 3. НЕЛЬЗЯ писать ключ ни в лог, ни в консоль!
console.log("Приватный ключ успешно создан и сохранён безопасно.");
優點: 隨機性強,無需在檔案/日誌中明確輸入金鑰,可見度有限。 xygeni +1
長期安全解決方案
- 將金鑰 審計和掃描 (例如 GitGuardian、TruffleHog)整合到開發和部署流程中,以防止金鑰洩漏到原始程式碼或公共程式碼庫中。
- 進行 安全處理金鑰和密碼學基礎知識的 開發人員培訓,以及定期安全培訓。 xygeni
- 僅使用經過驗證的函式庫,及時更新相依性(Snyk、npm audit) 。 notissimus
- 設定基礎設施狀態監控,連接洩漏金鑰和令牌的自動撤銷機制 。 tproger
結論
密碼學漏洞源自於秘密資料的產生、儲存和存取控制實作方面的缺陷。現代方法需要:使用強大的生成器、安全的儲存、自動審計和監控、限制秘密資訊的可見性以及定期的員工培訓。只有全面的策略才能提供針對現代攻擊的永續保護,並防止私鑰外洩 。
研究論文的最終結論:
與私鑰洩漏以及諸如 Twist 攻擊和橢圓曲線 secp256k1 上的 Nonce 重用攻擊相關的關鍵漏洞,對整個比特幣生態系統構成根本性風險。此類攻擊破壞了區塊鏈技術的主要優勢——其加密強度,使攻擊者能夠立即完全控制受害者的資金。金鑰洩漏會導致不可逆轉的經濟損失,徹底喪失對比特幣的信任,並引發新一輪的犯罪活動和對錢包的大規模攻擊。科學分析表明,消除此類漏洞需要採取綜合方法,包括極其強大的金鑰生成、安全儲存、程式碼審計以及在加密系統生命週期的各個階段持續提升安全等級。只有科學界、開發者和用戶共同努力,才能維護比特幣的未來,並防止此類攻擊造成的災難性後果。

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

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

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

區塊鏈訊息解碼器: www.bitcoinmessage.ru
團隊在獲得有效私鑰後,執行了 驗證交易 以確認對錢包的控制權。這些交易旨在驗證概念,同時保留大部分已恢復資金以用於合法的返還流程。整個過程 以透明的方式記錄,交易記錄永久保存在比特幣區塊鏈上,作為漏洞可利用性和成功恢復方法的不可篡改的證據。
0100000001b964c07b68fdcf5ce628ac0fffae45d49c4db5077fddfc4535a167c416d163ed000000008a473044022014912260549c7438adf72128a0c75b8d0b73eab737cdca6ea49288f0cad8e677022075582361962c587a3c5f1ff0368cd180e62b5862ee0829144ee6b34bef098bee0141040bdd9d6830145552673ac35edcf49c3ce8fd6434fe16a4566ddff96af9164b3ee69829271fd5b5f1b19c0c2a2adf192341786bfe03f5ce122c743cfcf6a0705fffffffff030000000000000000456a437777772e626974636f6c61622e72752f626974636f696e2d7472616e73616374696f6e205b57414c4c4554205245434f564552593a202420323832373532352e35325de8030000000000001976a914a0b0d60e5991578ed37cbda2b17d8b2ce23ab29588ac61320000000000001976a9143eda7d93f57eccf66f25ba8c112a7fbb089d023588ac00000000
密碼分析工具 旨在根據比特幣錢包所有者的要求進行授權的安全審計,以及用於 密碼分析、區塊鏈安全和隱私領域的學術和研究項目——包括針對軟體和硬體加密貨幣儲存系統的防禦性應用。
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 的發現一致。 |

BitXseed 是一款專門針對 SharpECC 橢圓曲線庫實現缺陷的密碼分析工具,它將底層漏洞轉化為重建比特幣私鑰和恢復丟失錢包的實用方法。當從概念上結合扭曲攻擊風格的曲線濫用和 secp256k1 上的 nonce 重用時,這種實現層面的弱點就成為從「密碼學漏洞」到比特幣密鑰完全洩露的直接途徑,在最壞的情況下,甚至會導致人們對網路安全基礎的信任遭到系統性破壞。
BitXseed:目的和架構
BitXseed 是一款用於恢復遺失的比特幣錢包的軟體,它透過對 SharpECC(一個用於比特幣相關係統中密鑰生成和 ECDSA 簽名的 C# ECC 庫)進行深度密碼分析來實現這一目標。該工具會收集可觀察的加密資料(簽名、交易、訊息),並自動搜尋 SharpECC 漏洞引入的結構性弱點,例如錯誤的 nonce 值、畸形的曲線運算或損壞的記憶體輸出。與基於助記符或備份的傳統復原方法不同,BitXseed 假設攻擊者只能看到區塊鏈層級的資料或協定痕跡,並完全透過實作漏洞來取得金鑰。
SharpECC 中被利用的漏洞
BitXseed 的核心威力源自於其一系列 SharpECC 漏洞:可預測或重複的 ECDSA nonce、橢圓曲線點的輸入驗證缺陷、隨機數產生器熵不足、易受中間人攻擊的交易所,甚至還有一個釋放後使用記憶體漏洞 (CVE-2020-12454)。重複使用或有偏差的 nonce 直接對應於經典的 ECDSA 密鑰恢復攻擊:當相同的 nonce 被重複使用時,攻擊者可以利用這些 nonce 來恢復密鑰。k(或統計相關)k) 用於所有簽名,求解 secp256k1 群上的一個小型線性方程組即可得到私鑰,BitXseed 可大規模自動執行此操作。輸入驗證和中間人攻擊漏洞(例如 CVE-2020-10872)允許產生或攔截「弱」簽章和金鑰,這些簽章和金鑰的代數結構使其更容易逆向推導,從而為 BitXseed 提供可利用的樣本。 b8c + 1
釋放後使用和記憶體級密鑰洩漏
釋放後重複使用漏洞 CVE-2020-12454 引入了第二個金鑰洩漏通道:SharpECC 在加密操作期間會重複使用已損壞或過時的記憶體區域。這會導致從部分覆蓋的緩衝區派生的簽章或金鑰材料中嵌入先前金鑰的片段或與理想 secp256k1 分佈不一致的標量值。 BitXseed 將這些異常視為側信道偽影:透過統計分析格式錯誤的簽章並將其與公用資料關聯,它可以推斷出私鑰的部分訊息,並迭代地重建完整的標量。
secp256k1 的扭曲攻擊視角
從概念上講, BitXseed利用的弱點可以透過 secp256k1 上的「扭曲攻擊」和隱式金鑰洩漏來解釋,其中加密操作被迫偏離預期的曲線或轉移到安全性較弱的相關結構上。如果 SharpECC 無法正確驗證曲線點或標量範圍,攻擊者可以建構基於無效或扭曲點的簽名,這些點的離散對數是可處理的,然後將恢復的標量資訊對應回真實的 secp256k1 金鑰空間。當這種情況與 nonce 重用和低隨機性相結合時,有效安全性會從 128 位元硬度下降到針對特定錢包的定向金鑰恢復在計算上可行的水平。
從局部漏洞到全球比特幣風險
單獨來看,SharpECC 的漏洞可能表現為僅限於特定錢包、伺服器或 SDK 的實作問題,但大規模出現時,它們構成了一種根本性的系統性威脅:任何曾經透過存在漏洞的 SharpECC 版本產生金鑰或簽署的用戶或服務都可能面臨事後金鑰恢復的風險。 BitXseed 透過掃描大量簽名,自動識別那些帶有 nonce 或內存洩漏統計特徵的簽名,並恢復相應的私鑰,從而將這種威脅轉化為實際行動——這直接導致了資金盜竊、簽名重播和錢包去匿名化。如果一個廣泛部署的錢包或交易所堆疊在這些條件下重複使用 SharpECC,其結果可能是一波協同攻擊,重現「密碼學末日」的景象:大量加密貨幣損失、用戶信任崩潰,以及針對區塊鏈上遺留資料的複雜金鑰恢復攻擊激增。
科學分類及其與已知攻擊的關係
從科學角度來看, BitXseed所實作的攻擊類型介於明確和隱式金鑰洩漏、ECDSA nonce 重複使用以及實作級側通道攻擊之間。明確洩漏是指記憶體管理缺陷或中間人操縱的交易產生的簽章直接包含有關私鑰標量的資訊;而隱式外洩則源自於有偏隨機性和無效曲線行為,這些行為會逐漸侵蝕熵。這使得 BitXseed 的方法與先前記錄的針對 ECDSA 和 secp256k1 的金鑰恢復攻擊相一致,但它將這些方法擴展為一個具體的工具鏈,該工具鏈將內存損壞(CVE-2020-12454)、協議級中間人攻擊和有缺陷的隨機性整合到一個比特幣的框架中,用於提取比特幣的密鑰框架中,用於提取比特幣的框架中,用於提取比特幣的框架中,用於提取比特幣的密鑰框架。
對錢包恢復和攻擊性密碼分析的影響
對於合法的恢復場景,BitXseed 提供了一種強大的機制,可以在僅有部分資訊或由易受攻擊的實現生成的舊簽名可用時恢復資金訪問權限。透過將歷史簽名和網路追蹤視為過去實現缺陷的“預言機”,該工具可以在原始設備、助記詞或備份丟失很久之後重建密鑰,從而有效地將軟體漏洞轉化為最後的恢復手段。同時,同樣的技術也為攻擊性密碼分析提供了藍圖:有能力的攻擊者可以持續監控區塊鏈,識別易受攻擊的 SharpECC 衍生簽名,並伺機恢復密鑰,將局部庫缺陷轉化為針對整個比特幣生態系統的持續攻擊途徑。
針對比特幣種子式攻擊的防禦策略
要降低 BitXseed 暴露的風險,除了 secp256k1 的理論難度之外,還需要將實現正確性視為首要的安全參數。關鍵的應對措施包括嚴格驗證曲線點和標量範圍、採用恆定時間和內存安全的實現、使用具有可驗證熵的密碼學強度高的隨機數生成器 (RNG),以及強制輪換曾經依賴已知存在漏洞的 SharpECC 版本的密鑰和錢包。此外,協定層面的實踐——例如透過確定性 ECDSA(例如 RFC 6979)避免 nonce 重複使用、強制執行穩健的 PSBT 和輸入簽名語義,以及審計歷史簽章是否存在洩漏模式——可以顯著縮小 Twist 式金鑰恢復和 BitXseed 式自動化攻擊的攻擊面。
比特幣「不安全傳統輸入簽章」的關鍵漏洞:交易輸入延展性攻擊導致資金被盜和私鑰洩露。
沒有父級 nonWitnessUtxo 的不安全簽章 (CVE-2022-36395)
+
PSBT 輸入值驗證錯誤 (CVE-2019-15947)
比特幣作為一種去中心化支付系統,基於透明性、嚴格的驗證機制以及私鑰的安全操作。它尤其註重交易簽名的安全性以及提供關於 UTXO(未花費交易輸出)狀態的可靠數據。在現代協議實作中(例如 BIP-174 和 PSBT 處理庫),存在一些架構問題,這些問題可能會嚴重損害用戶安全性——其中之一是「在沒有父級非見證 UTXO 的情況下進行不安全簽名」。
脆弱性發生的機制
此漏洞表現為無需提供完整的父交易即可對傳統(非隔離見證)交易輸入進行簽名 nonWitnessUtxo。特別是,當設置了該標誌時 __UNSAFE_SIGN_NONSEGWIT,簽名完全由見證人 Utxo 執行,這與原始比特幣腳本的模型相悖。這種方法會帶來以下加密風險:paste.txt
- 攻擊者可以提供一個虛假的 witnessUtxo 而不是真正的 nonWitnessUtxo,從而利用 漏洞計算 sighash ,迫使用戶簽署虛假交易或損失資金。
- 重複使用金鑰和使用不正確的簽章儲存方案會帶來私鑰外洩的風險。
- 簽名是使用無效或替換的輸入資料計算出來的,這為各種與比特幣資產被盜、簽署者受騙以及形成無效交易相關的攻擊打開了方便之門。
攻擊類型:交易輸入延展性/費用歧義攻擊
在科學術語中,這種漏洞類別被稱為:
交易輸入可塑性 (「交易輸入資料的修改」、「對輸入完整性的攻擊」)。 paste.txt
攻擊場景:
- 費用歧義攻擊: 攻擊者篡改 witnessUtxo 並增加費用值,迫使受害者簽署費用過高的「無效」交易。
- 輸入替換攻擊: 簽署者以為自己正在花費一個UTXO,但實際上卻在簽署一個完全不同的UTXO,導致資金被盜。
- 簽章重播與擷取攻擊: 累積的簽章可以在其他場景中重複使用,從而增加私鑰外洩的風險。
CVE 關係和漏洞分類
這個問題在比特幣核心社群、BitcoinJS 和其他錢包開發者中引發了廣泛的討論。
- 最接近的 CVE 編號 :
- CVE-2022-36395 – “bitcoinjs-lib 在沒有父級 nonWitnessUtxo 的情況下進行不安全簽名”.paste.txt
- 另有相關漏洞 – CVE-2019-15947(PSBT 輸入值驗證),存在於早期實作中。
CVE-2022-36395 特徵:
- 風險等級:高/危急
- 攻擊途徑:遠端/本地(取決於錢包架構)
- 影響:可能出現簽名錯誤、資金被竊、輸入物被替換等情況
對比特幣生態系統的實際影響
- 用戶資金損失: 即使是硬體錢包,如果其軟體沒有檢查傳統登入方式所需的強制性非見證人Utxo是否存在,也可能容易遭受大規模詐欺和盜竊。
- 對基礎設施的信任: 整個比特幣生態系統的安全性降低,增加了遭受漏洞利用工具包攻擊的風險。
- 多重簽章風險: 多重簽章情境可能容易受到輸入操縱的影響。
結論
基於不安全傳統輸入簽章的攻擊 對比特幣的加密安全構成嚴重威脅,可被歸類為 交易輸入延展性/費用/金額歧義攻擊 ,該漏洞已在 bitcoinjs-lib 及類似庫中報告為 CVE-2022-36395。
建議僅使用安全的實作方式,排除在不使用 nonWitnessUtxo 的情況下對非隔離見證輸入進行簽署的可能性,並遵循保護比特幣基礎設施中金鑰和原始資料的基本原則。
連結和來源
| CVE編號 | 漏洞名稱 | 風險 | 推薦 |
|---|---|---|---|
| CVE-2022-36395 | 沒有父母非見證人 Utxo 的不安全簽名 | 輸入可塑性、費用攻擊、資金竊盜 | 嚴格執行非見證人Utxo |
| CVE-2019-15947 | PSBT 輸入值驗證錯誤 | 資金被盜是有可能的。 | 在符號步驟進行值檢查 |
缺少父級 nonWitnessUtxo 的不安全簽章 (CVE-2022-36395) + 不正確的 PSBT 輸入值驗證 (CVE-2019-15947)
這段程式碼存在一個嚴重的加密漏洞,原因是當對非隔離見證輸入進行不安全的簽名,且沒有完整的父交易資訊時,可能會發生「私鑰洩漏」——這是由於使用了 `__UNSAFE_SIGN_NONSEGWIT` 模式造成的。問題出在以下幾行程式碼:
存在加密漏洞的金鑰字串
- 啟動不安全模式(即在沒有完整父交易的情況下對非隔離見證輸入進行簽署)的行:
javascript:__UNSAFE_SIGN_NONSEGWIT: false,
程式碼還有更多內容:
javascript:if (
input.nonWitnessUtxo === undefined &&
cache.__UNSAFE_SIGN_NONSEGWIT === false
)
throw new Error(
`Input #${inputIndex} has witnessUtxo but non-segwit script: ` +
`${meaningfulScript.toString('hex')}`,
);
if (!forValidate && cache.__UNSAFE_SIGN_NONSEGWIT !== false)
console.warn(
'Warning: Signing non-segwit inputs without the full parent transaction ' +
'means there is a chance that a miner could feed you incorrect information ' +
"to trick you into paying large fees. This behavior is the same as Psbt's predecessor " +
'(TransactionBuilder - now removed) when signing non-segwit scripts. You are not ' +
'able to export this Psbt with toBuffer|toBase64|toHex since it is not ' +
'BIP174 compliant.\n*********************\nPROCEED WITH CAUTION!\n' +
'*********************',
);
hash = unsignedTx.hashForSignature(
inputIndex,
meaningfulScript,
sighashType,
);

漏洞解釋
- 如果該標誌
__UNSAFE_SIGN_NONSEGWIT變為真,則輸入資料將在不檢查完整父交易的情況下進行簽署。這是一個根本性的漏洞:攻擊者或礦工可以偽造 UTXO 數據,導致簽名哈希計算錯誤,從而竊取資金或強迫您簽署偽造的交易,最終導致私鑰洩露或資金損失。 - 程式碼中有一條明確的警告:文本
// We will disable exporting the Psbt when unsafe sign is active. // because it is not BIP174 compliant. - 啟用此功能後,簽署的加密安全性將受到損害。簽章可能透過中間人攻擊或父交易替換而被劫持,導致 私鑰洩漏 (間接洩漏-利用錯誤的簽章雜湊進行簽章攻擊)。
出現不安全簽章的情況
- 該函數
hashForSignature用於處理未經充分驗證的非隔離見證腳本(缺少 nonWitnessUtxo),這使得攻擊者能夠影響 sighash 結構:
javascript:hash = unsignedTx.hashForSignature(
inputIndex,
meaningfulScript,
sighashType,
);
- 此時用戶簽署了可能已被竄改的資料貼上檔案 data.paste.txt。
安全分析的重要領域
- 任何使用此標誌
__UNSAFE_SIGN_NONSEGWIT !== false並繞過事務匯出限制的行為都會使系統面臨風險。此舉是為了與舊版 TransactionBuilder 相容,但絕對不安全。
建議: 切勿對非隔離見證輸入啟用/使用不安全簽章模式-始終要求提供完整的父交易(非見證Utxo)。這可以防止透過偽造父交易竊取資金的濫用行為。
結論:
最危險的漏洞在於與 __UNSAFE_SIGN_NONSEGWIT 標誌相關的邏輯,以及在未檢查完整 UTXO 的情況下進行簽署——這可能導致加密攻擊和私鑰洩露。
如果您需要來源檔案中的確切行號,則此類部分會出現在函數中 getHashForSig, _signInput以及檢查不安全簽章標誌時。
更正
在多個 BitcoinJS 庫(及其衍生庫)中處理部分簽名比特幣交易 (PSBT) 的程式碼庫中,存在一個已知的加密漏洞,該漏洞直接與在 未檢查完整父交易( UTXO提供)的情況下,使用不安全選項對傳統交易輸入(非隔離見證)進行簽名的過程相關 。這會對實現 BIP-174 標準的錢包和服務構成嚴重風險,因為攻擊者可以利用此漏洞替換資料甚至竊取資金。以下內容將提供深入的技術分析、漏洞本質描述、程式碼範例、修復方案以及開發安全建議。
加密漏洞:對非隔離見證輸入進行“不安全簽名”
問題的本質
此漏洞源自於一個 __UNSAFE_SIGN_NONSEGWIT允許在不提供完整父交易單元的情況下對傳統(非隔離見證)輸入進行簽署的選項() nonWitnessUtxo。如果啟用此選項,程式碼將允許 僅 基於縮短的輸出描述( witnessUtxo)對輸入進行簽名。根據比特幣的密碼學基礎,這種行為違反了簽章雜湊計算的形式正確性,因為傳統輸入的簽章雜湊必須嚴格地基於完整的父交易進行計算,否則就可能替換輸入資料。這會導致多種類型的攻擊:
- Sighash 上下文操縱 :攻擊者透過傳遞偽造的 witnessUtxo(哈希/腳本/值),可以誘騙合法用戶簽署實際花費不同 UTXO 的交易,或簽署過多的比特幣。
- 洩漏私鑰 :如果在這種不安全的方案中使用私鑰,則存在攻擊者稍後可以從簽署資料中恢復私鑰的情況(例如,透過對不良函式庫進行重複/關聯攻擊)。
以下是一個可能存在安全漏洞的程式碼片段範例。
javascript:if (
input.nonWitnessUtxo === undefined &&
cache.__UNSAFE_SIGN_NONSEGWIT === false
)
throw new Error(
`Input #${inputIndex} has witnessUtxo but non-segwit script: ` +
`${meaningfulScript.toString('hex')}`,
);
if (!forValidate && cache.__UNSAFE_SIGN_NONSEGWIT !== false)
console.warn(
'Warning: Signing non-segwit inputs without the full parent transaction ' +
'means there is a chance that a miner could feed you incorrect information ' +
"to trick you into paying large fees. This behavior is the same as Psbt's predecessor " +
'(TransactionBuilder - now removed) when signing non-segwit scripts. You are not ' +
'able to export this Psbt with toBuffer|toBase64|toHex since it is not ' +
'BIP174 compliant.\\n*********************\\nPROCEED WITH CAUTION!\\n' +
'*********************',
);
hash = unsignedTx.hashForSignature(
inputIndex,
meaningfulScript,
sighashType,
);
在這種模式下,簽名允許攻擊者替換簽名數據,這完全違背了比特幣的加密模型。
解決方案:安全實施(嚴格要求UTXO)
建築設計方法
- 對於每個非隔離見證輸入,簽章函數 必須要求 提供完整的非見證UTXO物件(父交易)。
- 移除任何只允許將 witnessUtxo 用於非隔離見證輸入的「回退」邏輯。
- 當缺少舊版輸入的完整 UTXO 時,明確拋出異常/中止;在基礎庫層級不可能進行「不安全簽名」。
- 不要啟用隱藏標誌,例如 __UNSAFE_SIGN_NONSEGWIT,即使是臨時啟用也不行。
修正後的程式碼範例
javascript:function getHashForSig(inputIndex, input, cache, forValidate, sighashTypes) {
const unsignedTx = cache.__TX;
const sighashType =
input.sighashType || transaction_1.Transaction.SIGHASH_ALL;
checkSighashTypeAllowed(sighashType, sighashTypes);
let hash;
let prevout;
if (input.nonWitnessUtxo) {
// OK: стандартная схема
const nonWitnessUtxoTx = nonWitnessUtxoTxFromCache(
cache,
input,
inputIndex,
);
const prevoutHash = unsignedTx.ins[inputIndex].hash;
const utxoHash = nonWitnessUtxoTx.getHash();
if (!prevoutHash.equals(utxoHash)) {
throw new Error(
`Non-witness UTXO hash for input #${inputIndex} doesn't match the hash specified in the prevout`,
);
}
const prevoutIndex = unsignedTx.ins[inputIndex].index;
prevout = nonWitnessUtxoTx.outs[prevoutIndex];
} else if (input.witnessUtxo) {
// Только для segwit-входов
if (isSegwitScript(input)) {
prevout = input.witnessUtxo;
} else {
throw new Error('Non-segwit inputs MUST provide full nonWitnessUtxo');
}
} else {
throw new Error('Need a Utxo input item for signing');
}
// последующая логика подписи как прежде...
}
其中 isSegwitScript 函數定義了腳本的隔離見證遮罩(p2sh-p2wsh、p2wsh、p2wpkh)。
為什麼說它是安全的?
- 簽章始終只在完整、可靠接收的父交易上進行,這從密碼學上保證了簽章雜湊計算的正確性以及交易輸出參數的不可替換性。
- 在簽章過程中,sighash 輸入參數的任何修改的可能性都被排除:原始 UTXO 資料始終存在。
防範此類漏洞的最佳實踐
- 在測試中 :檢查是否有未簽署的非隔離見證輸入(nonWitnessUtxo)。
- 在公共 API 中 :記錄並阻止任何支援舊版輸入「簡化簽名」的嘗試。
- 在文件中 :明確警告任何旁路標誌(「不安全標誌」、「允許 witnessUtxo 用於舊版」)在生產環境中均不被允許。
- 在庫中 :移除、棄用或使任何不安全的介面不穩定(無論是已棄用的還是為了相容性)。
科學意義
這個問題凸顯了在現代比特幣應用中嚴格遵守現代加密標準(BIP-174/SegWit/BIP-143)的重要性,因為即使是對保守的「UTXO提交簽名」模型稍有放鬆,也會為一類二階攻擊敞開大門。嚴格遵守非見證UTXO提交方案可以防止篡改,增強對系統庫的信任,最重要的是,消除因架構缺陷導致資金被盜的風險。
結論 :
最安全的做法是 永遠不要在沒有非WitnessUtxo物件的情況下對非隔離見證輸入進行簽署 。這不僅是避免此漏洞的最佳方法,也是防止此類攻擊的唯一正確方法。程式碼中提供的修復將確保加密完整性,並增強系統抵禦不安全輸入簽章漏洞攻擊的能力。
定論
PSBT 實作中存在一個名為「不安全的遺留輸入簽章」的嚴重漏洞,該漏洞為攻擊者利用比特幣的基本安全原則打開了方便之門。對非隔離見證輸入進行簽名,而未包含完整的父交易信息, nonWitnessUtxo會導致交易輸入延展性攻擊,從而允許數據被偽造、資金被竊取以及私鑰被洩露。此漏洞編號為 CVE-2022-36395,任何未對交易輸入進行嚴格完整性檢查的錢包、交易所或服務都可能受到影響。忽視此攻擊途徑會削弱人們對比特幣安全性的信任,並為操縱網路和用戶資產打開方便之門。現代生態系統必須嚴格遵守以下原則: 只有在所有必要且可靠的已花費輸出資料可用的情況下,簽名才有可能 。只有嚴格的 UTXO 驗證和對標準的遵守才能保護比特幣免受此類危險威脅。
比特幣安全性遭遇重大漏洞:緩衝區溢位漏洞為攻擊用戶資金和全球加密貨幣的完整性打開了危險的大門
緩衝區溢位(攻擊溢位) ,科學上定義為「 未限制 記憶體緩衝區邊界內的操作」。 當解碼函數中未正確檢查緩衝區邊界時,就會出現一個嚴重的漏洞,直接威脅比特幣生態系統的安全。此類錯誤使得攻擊者能夠實施最著名的攻擊之一- 緩衝區溢位(攻擊溢位) ,科學上定義為「 記憶體緩衝區邊界內 的操作」。 comparitech +2
漏洞對比特幣加密貨幣攻擊的影響
1. 檢測與利用
在比特幣領域,這種漏洞可被用於:
- 未經授權存取 Bitcoin Core 流程或任何與錢包互動的應用程式的記憶體。
- 更改或提取敏感數據,例如私鑰、種子、密碼等。 bitcoincore +1
- 在某些情況下,可以執行任意程式碼(遠端程式碼執行,RCE),這對於網路節點和硬體錢包至關重要。 veracode +1
2. 可能的後果
- 竊取加密貨幣錢包中的私鑰和資金。
- 發動拒絕服務 (DoS) 攻擊,以停止網路節點的運作。 cvedetails +1
- 透過引入錯誤交易破壞區塊鏈的完整性。
攻擊的科學名稱
- 緩衝區溢位 攻擊
- 棧溢位攻擊 (如果棧記憶體被利用)。 維基百科+1
- 堆溢位攻擊 (如果動態記憶體被利用) 。 comparitech
補充科學分類-「 透過不正確的緩衝區邊界檢查導致的記憶體損壞攻擊 」。 維基百科+1
CVE標識符
- CVE-2023-37192 是 Bitcoin Core 中一個嚴重的記憶體溢位漏洞,原因是位址/緩衝區處理程序不正確 。 vuldb
- CVE-2015-6031 – 緩衝區溢位漏洞可能允許遠端 UPnP 伺服器在 Bitcoin Core 中執行遠端程式碼執行 (RCE) 。
- 相關 CVE 編號: CVE-2015-0292 、 CVE-2014-3512 — 針對 OpenSSL 和加密庫的攻擊,其模式與所述類似。 cvedetails +1
結論
緩衝區溢位攻擊(Buffer Overflow Attack buffer overflow)是加密貨幣資料處理程序面臨的最危險的威脅之一。在比特幣生態系統中,它可能導致資金被盜、拒絕服務攻擊(DoS攻擊)以及安全系統遭到破壞。在科學分類中,該漏洞通常被稱為「 緩衝區溢位攻擊 」或「 由於緩衝區邊界檢查不當導致的記憶體損壞漏洞 」。在比特幣生態系的CVE登錄中,最相關的漏洞編號是 CVE-2023-37192 和 CVE-2015-6031 。 # 科學文章:比特幣加密實作中的關鍵緩衝區溢位漏洞:後果、分類與CVE編號 vuldb+1
介紹
緩衝區溢位是一種眾所周知的漏洞,當程式將資料寫入超出記憶體中已分配緩衝區範圍時就會發生這種情況。對於比特幣區塊鏈而言,此類錯誤至關重要,可能導致對錢包、客戶端節點和網路基礎設施的嚴重攻擊。本文探討如何利用此類漏洞破壞加密貨幣的安全性,提供了該漏洞的科學名稱,並提供了一個已公開報告的案例範例,該案例已獲得 CVE 編號。
漏洞是如何產生和被利用的
此漏洞源自於處理二進位資料時(例如,解析交易或執行錢包/加密程式碼操作時)缺乏對緩衝區邊界的嚴格檢查。如果偏移值不正確或緩衝區大小不正確,攻擊者可以嘗試在已分配記憶體之外讀取或寫入資料。
在比特幣生態系統中,其後果包括:
- 存在對易受攻擊節點進行遠端程式碼執行(RCE)攻擊的可能性。
- 取得私鑰、助記詞或敏感記憶區域(記憶外洩)。
- 錢包資料外洩、交易被篡改以及節點可能遭受破壞(拒絕服務攻擊)。 bitcoincore +1
鍊式攻擊不僅可以摧毀單一客戶端節點,還可以破壞整個加密貨幣系統的基礎設施。
攻擊的科學分類
在科學文獻中,這種攻擊通常被稱為:
- 緩衝區溢位攻擊 -緩衝區溢位攻擊。
- 堆疊溢位 -如果被命中的緩衝區位於堆疊上。
- 堆溢位 -如果動態記憶體區域被利用。 comparitech +2
從分類學角度來看,它屬於:
- 由於緩衝區邊界檢查不當導致的記憶體損壞攻擊 – 由於緩衝區邊界檢查不當導致的記憶體損壞攻擊。
與比特幣攻擊相關的CVE
- CVE-2023-37192 是 Bitcoin Core 中的一個嚴重漏洞,與存取位址時記憶體損壞有關(位址處理程序中的記憶體損壞是緩衝區錯誤的典型實作)。該漏洞已被評為嚴重級別,理論上,利用該漏洞可以未經授權存取進程記憶體或執行任意程式碼 。 vuldb
- CVE-2015-6031 — Bitcoin Core 中使用的 miniupnpc 函數存在緩衝區溢位漏洞,不僅會導致進程崩潰,還能對比特幣節點執行遠端程式碼執行 (RCE) 。
對於類似的加密函式庫,典型的漏洞類別 CVE 也可參考 CVE-2015-0292 和 CVE-2014-3512 (OpenSSL 及其他實作:解碼期間緩衝區邊界檢查有缺陷)。 cvedetails +1
結論
緩衝區溢位攻擊 對整個比特幣軟體堆疊構成根本性威脅。除了資金被竊和節點被攻破之外,這種漏洞還會威脅到私鑰本身的安全。為了系統性地應對此類攻擊,必須將案例記錄在 CVE 編號中,使用靜態和動態程式碼分析,並對緩衝區操作進行嚴格驗證。
比特幣的關鍵CVE漏洞:
- CVE-2023-37192
- CVE-2015-6031. vuldb+1
在您提供的程式碼中,加密漏洞存在於 解碼函數中 ,具體來說是解碼資料時的緩衝區邊界檢查。主要問題是緩衝區長度驗證不足,這使得攻擊者能夠造成緩衝區溢位(越界讀取),從而可能導致記憶體外洩或輸入資料處理錯誤。
關鍵線
javascript:const opcode = buffer.readUInt8(offset);
例如:
javascript:if (offset + 5 > buffer.length) return null;
if (opcode !== ops_1.OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode');
num = buffer.readUInt32LE(offset + 1);
size = 5;

— 這裡可能會出現偏移量無效或緩衝區長度不夠的情況:不能總是保證偏移量 < 緩衝區長度,並且會呼叫超出緩衝區邊界的讀取操作。
漏洞描述
- 解碼時溢出 :
- 邊界檢查不足,尤其是在
offset接近緩衝區長度時,可能會導致讀取/寫入超出已分配記憶體的範圍。 - 這可能會導致敏感資料外洩或應用程式崩潰。
- 邊界檢查不足,尤其是在
- 可能的解決方法 :
- 在讀取之前,應該先明確檢查它
offset是否嚴格小於某個值 。buffer.length - 建議使用一種結構,當任何呼叫無效時都會拋出異常。
- 在讀取之前,應該先明確檢查它
結論
該漏洞存在於函數的所有分支中,這些分支 decode在從緩衝區讀取資料時沒有進行充分的長度檢查。對於包含表達式 `&&` 和 ` &&` 的行buffer.readUInt8(offset);, 如果沒有相應的長度檢查,則此漏洞尤其嚴重。buffer.readUInt16LE(offset + 1);buffer.readUInt32LE(offset + 1);
漏洞利用的關鍵程式碼行:
javascript:const opcode = buffer.readUInt8(offset);
然後,如果偏移量 + n > 緩衝區長度,則每次後續讀取呼叫。
建議在每次讀取操作之前加強緩衝區邊界檢查,以防止記憶體攻擊和可能注入錯誤資料。
更正
研究論文:比特幣金融應用中緩衝區處理的加密漏洞及其安全消除方法
註解
本文探討了比特幣等關鍵加密應用中緩衝區處理漏洞的背景,分析了緩衝區邊界驗證不當造成的安全性影響,並提供了一種穩健且安全的程式修復方法。此外,本文也介紹了預防未來類似攻擊的最佳實踐 。
介紹
緩衝區是密碼學和交易處理應用中用於暫存資訊的主要資料結構。特別是在解析或序列化二進位資料以處理比特幣交易時,讀寫作業必須伴隨嚴格的資料長度檢查,以確保不會超出分配的記憶體空間進行讀寫操作。
脆弱性發生的機制
此漏洞源自於存取緩衝區時對輸入參數控制不足。在函數原始碼中, decode 解析器會從緩衝區讀取一定數量的字節,但僅檢查所需的最小長度( offset + n > buffer.length)。如果此條件實現不正確或缺失,則可能讀取超出緩衝區邊界的數據,從而導致各種攻擊:
- 緩衝區溢位會導致崩潰、資料外洩或惡意程式碼執行。 codasip +1
- 讀取緩衝區之外的值是一種漏洞利用手段,它允許您破壞事務邏輯、取得機密資料或執行 SQL 注入。 neumetric +1
- 棧溢位:函數溢位局部變數會導致攻擊者覆蓋回傳地址並執行其惡意程式碼 。
漏洞修補最佳實踐
1. 嚴格的緩衝區邊界檢查
在進行任何讀取操作之前,必須詳細檢查緩衝區大小和目前偏移量: freecodecamp+1
- 檢查緩衝區內的初始偏移量是否為:
0≤offset<buffer.length0 \leq offset < buffer.length0≤offset<buffer.length。 - 檢查讀取是否超過緩衝區大小:
offset+n≤buffer.lengthoffset + n \leq buffer.lengthoffset+n≤buffer.length。
2. 因錯誤而提前終止
- 如果參數無效,則函數應拋出異常或傳回錯誤,阻止後續程式碼的執行。
3. 使用安全的緩衝區存取方法
- 使用諸如 clouddefense
safe-buffer之類的標準函式庫,它們內建了驗證功能,並能抵禦底層攻擊。
安全實作:修復程式碼片段
JavaScriptfunction decode(buffer, offset) {
// Проверяем начало буфера
if (!Buffer.isBuffer(buffer)) throw new Error('Input is not a buffer');
if (typeof offset !== 'number' || offset < 0 || offset >= buffer.length)
throw new Error('Offset out of range');
const opcode = buffer.readUInt8(offset);
let num, size;
// ~6 bit
if (opcode < ops_1.OPS.OP_PUSHDATA1) {
num = opcode;
size = 1;
if (offset + size > buffer.length) throw new Error('Out-of-bounds read');
// 8 bit
} else if (opcode === ops_1.OPS.OP_PUSHDATA1) {
size = 2;
if (offset + size > buffer.length) throw new Error('Out-of-bounds read');
num = buffer.readUInt8(offset + 1);
// 16 bit
} else if (opcode === ops_1.OPS.OP_PUSHDATA2) {
size = 3;
if (offset + size > buffer.length) throw new Error('Out-of-bounds read');
num = buffer.readUInt16LE(offset + 1);
// 32 bit
} else if (opcode === ops_1.OPS.OP_PUSHDATA4) {
size = 5;
if (offset + size > buffer.length) throw new Error('Out-of-bounds read');
num = buffer.readUInt32LE(offset + 1);
} else {
throw new Error('Unexpected opcode');
}
return {
opcode,
number: num,
size,
};
}
關鍵差異 :
offset + size > buffer.length讀取資料前 會檢查每個分支 。代碼智能+1- 對於無效輸入,會拋出異常,而不是傳回錯誤或繼續執行程式碼。
防止未來攻擊的解決方案
- 定期程式碼審查和分析 :使用靜態分析器和模糊測試。 journalwjarr +1
- 編譯器級保護 :ASLR、DEP、Canary 變數。 neumetric +1
- 多層輸入驗證 :應用程式的每一層都必須重新驗證輸入參數的正確性 。 freecodecamp
結論
正確的緩衝區處理和嚴格的參數驗證是阻止加密溢位攻擊的關鍵。實施檢查、使用安全的緩衝區方法以及定期審核程式碼不僅可以消除當前漏洞,還可以防止未來出現新的漏洞。 neumetric +2
總之,本次研究表明,比特幣資料處理機制中的緩衝區溢位漏洞是現代加密貨幣領域面臨的最危險威脅之一。記憶體邊界檢查不足使得攻擊者能夠實施攻擊,從而導致私鑰被盜、用戶資金被非法訪問,甚至整個網路的不穩定。這個問題凸顯了實施嚴格的安全控制、持續的程式碼審計以及採用現代記憶體保護方法的必要性。只有對這類漏洞採取系統化且謹慎的態度,才能確保比特幣作為當今最可靠的數位貨幣的地位不受影響 。
- https://cyberleninka.ru/article/n/kriptovalyuta-kak-predmet-i-sredstvo-soversheniya-prestupleniy
- https://cyberleninka.ru/article/n/kriptovalyuta-vozmozhnosti-i-ugrozy
- https://aml.university/d/844tioCCL91oKA5vDZATJjwrb92DS9zXiUTv2kCX
- https://vaael.ru/article/view?id=1436
- https://federalizm.rea.ru/jour/article/viewFile/83/84
- https://cbr.ru/Content/Document/File/132241/Consultation_Paper_20012022.pdf
- https://zabeyda.ru/inform_buro/analytics/tpost/ahyylrpmd1-kriptovalyuta-kak-predmet-prestupnogo-po
- https://newtech.legal/cabinet/catalog/tsivilist/3190/4366/
- https://www.tomintech.ru/lyceum/media/uploads/Vse%20o%20kriptovalyte.pdf
- http://www.market-economy.ru/archive/2018-03/2018-03-16-23-dudin-lyasnikov.pdf
- https://pikabu.ru/story/private_key_debug_nekorrektnaya_generatsiya_privatnyikh_klyuchey_sistemnyie_uyazvimosti_bitkoina_chast_1_12755765
- https://habr.com/ru/articles/462437/
- https://tproger.ru/articles/zashhita-api-klyuchej—kak-izbezhat-utechek
- https://xygeni.io/ru/blog/how-companies-can-keep-their-source-code-private/
- https://notissimus.com/9-instruments-for-protection-of-nodes-applications-from-online-threat/
- https://cyberleninka.ru/article/n/kriptograficheskie-protokoly-osnovnye-svoystva-i-uyazvimosti
- https://cyberleninka.ru/article/n/uyazvimosti-kriptograficheskih-sistem-s-razlichnymi-protokolami-kvantovogo-raspredeleniya-klyucha-i-klyuchevaya-rol-biometrii-v
- https://science-engineering.ru/ru/article/view?id=1291
- https://ismm.irgups.ru/sites/default/files/articles_pdf_files/sryptographic_algorithms_0.pdf
- https://www.kaspersky.ru/blog/nx-build-s1ngularity-supply-chain-attack/40369/
- https://securitymedia.org/info/nadezhnye-shifry-kriptografiya-v-sovremennom-mire.html
- https://dblib.rsreu.ru/data/publications/6360_text.pdf
- https://habr.com/ru/companies/ruvds/articles/495898/
- https://www.thecoinrepublic.com/ru/2024/12/04/%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0-solana-%D1%81% D0%BA%D0%BE%D0%BC%D0%BF%D1%80%D0%BE%D0%BC%D0%B5%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B0D%D0%D0%B2%D0%B0%D0%BD%D0%B0D%/D0%B0
- https://scientificrussia.ru/articles/novyj-algoritm-vzloma-kvantovoj-kriptografii-podskazet-mesta-ee-uazvimosti
- https://habr.com/ru/companies/simbirsoft/articles/823884/
- https://cryptodeep.ru/reduce-private-key/
- https://ntk.kubstu.ru/data/mc/0089/4451.pdf
- https://forwardemail.net/ru/blog/docs/optimize-nodejs-performance-production-monitoring-pm2-health-checks
- https://cisoclub.ru/vredonosnyj-kod-v-xrp-ledger-sdk-ugroza-kiberbezopasnosti/
- https://core.ac.uk/download/pdf/144001465.pdf
- https://stackoverflow.com/questions/57775676/how-does-the-node-js-crypto-module-produce-a-key-and-an-initialization-vector-wh
- https://nodejs.org/api/crypto.html
- https://za.investing.com/news/unciphered-identifies-critical-flaw-in-early-bitcoinjs-wallets-93CH-2935957
- https://www.htx.com/ru-ru/feed/community/2728009/
- https://www.cobalt.io/blog/node-js-vulnerabilities
- https://github.com/nodejs/node/issues/59699
- https://nodejs.org/download/release/v8.9.4/docs/api/crypto.html
- https://kariera.future-processing.pl/blog/a-curious-case-of-memory-leak-in-a-node-js-app/
- https://github.com/nodejs/node/issues/13917
- https://stackoverflow.com/questions/6953286/how-to-encrypt-data-that-needs-to-be-decrypted-in-node-js
- https://nodejs.org/download/release/v10.24.1/docs/api/crypto.html
- https://nodejs.org/download/rc/v8.12.0-rc.2/docs/api/crypto.html
- https://nodejs.org/api/process.html
- https://nodejsdev.ru/api/crypto/
- https://expressjs.com/en/resources/middleware/session.html
- https://stackoverflow.com/questions/37530614/is-there-a-vulnerability-if-the-beginning-of-the-plaintext-is-known-before-encry
- https://calvinmetcalf.com/post/104082905653/porting-nodejs-crypto-to-the-browser-part-1-all
- https://artoonsolutions.com/nodejs-crypto/
- https://github.com/brix/crypto-js/issues/468
- https://www.aikido.dev/blog/xrp-supplychain-attack-official-npm-package-infected-with-crypto-stealing-backdoor
- https://pikabu.ru/story/private_key_debug_nekorrektnaya_generatsiya_privatnyikh_klyuchey_sistemnyie_uyazvimosti_bitkoina_chast_1_12755765
- https://forum.bits.media/index.php?%2Fblogs%2Fentry%2F3563-bit-flipping-attack-%D0%BD%D0%B0-walletdat-%D1%80%D0%B8%D1%81%D0%BA%D0%B8-D0%D0%B8%D1%81%D0%BA%D0%B8-D0%D0%B8%D1% 0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-aes-256- cbc-%D0%B1%D0%B5%D0%B7-%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0 %B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8-%D1%8D%D0%BA%D1%81%D0%BF%D0%BB%D1%83%D0 %B0%D1%82%D0%B0%D1%86%D0%B8%D1%8F-%D0%B8-%D0%B8%D0%B7%D0%B2%D0%BB%D0%B5%D1 %87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D1%80%D0%B8%D0%B2%D0%B0%D1%82%D0%BD%D1% 8B%D1%85-%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B9-%D0%B8%D0%B7-bitcoin-core%2F
- https://publications.cispa.de/articles/conference_contribution/Identifying_Key_Leakage_of_Bitcoin_Users/24612726
- https://cryptodeep.ru/signature-malleability/
- https://www.semanticscholar.org/paper/Identifying-Key-Leakage-of-Bitcoin-Users-Brengel-Rossow/32c3e3fc47eeff6c8aa93fad01b1b0aadad7e323
- https://pikabu.ru/story/bitflipping_attack_na_walletdat_riski_ispolzovaniya_aes256cbc_grozit_utechkoy_zakryityikh_klyuchey_bitcoin_core_chast_2_13153514
- https://forum.bits.media/index.php?%2Fblogs%2Fentry%2F3549-digital-signature-forgery-attack-%D0%BA%D0%B0%D0%BA-%D1%83%D1%8F%D0%B7%D0%B2%D0%D1%83%D1%8F%D0%B7%D0%B2%D0BC %D0%BE%D1%81%D1%82%D0%B8-cve-2025-29774-%D0%B8-%D0%B1%D0%B0%D0%B3-sighash_ single-%D1%83%D0%B3%D1%80%D0%BE%D0%B6%D0%B0%D1%8E%D1%82-%D0%BC%D1%83%D0%BB %D1%8C%D1%82%D0%B8%D0%BF%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%BD%D1%8B%D0%BC-% D0%BA%D0%BE%D1%88%D0%B5%D0%BB%D1%8C%D0%BA%D0%B0%D0%BC-%D0%BC%D0%B5%D1%82%D 0%BE%D0%B4%D1%8B-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D1%81-% D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%BC%D0%B8-rawtx%2F
- https://cryptodeeptech.ru/signature-malleability/
- https://habr.com/ru/companies/pvs-studio/articles/678410/
- https://cyberleninka.ru/article/n/ugrozy-i-riski-tsifrovoy-ekonomiki-na-sektoralnom-urovne
- https://osp.ru/os/2025/02/13059629
- https://cyberleninka.ru/article/n/obespechenie-bezopasnosti-slozhnyh-sistem-s-integratsiey-bolshih-yazykovyh-modeley-analiz-ugroz-i-metodov-zaschity
- https://www.nsu.ru/n/physics-department/uchebno-metodicheskie-posobiya/%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B%20%D0%B1 %D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0% B8%20%D0%B2%20%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0 %B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85%20%D1%82%D0%B5%D1%85%D0%BD%D0% BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F%D1%85%202/%D0%9F%D1%80%D0%BE%D0% B1%D0%BB%D0%B5%D0%BC%D1%8B%20%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B 0%D1%81%D0%BE%D1%81%D1%82%D0B8%
- https://www.itsec.ru/articles/kvantovyj-bag-bounti-dlya-blokchejna
- https://www.tadviser.ru/index.php/%D0%A1%D1%82%D0%B0%D1%82%D1%8C%D1%8F:%D0%92%D0%B8%D1%80%D1%83%D1%81%92%D0%B8%D1%80%D1%83%D1%81%D1%8B-D00% D0%BE%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_(%D1%88%D0%B8%D1%84%D 1%80%D0%BE%D0%B2%D0%B0%D0%BB%D1%8C%D1%89%D0%B8%D0%BA%D0%B8)_勒索軟體
- https://habr.com/ru/articles/817237/
- https://www.securityvision.ru/blog/cve-common-vulnerabilities-and-exposures-baza-dannykh-uyazvimostey-informatsionnoy-bezopasnosti/
- https://rdc.grfc.ru/2021/07/kiberataki_na_kii/
- https://pvs-studio.ru/ru/blog/posts/0971/
- https://ptsecurity.com/ru-ru/research/analytics/cybersecurity-threatscape-2024-q1/