作者:KEYHUNTER
比特幣私鑰的關鍵漏洞會立即摧毀去中心化系統的基本信任模型:區塊鏈中資金的所有權完全取決於私鑰的持有者。一旦這個秘密洩露,攻擊者就能完全且不可逆轉地控制這些資金,導致大規模加密貨幣盜竊、信任崩潰、匯率暴跌,並最終動搖整個行業的穩定。
讓我們來看看主要要素:
- 將此漏洞描述為嚴重漏洞。
- 專注於私鑰和比特幣。
- 表示該攻擊的科學術語(“密鑰洩漏”)。
- 重點闡述了對整個加密貨幣生態系統造成的毀滅性後果(「鍊式災難效應」)。
研究論文:關鍵私鑰外洩漏洞對比特幣加密貨幣安全的影響
註解
本文探討了比特幣錢包和函式庫軟體實作中與私鑰未經授權洩漏相關的嚴重加密漏洞。文章描述了此類漏洞的實現方式、對比特幣生態系統和用戶的影響,並提供了相應的科學分類以及CWE和CVE編號。文章重點關注具體的攻擊場景和後果,並提出了消除和預防此類漏洞的實用建議。
脆弱性是如何產生的
經典的私鑰漏洞通常源自於處理機密資訊的應用程式和程式庫的程式碼錯誤。以下是一個危險字串的範例:
JavaScriptthrow new Error(`Cannot tweak tap internal key for input #${inputIndex}. Public key: ${
tapInternalKey && tapInternalKey.toString('hex')
}`);
在這個例子中,作為比特幣所有權基礎的金鑰的私密或敏感部分可能會最終出現在外部日誌或錯誤訊息中。這種處理方式可能導致私鑰出現在日誌、公開錯誤報告、記憶體轉儲中,或者如果日誌檔案遭到入侵,則可能被攻擊者讀取 。
發生原因:
- 私鑰或種子記錄錯誤。
- 私鑰的序列化和明文儲存。
- 對涉及關鍵材料的功能缺乏充分的驗證和存取控制。
攻擊的科學分類和科學術語
攻擊和漏洞的科學名稱
- 科學術語: 密鑰洩露,也稱為密鑰披露攻擊、私鑰暴露攻擊或密鑰恢復攻擊。 keyhunters +1
- 從軟體安全角度來看,該漏洞被稱為 資訊外洩 (CWE-200)、 加密金鑰外洩 (CWE-310)、 金鑰管理不當 (CWE-312)和 敏感資訊儲存不安全 (CWE-922) 。
最接近的標準化誤差項是:
- CWE-200 – 資訊洩露
- CWE-310 – 加密問題(例如金鑰儲存時未採取保護措施)
- CWE-322 – 無實體認證的金鑰交換
- CWE-922 – 敏感資訊儲存不安全
相關和已註冊的 CVE 範例
截至撰寫本文時,尚無專門針對 Taproot 實作中透過日誌記錄洩漏金鑰的特定 CVE,但最接近的 CVE 包括:
- CVE-2025-29774 — 比特幣中的數位簽章偽造攻擊,由於簽章驗證實作錯誤,攻擊者無需知道私鑰即可在 SIGHASH_SINGLE 中偽造簽章 。 keyhunters
- CVE-2018-17096 – Bitcoin Core 的隨機數產生器存在漏洞,允許私鑰補償。
- CVE-2020-XXXX — 與私鑰擷取相關的硬體模組中的漏洞。
- 類別: 不安全的金鑰管理 和 不正確的序列化 通常由次要的 CVE 或描述為沒有專用編號的 CWE 漏洞涵蓋。
該漏洞對比特幣的影響及攻擊後果
- 所有者的所有資金將立即被洩露 ——私鑰賦予了所有者對這些資金的完全控制權。任何獲得私鑰的人都可以立即轉移所有者的所有比特幣。
- 生態系統信任的破壞 -私鑰外洩會導致大規模盜竊,損害比特幣的形象和價格。 sciencedirect +1
- 對交易所和錢包的大規模攻擊 ——對熱門服務的成功攻擊會導致大量金鑰洩露、盜竊和訴訟。
- 簡化現代攻擊的組織方式 -攻擊者無需破解密碼學,只需取得目標軟體的日誌檔案或記憶體轉儲即可。 cryptodeeptools +1
攻擊實施的具體範例
- 攻擊者獲得了對應用程式日誌或錯誤報告服務的存取權限。
- 觸發一個事件,導致使用私鑰(透過特製的輸入)產生錯誤訊息。
- 從日誌中提取私鑰,之後便成為對應錢包的唯一所有者。
- 將資金不可逆轉地轉移到其指定地址。
正確修復(程式碼範例)
為防止:
JavaScript// БЫЛО (уязвимо):
if (!outputKey)
throw new Error(`Cannot tweak tap internal key for input #${inputIndex}. Public key: ${
tapInternalKey && tapInternalKey.toString('hex')
}`);
// СТАЛО (безопасно):
if (!outputKey)
throw new Error(`Cannot tweak taproot internal key for input #${inputIndex} (internal error).`);
關鍵原則:
- 絕不記錄敏感資料。
- 始終將密鑰處理封裝在可信任模組中。
- 在所有軟體層實施嚴格的密鑰隔離。
結論
金鑰洩漏(金鑰揭露)漏洞是比特幣生態系統面臨的最大安全威脅。密鑰處理中的一個關鍵錯誤可能導致用戶資金徹底且不可挽回地損失,並造成平台信任度的大幅下降。定期程式碼審計、採用安全的開發模式以及建立嚴格的安全平台是防止此類災難發生的唯一途徑。
Taproot 程式碼中的加密漏洞
在分析了Taproot實作提供的JavaScript程式碼後,我發現了 幾個 可能導致金鑰洩漏的嚴重加密漏洞:
主要漏洞
🔴 第 169 行 – 嚴重漏洞
javascript:tapInternalKey && tapInternalKey.toString('hex')
漏洞類型: 私鑰資訊外洩
嚴重程度: 高
問題: Taproot 的內部金鑰被轉換為字串並輸出到錯誤訊息中。這可能導緻密鑰材料洩漏到日誌、控制台或錯誤訊息中,從而構成嚴重的安全風險。 vulert +3

🟡 第 26 行 — 中度嚴重性漏洞
javascript:const toXOnly = pubKey => (pubKey.length === 32 ? pubKey : pubKey.slice(1, 33));
漏洞類型: 未經驗證處理關鍵材料
嚴重程度: 中等
問題: 該函數 toXOnly 在未對輸入資料進行適當驗證的情況下截斷了公鑰。未能檢查資料類型和密鑰結構可能導致處理錯誤,並可能洩露密鑰資訊。 security.snyk +1
🟠 第 64 行 – 潛在漏洞
javascript:return Buffer.concat([sig, sighashTypeByte]);
漏洞類型: 簽章可塑性
嚴重程度: 低
問題: 簽名拼接操作若不進行額外驗證,可能導致簽章可塑性攻擊,儘管在 Schnorr 簽章中,這種威脅並不嚴重。 reddit +2

安全分析
該程式碼是 Bitcoin Taproot 的一個實現,它使用 Schnorr 簽名 而非傳統的 ECDSA 簽章。然而,發現的漏洞可能會危及安全性: archway+1
- 透過錯誤訊息 洩露關鍵材料是GitLab 的一個經典漏洞。
- 加密操作前 輸入驗證不足 github+1
- 由於不同類型密鑰的處理時間不同,可能存在時間攻擊風險。
糾正建議
第 169 行:
- 刪除錯誤訊息中的關鍵材料輸出
- 使用通用訊息傳遞方式,不要洩露敏感數據
- 僅向安全審計系統記錄詳細信息
第 26 行:
- 增加嚴格的輸入參數驗證
- 檢查公鑰的結構和格式
- 實作安全的金鑰處理方法
這些漏洞在比特幣領域尤其危險,因為金鑰洩漏可能導致資金被盜。 christian -rossow+1

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

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

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

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

科學文章:BiToolkit及其在利用比特幣錢包恢復中的關鍵漏洞提取私鑰中的作用
本文對BiToolkit進行了全面分析,BiToolkit是一款專門用於透過加密金鑰來提取恢復比特幣錢包的軟體工具。文章重點分析了BiToolkit如何利用與私鑰洩漏相關的關鍵漏洞來恢復遺失或無法存取的比特幣錢包。文章詳細闡述了該工具包的核心功能、其針對的漏洞(特別是密鑰洩漏攻擊)的底層機制,以及對比特幣生態系統的潛在風險。此外,文章還討論了降低這些關鍵風險的實際應用建議和安全措施。
BiToolkit是比特幣安全研究和錢包恢復領域的重要工具之一。它利用先進的密碼學和取證技術,從存在漏洞的比特幣錢包中提取私鑰。該工具利用的關鍵漏洞是由於錢包軟體處理不當(例如不安全的日誌記錄、緩衝區溢位或未初始化的記憶體使用)導致私鑰洩漏。
由於比特幣的所有權和控制權完全取決於私鑰的持有,任何此類金鑰的洩漏都會對用戶和整個加密貨幣生態系統構成災難性威脅。 BiToolkit 利用已知的軟體漏洞來提取這些金鑰,用於錢包恢復,但這些金鑰也可能被用於取證恢復或惡意攻擊。
工具概要:BiToolkit
BiToolkit整合了多種針對比特幣 secp256k1 橢圓曲線密碼框架的加密攻擊向量和取證分析方法。該工具包包含以下功能:
- 掃描錢包檔案和區塊鏈數據,尋找殘留的密鑰碎片。
- 利用日誌漏洞或序列化缺陷來存取私鑰材料。
- 分析部分簽名比特幣交易(PSBT)是否有關鍵金鑰外洩。
- 利用洩漏的資料塊重建私鑰,以恢復錢包存取權。
至關重要的是,BiToolkit 專門針對常用錢包實作中的漏洞,包括 CWE-310(加密金鑰洩漏)和 CWE-922(敏感資訊儲存不安全)等漏洞。它能夠適應比特幣 Taproot 升級的細微差別,以偵測可能洩漏私鑰的不安全記憶體分配和緩衝區溢位漏洞。
關鍵漏洞對比特幣金鑰安全的影響
BiToolkit 修復的漏洞透過以下方式洩漏私鑰:
- 金鑰洩漏(金鑰揭露攻擊):錯誤處理或日誌記錄不當,導致輸出敏感金鑰元件,使攻擊者或取證分析人員能夠從日誌或記憶體轉儲中取得私鑰。
- 緩衝區溢位和下溢:不安全的緩衝區處理可能導致記憶體洩露,敏感資料溢出到預期的緩衝區邊界之外。
- 未初始化的記憶體使用:在 JavaScript 環境中使用不安全的記憶體分配方法(例如 Buffer.allocUnsafe)會導致殘留的加密金鑰意外洩漏到區塊鏈腳本或錢包檔案中。
攻擊成功後,攻擊者將直接獲取受害者的私鑰,從而完全控制其比特幣資產。這從根本上破壞了比特幣的去中心化信任模型,並可能引發大規模盜竊、市場信心喪失和系統性動盪。
利用 BiToolkit 的漏洞利用機制
BiToolkit 透過以下方式實現檢測和提取過程的自動化:
- 解析錢包和交易數據,找出已知漏洞模式。
- 採用長度檢查和結構驗證繞過技術來處理格式錯誤或惡意輸入。
- 從序列化腳本或記憶體緩衝區中提取可能包含密鑰片段的多餘位元組。
- 利用密碼學驗證,將部分金鑰資料重新組合,以重建原始私鑰。
該工具包的模組化架構允許與審計管道和即時事件響應平台集成,從而服務於恢復專業人員和安全研究人員。
緩解和安全建議
為了應對 BiToolkit 功能所凸顯的風險,以下幾點至關重要:
- 錢包軟體中嚴格的輸入驗證和緩衝區長度檢查,以防止溢出。
- 避免不安全的記憶體分配做法;使用安全的零初始化函數。
- 禁止在錯誤訊息或公共日誌中記錄或公開私鑰資料。
- 定期進行安全性稽核、靜態程式碼分析和加密相依性更新。
- 將私鑰處理封裝在具有強大存取控制的安全模組中。
遵循這些最佳實踐可以大幅減少 BiToolkit 和類似工具探測到的攻擊面。
結論
BiToolkit展示了專業安全工具如何圍繞關鍵的私鑰洩漏漏洞展開,用於恢復遺失的比特幣錢包,但如果被濫用,也會造成嚴重的安全威脅。其分析揭示了軟體實現錯誤與區塊鏈安全完整性之間的深層關聯。必須優先考慮主動緩解策略和安全編碼範式,以防止私鑰遭到不可逆轉的洩露,並維護人們對比特幣去中心化模型的信心。
Taproot實作中的加密漏洞:原因及安全消除方法
註解
本文分析了在 JavaScript 中實現比特幣 Taproot 協定時出現的加密漏洞,並專注於私鑰洩漏的威脅。文章探討了不當的密鑰材料處理和無效的錯誤處理如何導致比特幣錢包所有者的秘密資訊洩露。文中提出了一個安全的金鑰處理架構,並提供了一個安全版本的程式碼,展示了可靠設計原則以防止此類攻擊。
介紹
Taproot 是比特幣協議的重大更新,旨在提升智慧合約的隱私性、效能和靈活性。隨著新型簽章(Schnorr)和腳本的引入,對金鑰材料在實作中的正確處理提出了更高的要求,尤其是在加密錢包生態系統中廣泛使用的開源 JavaScript 和 TypeScript 庫中,包括基於瀏覽器的應用程式和命令列工具。即使是處理秘密資料時出現的微小缺陷也可能導致災難性後果:如果私鑰洩漏即使一次,資金也將永久受損 。
脆弱性發生的機制
研究中復現的程式碼包含兩類常見錯誤:
- 在 JavaScript日誌或錯誤訊息 中輸出金鑰材料
if (!outputKey) throw new Error( `Cannot tweak tap internal key for input #${inputIndex}. Public key: ${ tapInternalKey && tapInternalKey.toString('hex') }`, );。金鑰的內部部分 (tapInternalKey) 會被序列化,並可能輸出到錯誤日誌或控制台。一旦被利用,攻擊者可以觸發錯誤,並透過監控日誌或其他管道竊取私密/敏感資訊。 vulert +3 - 未進行JavaScript 格式檢查 而錯誤處理公鑰
const toXOnly = pubKey => (pubKey.length === 32 ? pubKey : pubKey.slice(1, 33));。該函數在未驗證輸入資料的情況下錯誤地截斷了公鑰,如果使用非規範/修改過的金鑰,則可能導致處理錯誤或側通道攻擊。 moldstud +2
密碼學和操作風險
- 秘密資料外洩 :如果在日誌中發現私鑰或敏感金鑰,攻擊者可以透過存取應用程式日誌、CI/CD 管道或錯誤報告服務來提取這些金鑰。
- 金鑰材料驗證不足 :可能導致注入錯誤數據,這些數據可用於簽章可塑性攻擊,導致應用程式崩潰或為攻擊者提供側向資訊流。 codeant +2
- 側通道攻擊 :缺乏輸入規範化和驗證是運行時或基於異常的側通道攻擊的潛在途徑 。
安全實施的原則和模式
1. 絕對不要在日誌和異常(錯誤訊息)中輸出私鑰/金鑰。
- 只需告知存在錯誤即可,無需公佈關鍵細節。
2. 嚴格驗證輸入資料結構(包括公鑰)
- 檢查值的類型、大小(公鑰長度:X-only 為 32 字節,標準為 33 位元組)和有效性。
3. 帶有抽象訊息的回退與錯誤
- 訊息應簡潔明了,不應包含加密資料的技術細節。
4. 將關鍵操作封裝在單獨的受保護模組中,以消除人為因素。
5. 更新依賴項(JS 加密庫),僅使用經過測試和審核的加密原語實作。 github +2
漏洞修復的安全性範例
讓我們考慮如何安全地實現程式碼中的兩個關鍵區域:
javascript:// Безопасная функция вырезки X-Only публичного ключа
function toXOnlySafe(pubKey) {
if (!Buffer.isBuffer(pubKey)) throw new TypeError('Public key must be a buffer');
if (pubKey.length === 32) return pubKey; // X-only уже корректен
if (pubKey.length === 33 && (pubKey === 0x02 || pubKey === 0x03)) {
return pubKey.slice(1, 33);
}
throw new Error('Invalid public key format');
}
// Исправленный вывод ошибок БЕЗ leak-каналов
function tweakInternalPubKeySafe(inputIndex, input) {
const tapInternalKey = input.tapInternalKey;
try {
if (!tapInternalKey) throw new Error('No tap internal key');
// Пример: безопасная внутренняя обработка
const outputKey =
tapInternalKey &&
bip341.tweakKey(tapInternalKey, input.tapMerkleRoot);
if (!outputKey)
throw new Error(`Cannot tweak internal key for input #${inputIndex}`);
return outputKey.x;
} catch (err) {
// Логируем только техническое описание без ключей и hex-значений
throw new Error(`Failed to tweak internal key for input #${inputIndex}`);
}
}
說明:
- 嚴格比較公鑰的類型和大小。
- 異常不包含關鍵訊息,只有抽象訊息。
- 所有敏感處理過程均經過封裝和驗證。
防護措施建議
- 設定日誌審計和監控,但排除機密資訊。
- 使用 TypeScript 並強制執行嚴格的類型定義和資料大小驗證 。 moldstud
- 定期更新依賴項(npm 稽核),接受第三方對加密模組的稽核。
- 使用安全的金鑰儲存和金鑰管理工具,不要將金鑰儲存在環境變數或來源中。
結論
Taproot JavaScript 實作中私鑰外洩的主要途徑是日誌錯誤和資料驗證不足。為了確保安全,必須完全屏蔽所有用於傳輸金鑰資料的第三方通道,對輸入進行全面驗證,使用經過審計的乾淨庫,並且錯誤處理過程中不得在任何訊息、日誌或報告中洩露金鑰上下文。
定論
比特幣生態系統中一個關鍵的私鑰洩漏漏洞是加密貨幣安全領域最具破壞性和致命性的現象之一。這種漏洞——在科學上被定義為「密鑰洩漏攻擊」或「私鑰洩漏」——會立即摧毀去中心化系統的基本信任模型:區塊鏈上資金的所有權完全取決於對私鑰的了解。一旦這個金鑰洩露,攻擊者就能完全且不可逆轉地控制資金,導致大規模加密貨幣盜竊、信任崩潰、價格下跌,並最終動搖整個產業的穩定。一個有效的解決方案不僅需要消除日誌錯誤和金鑰序列化方面的疏忽,還需要持續實施嚴格保護的架構,以安全地儲存和處理金鑰材料。只有審計、對密鑰洩漏採取零容忍政策以及經過科學驗證的軟體實踐才能保護比特幣免受此類攻擊的災難性後果 。

這種錯誤可能導致部分秘密資料(例如私鑰、助記詞或其他加密資訊)直接洩露到全球公共區塊鏈上,這些資訊將永久存儲,任何攻擊者或網路研究人員都可以對其進行分析。因此,可能會引發類攻擊。
“未初始化記憶體洩漏”
(未初始化記憶體暴露)是一種極為罕見但對任何金融系統都極具破壞性的漏洞,任何記憶體初始化違規都可能立即導致資產完全受損。
在比特幣的背景下,此類事件的後果是災難性的:攻擊者如果獲得了一組剩餘字節,通常可以恢復部分甚至全部私鑰,並竊取其控制下的所有資金。
Buffer.allocUnsafe 中的一個關鍵漏洞如何影響對比特幣加密貨幣網路的攻擊
註解
本文探討了比特幣模組(特別是 Taproot)實作中與使用 Buffer.allocUnsafe 進行不安全記憶體分配相關的關鍵加密漏洞,分析了該漏洞對網路安全的影響,討論了可能的攻擊手段,並提供了此類威脅的科學術語。此外,本文也提供了與此類問題相關的 CVE(通用漏洞揭露)資訊(如有)。
漏洞描述
在 Node.js 中,函數 會在分配記憶體後不釋放,這會導致新緩衝區中可能存在先前使用過的秘密資料(Buffer.allocUnsafe(size) 私鑰、種子、隨機數和其他加密金鑰)。如果將這樣的緩衝區序列化並隨後放入區塊鏈,就會發生關鍵資料的失控外洩。
威脅是如何產生的?
當使用未初始化的緩衝區內容記憶體來序列化或產生公開資料時,就會出現此漏洞:
- 建立、簽署或傳送 Taproot 腳本時,未初始化的位元組可能會出現在序列化的腳本中。
- 資料會進入區塊鏈(例如,進入腳本欄位),在那裡永久存儲,任何參與者都可以存取。
- 攻擊者可以分析公共資料中微不足道/多餘的字節,提取剩餘的記憶體碎片。
對比特幣加密貨幣攻擊的影響
1. 密鑰和可恢復種子洩露
- 攻擊者如果發現洩漏的字節,就可以恢復私鑰,取得資金,並完全控制錢包。
2. 攻擊可擴展性
- 由於數據對整個網路公開,因此該攻擊具有全球性。
- 如果私鑰熵至少有一部分洩露,就可能出現「暴力縮小」攻擊:透過縮小狀態空間進行選擇。
3. 長期後果
- 洩漏的資訊會永久儲存在區塊鏈中,並可從任何完整節點存檔中恢復,使得這種洩漏不可逆轉。
攻擊類型(科學術語)
此類威脅被歸類為:
- 記憶體外洩攻擊 (「記憶體洩漏」)
- 未初始化記憶體 洩漏
- 側通道 攻擊,即分析主協定路徑之外的記憶體/位元組。 arxiv +2
科學文獻中使用了「殘留資料暴露」一詞,根據 CWE 的定義,它是 CWE-244:釋放前未清除堆的錯誤的一種變體 。 arxiv
CVE標識符
- CVE-2025-6545 — pbkdf2 中的漏洞,與加密操作期間返回未初始化記憶體有關(後果類似,但涉及不同的工具)。 github +1
- CVE-2018-12115 — Node.js Buffer API 中的越界寫入漏洞,不當使用緩衝區可能導致記憶體洩漏 。
- 雖然在加密貨幣和 Taproot 的背景下沒有針對 Buffer.allocUnsafe 的直接 CVE 註冊,但此類漏洞屬於「記憶體外洩/資訊外洩」的一般 CVE 類別。
可能的攻擊場景
- 使用者建立或簽署 Taproot 腳本,在此過程中使用 Buffer.allocUnsafe。
- 序列化腳本中包含了含有秘密片段的「額外」位元組。
- 腳本被寫入區塊鏈。
- 任何能夠解析序列化的網頁瀏覽器都可以分析非標準化的字節,並恢復部分或全部私鑰。
- 該地址的資金已全部遺失。
結果與建議
在加密過程中使用 `Buffer.allocUnsafe` 可能導致 未初始化記憶體(殘留)攻擊 、“記憶體洩漏攻擊”,或成為複雜側通道攻擊的一部分,進而引發全球攻擊。在加密貨幣領域,這是最災難性的錯誤之一,因為金鑰外洩會立即導致資產完全遺失。
對比特幣 Taproot 程式碼中的加密漏洞進行分析
第 118 行存在嚴重漏洞
最嚴重的漏洞位於第 118 行 :
javascript:const buffer = buffer_1.Buffer.allocUnsafe(varintLen); // better
漏洞描述
Buffer.allocUnsafe() 在函數中 使用 此函數serializeScript 會造成 嚴重的安全風險 。此函數會分配未初始化的內存,其中可能包含舊資料的殘留資訊,包括: deepsource+2
- 先前交易的私鑰
- 記憶片語
- 秘密隨機值
- 密碼和訪問令牌
- 其他機密數據

秘密資料外洩機制
- 未初始化記憶體 :
Buffer.allocUnsafe()不會將已分配的記憶體清除,而是 在其中留下之前 deepsource+1 操作的殘留資訊。 - 潛在風險 :如果緩衝區沒有被完全覆蓋,舊資料可能會出現在腳本序列化結果中。
- 網路傳輸 :序列化腳本可以傳輸到區塊鏈,導致秘密資料公開。
其他漏洞
第 105 行:橢圓曲線上的側通道攻擊
javascript:const res = (0, ecc_lib_1.getEccLib)().xOnlyPointAddTweak(pubKey, tweakHash);
橢圓曲線運算需遵循以下規則:
- 時序攻擊 -執行時間分析 people.scs.carleton+1
- 功耗分析攻擊 -功耗分析 rambus
- 電磁攻擊 -電磁輻射分析 arXiv

第 36、53 行:針對緩衝區比較的計時攻擊
javascript:if (kj.compare(ej) < 0) {
hashes.sort((a, b) => a.hash.compare(b.hash));
緩衝區比較函數可能會產生 時間側通道 ,使攻擊者能夠獲取有關被比較資料內容的資訊。 techtarget +1
第 93、104 行:參數驗證不足
javascript:function tapTweakHash(pubKey, h) {
const tweakHash = tapTweakHash(pubKey, h);
缺乏檢查可能會導致處理錯誤資料和加密功能出現不可預測的行為。
糾正建議
1. 將 Buffer.allocUnsafe 替換為 Buffer.alloc
javascript:// Вместо:
const buffer = buffer_1.Buffer.allocUnsafe(varintLen);
// Использовать:
const buffer = buffer_1.Buffer.alloc(varintLen);
2. 新增常量時間運算
使用能夠抵抗計時攻擊的加密安全比較函數。
3. 加強輸入資料驗證
在進行加密操作之前,請對所有輸入參數新增類型和大小檢查。
4. 防止側頻道攻擊
在處理橢圓曲線時,應採取保護措施來防止執行時間和功耗分析。
結論
最嚴重的漏洞位於第 118 行 , Buffer.allocUnsafe()它可以直接將私鑰和其他機密資訊洩漏到比特幣區塊鏈中。在 Taproot 環境下,這個漏洞尤其危險,因為公鑰已經在網路上公開,這進一步擴大了量子電腦的攻擊面。 reddit +5
更正
Bitcoin Taproot 中使用 Buffer.allocUnsafe 時存在的加密漏洞:分析、後果和建議
註解
本文探討了在Bitcoin Taproot的JavaScript模組中使用不安全的記憶體分配方式時導致的加密漏洞,以及潛在的後果(私鑰洩漏、敏感資料暴露以及錢包和交易遭受攻擊的可能性),並就如何修復和預防未來出現類似錯誤提出了建議。文中也提出了安全的實現方案,並附有詳細的解釋。
介紹
隨著比特幣引入 Taproot 協議,由於編寫複雜腳本和提升隱私性的能力增強,安全加密實現的重要性日益凸顯。然而,在實現新功能時,可能會出現底層錯誤,導致與私鑰和其他秘密相關的關鍵資料外洩 。
漏洞描述:Buffer.allocUnsafe
Node.js 中的函數 Buffer.allocUnsafe(size) 會分配一塊指定大小的記憶體區塊,但不會將其清除——分配的緩衝區可能包含先前使用過的記憶體區塊中的垃圾資料。當序列化資料以進行簽署或傳輸到網路時,這些殘留資料可能會被隱式地添加進去,從而導致以下後果: stackoverflow+1
- 當交易發佈時,私鑰或任意秘密資料可能會洩漏給用戶、攻擊者或公開到區塊鏈上。
- 側通道的出現,使得分析虛擬機器狀態(JIT、GC)成為可能 ,從而促進了側通道攻擊。
- 客戶端或伺服器端資料碎片化和不可預測的成長。
易受攻擊的源代碼範例
javascript:function serializeScript(s) {
const varintLen = bufferutils_1.varuint.encodingLength(s.length);
const buffer = buffer_1.Buffer.allocUnsafe(varintLen); // <--- Уязвимость
bufferutils_1.varuint.encode(s.length, buffer);
return buffer_1.Buffer.concat([buffer, s]);
}
漏洞究竟是如何產生的?
使用時 Buffer.allocUnsafe,分配給緩衝區的記憶體不會被清除。如果分配後緩衝區沒有完全填充,則產生的物件可能包含運行時環境先前使用過的資料片段(包括私鑰或其他秘密參數)。在 Bitcoin Taproot 的上下文中,我們指的是構成帳戶隱私和安全的關鍵變數。 github +1
當向網路或儲存傳輸或寫入此類緩衝區時,「垃圾」位元組可能會洩漏給第三方,或者在最壞的情況下,甚至會在區塊鏈網路本身中公開洩漏。
後果和實際攻擊場景
- taproot-scripts 中的原始資料分析 :如果腳本的記憶體分配不正確,擁有足夠資源的研究人員可以挖掘出私人資訊的片段。
- 重複使用攻擊(緩衝區重新分配) :使用後的緩衝區在未清除的情況下被分配給新對象,可以進行殘餘資料分析。
- 攻擊者控制的記憶體 :如果利用虛擬機器中的其他漏洞,就可以實現對已分配記憶體區塊的可預測性,從而簡化「堆噴射」等攻擊。
安全修復漏洞的方法
為防止上述攻擊,應僅使用安全的記憶體分配- Buffer.alloc將記憶體填入零,從而確保記憶體中不存在舊資料。
固定安全碼
javascript:function serializeScript(s) {
const varintLen = bufferutils_1.varuint.encodingLength(s.length);
// БЕЗОПАСНОЕ выделение памяти (все байты = 0)
const buffer = buffer_1.Buffer.alloc(varintLen);
bufferutils_1.varuint.encode(s.length, buffer);
return buffer_1.Buffer.concat([buffer, s]);
}
- 使用此方法
Buffer.alloc可確保新緩衝區不包含過去的值。 - 此外,在可能的情況下,您應該始終在使用後「擦除」包含敏感資料的變數(例如,用零覆蓋數組)。
為防止漏洞而採取的其他措施
- 靜態程式碼分析: 靜態分析器應自動偵測用例
Buffer.allocUnsafe並向開發人員發出警告。 - 程式碼審查: 加密模組必須由安全專家進行單獨審核。
- 單元測試和模糊測試: 自動化測試應驗證序列化的資料不包含無關資訊。
- 記憶體重複使用: 密鑰變數應實現為特殊結構,以避免被意外序列化或記錄。
- 恆定時間操作: 僅對秘密資料使用恆定時間比較操作,以避免側通道(計時)攻擊。 people.scs.carleton +2
結論
底層操作(序列化函數、記憶體分配)的加密安全性對於 Taproot 以及比特幣中其他協定改進的實作至關重要。使用不安全的記憶體分配函數 可能會導致私鑰和其他重要秘密資訊悄無聲息地洩露,而且後果不堪設想——不僅在客戶端,而且在整個區塊鏈網路中都會受到影響Buffer.allocUnsafe。強烈建議改用安全的函數 Buffer.alloc,並實施稽核、測試以及針對側通道攻擊的自動化防護。
文學
- Buffer.allocUnsafe:為什麼你應該避免使用它。 stackoverflow +1
- 側通道攻擊在密碼學中的應用:綜述與防禦。 arXiv +2
- 比特幣的常見漏洞和風險。
- Node.js 的最佳安全實務。 github +2
受保護版本的程式碼範例:
javascript:function serializeScript(s) {
const varintLen = bufferutils_1.varuint.encodingLength(s.length);
// Безопасное выделение памяти
const buffer = buffer_1.Buffer.alloc(varintLen); // замена unsafe
bufferutils_1.varuint.encode(s.length, buffer);
return buffer_1.Buffer.concat([buffer, s]);
}
最終科學結論
Taproot 實現中比特幣網路的一個嚴重漏洞與使用 Buffer.allocUnsafe 呼叫未初始化記憶體有關,該漏洞直接威脅到加密貨幣安全的根本——私鑰的隱私性和不可訪問性。此錯誤可能導致部分秘密資料(例如私鑰、助記詞或其他加密資訊)洩露到全球公共區塊鏈上,這些資訊將永久存儲,任何攻擊者或網路研究人員都可以對其進行分析。這可能導致「未初始化記憶體外洩」攻擊——雖然此類漏洞極為罕見,但對任何金融系統都具有極強的破壞性,任何記憶體初始化違規都可能立即導致資產完全被盜。
在比特幣領域,此類事件的後果不堪設想:攻擊者一旦獲取到剩餘位元組數組,往往就能恢復部分甚至全部私鑰,並竊取其控制下的所有資金。尤其嚴重的是,洩漏的資料在區塊鏈中不可逆且長期存在——這些秘密不會消失,洩漏的風險始終存在。這種威脅並非源自於演算法漏洞,而是源自於基本的記憶體錯誤,並且違反了密碼學的基本原則。
因此,對底層功能的粗心或不謹慎使用——無論是使用不安全的緩衝區函數、未初始化的內存還是不安全的序列化——都可能破壞所有為增強比特幣的隱私性、可擴展性和安全性而實施的高級機制。如果不嚴格遵守安全記憶體分配和垃圾回收的原則,真正的區塊鏈安全是不可能的:即使只有一個這樣的漏洞,也可能對整個生態系統和全球數百萬用戶造成災難性後果 。
利用緩衝區溢位進行金鑰提取 和 簽章偽造 - 公鑰處理中的緩衝區溢位:對比特幣安全性構成嚴重威脅,並可用於實作私鑰擷取攻擊
該程式碼缺陷為攻擊者實施最危險的攻擊之一——透過記憶體操控和利用輸入資料驗證漏洞獲取私鑰——打開了方便之門。此類攻擊的後果可能是災難性的:從用戶資金被盜、錢包被攻破,到主網路大規模崩潰、關鍵生態系統服務癱瘓,不一而足。
讓我們來看看這種漏洞類型(緩衝區溢位)、它對比特幣的重要性,以及私鑰和資金洩漏可能造成的災難性後果,這使得該問題對科學界和專業人士來說迫在眉睫。 bitcoincore +3
比特幣公鑰處理中的緩衝區溢位-攻擊的後果和科學分類
介紹
緩衝區溢位是處理關鍵資料(尤其是加密金鑰)的軟體系統中最危險的漏洞之一。在比特幣生態系統中,此類漏洞不僅會導致應用程式崩潰,還會導致私鑰洩漏、資金外洩、拒絕服務攻擊,甚至攻擊者遠端執行程式碼。 sciencedirect +4
關鍵漏洞:發生機制
在與 PSBT 和 Taproot 相關的範例程式碼中,從公鑰中提取 X 座標的操作沒有先檢查其長度:
JavaScriptconst pubkeyXOnly = pubkey.slice(1, 33); // Уязвимость
如果傳入的緩衝區小於 33 位元組,則會發生記憶體溢出,攻擊者可能會藉此取得無效金鑰或導致應用程式錯誤。最好的情況是,該錯誤會導致錢包停止工作;最糟糕的情況是,攻擊者可能會藉此存取內部資料、導致緩衝區溢位或替換金鑰結構。 bitcoincore +3
此次攻擊對比特幣加密貨幣的影響
由於公鑰處理不當導致的緩衝區溢位可能引發以下攻擊:
- 攔截私鑰 ——獲取私人數據,相當於從用戶錢包竊取資金。
- 簽名替換 -在驗證交易時注入虛假數位簽章的能力。
- 節點崩潰與漏洞(拒絕服務攻擊和遠端程式碼執行) ——此攻擊會導致比特幣節點崩潰或遠端執行錢包伺服器上的程式碼,從而斷開其與網路的連線。 ajrsp +3
- 大規模網路感染 -感染源可用於在網路中傳播惡意軟體,包括轉送受損交易。
攻擊的科學分類
正式名稱
在科技文獻中,這種攻擊被歸類為:
- 緩衝區溢位 攻擊
- 有時在密碼系統領域,會遇到諸如 透過緩衝區溢位提取金鑰 或 透過緩衝區溢位偽造簽章等攻擊。
CVE 和標準
在比特幣的歷史上,曾多次出現此類重大漏洞:
- CVE-2017-18350 — 緩衝區溢位漏洞,攻擊者可利用此漏洞透過 SOCKS 代理程式覆蓋程式堆疊。在 0.15.1 版本之前,漏洞被認為是 Bitcoin Core 最危險的漏洞之一。 bitcoin +2
- CVE-2015-20111 — 0.12 版本之前的 Bitcoin Core 中,miniupnp 的緩衝區溢位漏洞可能導致遠端程式碼執行和資料外洩。 bitcoincore +2
- CVE-2010-5139 – 輸出總和計算中的一個問題導致網路分叉,並可能產生數十億枚 比特 幣。
在科學出版物中的位置
緩衝區溢位在加密貨幣應用攻擊的科學技術分類中佔據主導地位(參見[參考文獻]),許多權威出版物都指出,緩衝區溢位是遠端入侵安全服務的主要漏洞類型。在密碼學領域,由於對客戶資金安全造成致命影響,針對金鑰緩衝區處理的攻擊被單獨列為研究領域。 orbit.dtu +3
意義和後果
緩衝區處理中的此類錯誤不僅會導致單一使用者的資金損失,還可能引發整個網路的大規模故障。一旦發現漏洞,開發人員必須立即更新相關元件,並將更新分發到整個比特幣網絡,以避免災難性後果。 nvd.nist +3
消除程序和預防
基於科學的解決方案包括:
- 在對輸入緩衝區進行操作前後,驗證輸入緩衝區的長度。
- 靜態分析的應用
- 定期審核原始碼
- 使用現代安全工具(DEP、ASLR、堆疊金絲雀等) utexas+1
結論
比特幣公鑰處理中的緩衝區溢位漏洞對整個加密貨幣生態系統構成根本性威脅。科學分類將此類攻擊定義為緩衝區溢位攻擊;比特幣中已為特定案例分配了多個 CVE 編號,包括 CVE-2017-18350 和 CVE-2015-20111。 可靠的保護始於基本的長度檢查,而維護安全性需要對錢包開發和運行的整個生命週期採取系統化的方法 。 nvd.nist +5
比特幣 PSBT 程式碼中的加密漏洞
提供的程式碼 中 存在一個嚴重的漏洞pubkeyPositionInScript,可能導致私鑰洩露,危及比特幣錢包的安全性。
主要漏洞
漏洞線:
javascript:const pubkeyXOnly = pubkey.slice(1, 33); // slice before calling?
問題描述
slice 這行程式碼在未檢查公鑰長度的情況下對其 執行操作 ,導致幾個嚴重的安全問題: certik+2

1. 緩衝區下溢/溢位漏洞
- 如果
pubkey長度小於 33 字節,則操作 可能會導致讀取的資料超出GitHub+2 緩衝區slice(1, 33)的末端。 - 無需驗證:
if (pubkey.length >= 33)在執行操作之前
2. 私鑰可能洩漏
- 在比特幣 Taproot 的背景下,壓縮公鑰處理不當可能導致polynonce+2 私鑰洩漏。
- 該操作
pubkeyXOnly用於從壓縮的公鑰中提取 x 座標,這對於 Taproot 位址 reddit+2至關重要。
3. 漏洞類型 CVE-2015-20111
- Bitcoin Core 和其他加密貨幣項目bitcoincore+2中也發現了類似的緩衝區溢位漏洞。
- 緩衝區處理不當可能導致遠端程式碼執行 bitcoincore+1
其他漏洞
中等嚴重程度:
javascript:const pubkeyHash = (0, crypto_1.hash160)(pubkey);
- 使用 hash160 而不進行額外檢查可能會導致哈希碰撞攻擊 halborn+1
低危險:
javascript:if (decompiled === null) throw new Error('Unknown script error');
- 透過錯誤訊息洩漏訊息,可以幫助攻擊者進行偵察 攻擊。
背景和影響
在以下情況下,這種漏洞尤其危險:
- PSBT(部分簽名比特幣交易) 是一種用於部分交易的標準化格式 。 learnmeabitcoin+2
- Taproot 技術 -公鑰的正確處理對安全至關重要 ibmm+2
- 多用戶錢包 -金鑰處理不當可能導致所有資金洩露 crowdfundinsider+1
更正
為了消除該漏洞,需要添加緩衝區長度檢查:
javascript:function pubkeyPositionInScript(pubkey, script) {
// Проверка длины публичного ключа
if (!pubkey || pubkey.length < 33) {
throw new Error('Invalid pubkey length');
}
const pubkeyHash = (0, crypto_1.hash160)(pubkey);
const pubkeyXOnly = pubkey.slice(1, 33); // Теперь безопасно
// ... остальной код
}
此漏洞屬於緩衝區 溢位/下溢 攻擊,攻擊者可利用此漏洞從比特幣錢包中提取私鑰,尤其是在處理 Taproot 地址和 PSBT 交易時。 keyhunters +3
更正
比特幣公鑰處理中的緩衝漏洞及安全性修復方案
介紹
現代加密貨幣系統(例如比特幣)對關鍵資料處理有著極高的安全需求,尤其是在處理基於 JavaScript 和 Node.js 的交易和錢包時。底層程式系統中常見的漏洞之一是 緩衝區溢位 。儘管有高級保護措施,但緩衝區大小驗證中的常見錯誤仍會導致各種攻擊和秘密資訊洩露,尤其是在篡改金鑰材料時 。
脆弱性發生的機制
讓我們來看一個用於處理 PSBT 和比特幣 Taproot 地址的庫中處理公鑰的程式碼範例:
javascript:const pubkeyXOnly = pubkey.slice(1, 33); // slice before calling?
上述程式碼從壓縮後的公鑰中提取 Taproot 位址的 X 座標。但是,它缺少對輸入緩衝區長度的基本檢查。如果變數 pubkey 長度小於 33 位元組,則呼叫 slice(1, 33) 將失敗:
- 讀取已分配緩衝區末尾之外的內容 可能會洩漏記憶體內容和敏感資料。
- 腳本產生不正確 ,在某些情況下,攻擊者可能會藉此替換錯誤的金鑰,或執行重播攻擊或簽章替換攻擊。
- 在某些 JavaScript 和 Node.js 環境中,此類錯誤會導致 TypeError,但在底層實作中,它可能導致記憶體到執行(「寫入什麼/哪裡」)漏洞。 journals.bilpubgroup +2
這個問題可能造成嚴重後果:私鑰或公鑰外洩、交易被篡改,甚至在某些情況下,執行任意程式碼 。
現代操作方法
在 Web3 開發和其他軟體生態系統中,針對緩衝區大小驗證不足的攻擊十分常見。如果對密鑰大小的控制不足,攻擊者可以:
在處理部分簽名比特幣交易 (PSBT) 和多重簽名錢包時,此類錯誤尤其危險。利用此類漏洞的行為已多次被提及,無論是在區塊鏈解決方案中,還是在其他使用電子簽名和加密處理的環境中。 trustwave +2
安全且正確地修復了該漏洞
安全緩衝處理的基本原則
- 強制輸入驗證 :在存取陣列/緩衝區元素之前,必須確保其長度足以進行安全操作。
- 顯性錯誤處理 :當懷疑出現異常時,優雅地拋出異常。
- 關鍵結構的大小是固定的 :僅支援已知和已驗證的金鑰格式。
安全性補丁範例
之前(易受攻擊的版本):
javascript:const pubkeyXOnly = pubkey.slice(1, 33); // УЯЗВИМОСТЬ!
(受保護版本)之後:
javascript:function toXOnlyPublicKey(pubkey) {
// Для Taproot требуется 33-байтный сжатый публичный ключ (0x02/0x03 + 32 байта)
if (!Buffer.isBuffer(pubkey) || pubkey.length !== 33) {
throw new Error('Invalid public key format: expected 33-byte compressed buffer');
}
// Дополнительно, убедимся, что первый байт - валидный префикс (0x02 или 0x03)
const prefix = pubkey;
if (prefix !== 0x02 && prefix !== 0x03) {
throw new Error('Invalid public key prefix for x-only extraction');
}
return pubkey.slice(1, 33); // Теперь безопасно!
}
範例控制項:
- 驗證長度和類型。
- 前綴有效性檢查。
- 正確傳回所需長度的子數組。 developer.mozilla +3
應用安全模式
所有涉及關鍵結構緩衝區的功能都應重複進行此類檢查,以徹底緩解與輸入資料處理錯誤相關的一類攻擊。理想情況下,應在 CI/CD 階段使用靜態分析和模糊測試 。
防止未來攻擊
- 使用單元測試 覆蓋所有邊界情況(null、過短和過長的鍵) 。
- 使用經批准的庫和第三方審核 。
- 定期更新依賴項 並實施自動化安全掃描。
- 對團隊進行密碼學和緩衝區安全基礎知識訓練 。
結論
在加密系統中處理金鑰材料時,緩衝區漏洞必然會導致資金損失和用戶身分外洩的風險。安全的密鑰處理始於基本的程式設計規格:檢查資料的大小和格式。即使是像上面例子中缺少長度檢查這樣的小錯誤,也可能是致命的。使用本文提供的策略可以完全消除此類錯誤,並顯著提高加密項目的整體安全性等級。 sciencedirect +3
總之,比特幣生態系統中公鑰處理過程中的緩衝區溢位漏洞並非只是技術錯誤,而是對整個加密貨幣基礎架構的系統性威脅。這種程式碼缺陷為攻擊者實施最危險的攻擊之一——透過記憶體操作和利用輸入資料驗證的缺失來獲取私鑰——打開了方便之門。此類攻擊的後果可能是災難性的:從用戶資金被盜、錢包被攻破,到主網大規模崩潰和關鍵生態系統服務癱瘓。只有實施全面的措施——嚴格檢查緩衝區邊界、靜態分析、獨立審計以及培養負責任的程式設計文化——才能在維護去中心化和數位安全基本原則的同時,保護比特幣及其用戶免受此類威脅 。
- https://publications.cispa.de/articles/conference_contribution/Identifying_Key_Leakage_of_Bitcoin_Users/24612726
- https://christian-rossow.de/publications/btcsteal-raid2018.pdf
- https://keyhunters.ru/attack-on-private-key-exposure-we-will-consider-exploiting-errors-that-allow-obtaining-a-private-key-this-is-a-very-dangerous-attack-on-bitcoin-wallets-through-is-a-very-dangerous-attack-on-bitcoin-wallets-through-an-opcode-numbering-coerror-n-bitcoin-n-bit-gough-an-opcode-numbering
- https://www.semanticscholar.org/paper/Identifying-Key-Leakage-of-Bitcoin-Users-Brengel-Rossow/32c3e3fc47eeff6c8aa93fad01b1b0aadad7e323
- https://www.diva-portal.org/smash/get/diva2:1742546/FULLTEXT01.pdf
- https://arxiv.org/html/2109.07634v3
- https://www.koreascience.kr/article/JAKO202011161035971.page
- https://core.ac.uk/download/pdf/301367593.pdf
文學
- KeyHunters.ru:「bitcoinlib 中私鑰和 RPC 身份驗證的關鍵漏洞」 keyhunters
- MoldStud:「保護 Web3 應用程式中 JavaScript 程式碼的最佳策略」 MoldStud
- CodeAnt.AI:「安全編碼最佳實踐:實用指南…」 codeant
- SecureFlag:「面向開發人員的頂級安全編碼最佳實踐」 secureflag
- bitcoinjs/bitcoinjs-lib:「一個用於 Node.js 的 JavaScript 比特幣函式庫…」 GitHub
- BlackDuck:「使用 JavaScript 進行安全編碼:最佳實踐指南」 blackduck
- Cure53:「Audit-Report micro-btc-signer TS Library 01.2023」 cure53
所有數位資產不僅要在協議層面受到保護,還要在每個軟體層的實現層面受到保護。 cure53 +3
- https://keyhunters.ru/critical-vulnerabilities-of-private-keys-and-rpc-authentication-in-bitcoinlib-analysis-of-security-risks-and-attack-methods-on-bitcoin-cryptocurrency/
- https://moldstud.com/articles/p-top-strategies-to-secure-your-javascript-code-in-web3-applications
- https://www.codeant.ai/blogs/secure-coding-best-practices
- https://vulert.com/vuln-db/npm-elliptic-182798
- https://github.com/golang/go/issues/54681
- https://www.invicti.com/web-vulnerability-scanner/vulnerabilities/sensitive-data-exposure-devise-secret-key/
- https://dev.to/rigalpatel001/preventing-weak-cryptography-in-javascript-395k
- https://security.snyk.io/vuln/SNYK-JS-ELLIPTIC-8720086
- https://blog.secureflag.com/2025/03/04/secure-coding-best-practices/
- https://www.blackduck.com/blog/javascript-security-best-practices.html
- http://www.scielo.org.mx/scielo.php?script=sci_arttext&pid=S1405-55462024000401879
- https://github.com/bitcoinjs/bitcoinjs-lib
- https://cure53.de/audit-report_micro-btc-signer.pdf
- https://www.sciencedirect.com/science/article/abs/pii/S1389128625004529
- https://www.jstage.jst.go.jp/article/transfun/advpub/0/advpub_2021EAP1048/_article/-char/en
- https://www.sciencedirect.com/science/article/abs/pii/S0920548923000430
- https://cordis.europa.eu/project/id/618094/reporting
- https://safeheron.com/blog/bitcoin-taproot-upgrade/
- https://www.reddit.com/r/btc/comments/qsypcp/p2sh_taproot_disadvantage/
- https://github.com/paulmillr/scure-btc-signer
- https://www.galaxy.com/insights/research/bitcoin-taproot
- https://www.clouddefense.ai/code/javascript/example/bitcoinjs-message
- https://www.wallarm.com/what/secure-coding
- https://dl.acm.org/doi/10.1145/3725846
- https://vulert.com/vuln-db/npm-elliptic-182798
- https://github.com/golang/go/issues/54681
- https://portswigger.net/daily-swig/dozens-of-cryptography-libraries-vulnerable-to-private-key-theft
- https://www.invicti.com/web-vulnerability-scanner/vulnerabilities/sensitive-data-exposure-devise-secret-key/
- https://security.snyk.io/vuln/SNYK-JS-ELLIPTIC-8720086
- https://www.reddit.com/r/Bitcoin/comments/6l6rmr/a_simple_explanation_on_schnorr_signatures_and/
- https://phemex.com/academy/taproot-and-schnorr-signatures
- https://rubin.io/bitcoin/2025/03/11/core-vuln-taproot-dos/
- https://archway.finance/blog/bitcoin-quantum-computing-taproot-security
- https://www.galaxy.com/insights/research/bitcoin-taproot
- https://docs.gitlab.com/user/application_security/dast/browser/checks/798.168/
- https://github.com/google/oss-fuzz/issues/8527
- https://dev.to/rigalpatel001/preventing-weak-cryptography-in-javascript-395k
- https://christian-rossow.de/publications/btcsteal-raid2018.pdf
- https://github.com/pcaversaccio/ecdsa-nonce-reuse-attack
- https://101blockchains.com/taproot-upgrade-improves-bitcoin-privacy-and-scalability/
- https://learnmeabitcoin.com/technical/upgrades/taproot/
- https://freicoin.substack.com/p/why-im-against-taproot
- https://hexn.io/blog/bitcoins-taproot-update-overview-217
- https://en.bitcoin.it/wiki/BIP_0341
- https://stackoverflow.com/questions/8795830/can-javascript-be-used-to-counter-ssl-tls-vulnerabilities
- https://academy.binance.com/en/articles/what-is-taproot-and-how-it-will-benefit-bitcoin
- https://jimmysong.substack.com/p/taproot-vs-security-threats-bitcoin
- https://github.com/cmdruid/tapscript
- https://www.antiersolutions.com/blogs/demystifying-bitcoin-taproot-upgrade-a-comprehensive-guide/
- https://edge.app/blog/market-updates/bitcoin-development-taproot/
- https://arxiv.org/abs/1806.06881
- https://www.reddit.com/r/Bitcoin/comments/11zy2un/is_it_best_practice_to_keep_the_public_key_secret/
- https://www.reddit.com/r/dogecoindev/comments/10xk4ie/taproot_has_put_bitcoin_in_dire_straights_and_why/
- https://www.investopedia.com/bitcoin-taproot-upgrade-5210039
- https://dl.acm.org/doi/10.1007/978-3-031-49099-6_22
- https://security.snyk.io/package/npm/@ledgerhq%2Fhw-transport-http/6.9.1-6.9.1-taproot.0.0
- https://www.bitstamp.net/en-gb/learn/blockchain/what-is-the-taproot-upgrade/
- https://stackoverflow.com/questions/78400828/crypto-js-pbkdf2-1-000-times-weaker-than-specified-in-1993-and-1-3m-times-weaker
- https://stackoverflow.com/questions/19665491/how-do-i-get-an-ecdsa-public-key-from-just-a-bitcoin-signature-sec1-4-1-6-k
- https://arxiv.org/html/2504.13737v1
- https://bitcointalk.org/index.php?topic=5500713.0
- https://www.ledger.com/th/blog/taproot-support
- https://moldstud.com/articles/p-essential-nodejs-security-audits-evaluating-your-data-encryption-practices
- https://stackoverflow.blog/2019/12/02/preventing-the-top-security-weaknesses-found-in-stack-overflow-code-snippets/
- https://www.reddit.com/r/privacy/comments/16gh0bn/if_private_keys_for_passkeys_never_leave_your/
- https://www.youtube.com/watch?v=pb5Cp3QNFis
- https://www.youtube.com/watch?v=6waz0xYxA00
- https://bitcoincore.reviews/17977
- https://blog.bitsrc.io/security-flaws-prevention-in-javascript-98b0c0af52dc?gi=2585378c74ba
- https://bitcoinops.org/en/preparing-for-taproot/
- https://docs.guardrails.io/docs/vulnerabilities/elixir/insecure_use_of_dangerous_function
- https://stackoverflow.com/questions/19516617/how-should-an-rsa-public-key-be-exposed-over-http
- https://security.snyk.io/vuln/SNYK-DOTNET-SYSTEMTEXTJSON-7433719
- https://issues.chromium.org/issues/375696474
- https://www.nodejs-security.com/blog/secure-code-review-tips-to-defend-against-vulnerable-nodejs-code
- https://www.zscaler.com/blogs/security-research/cross-site-scripting-xss-cross-site-request-forgery-csrf-sql-injection-html-injection-etc
- https://www.feistyduck.com/newsletter/issue_105_microsofts_compromised_private_key
- https://arxiv.org/html/2311.16396v2
- https://www.acunetix.com/vulnerabilities/web/rsa-private-key-detected/
文獻和標準
- KeyHunters.ru – “弱密鑰攻擊和密鑰洩露攻擊…” keyhunters
- KeyHunters.ru — “私鑰的關鍵漏洞…” keyhunters
- Cryptodeeptools.ru — “私鑰產生錯誤…” cryptodeeptools
- ScienceDirect:“針對加密貨幣交易所的網路攻擊…”
- CWE-200、CWE-310、CWE-312、CWE-922( https://cwe.mitre.org )
- CVE-2025-29774:數位簽章偽造攻擊 keyhunters
- https://keyhunters.ru/weak-key-attacks-secret-key-leakage-attack-critical-vulnerability-in-private-key-serialization-and-dangerous-signature-forgery-attack-a-threat-to-bitcoin-cryptocurrency-security/
- https://keyhunters.ru/critical-vulnerabilities-of-private-keys-and-rpc-authentication-in-bitcoinlib-analysis-of-security-risks-and-attack-methods-on-bitcoin-cryptocurrency/
- https://cryptodeeptools.ru/private-key-debug/
- https://keyhunters.ru/attack-on-private-key-exposure-we-will-consider-exploiting-errors-that-allow-obtaining-a-private-key-this-is-a-very-dangerous-attack-on-bitcoin-wallets-through-is-a-very-dangerous-attack-on-bitcoin-wallets-through-an-opcode-numbering-coerror-n-bitcoin-n-bit-gough-an-opcode-numbering
- https://www.sciencedirect.com/science/article/pii/S1057521925001802
- https://arxiv.org/abs/1804.08714
- https://www.sciencedirect.com/science/article/abs/pii/S2214212623001941
- https://arxiv.org/pdf/1810.11175.pdf
- https://www.semanticscholar.org/paper/How-Perfect-Offline-Wallets-Can-Still-Leak-Bitcoin-Verb%C3%BCcheln/02c637655f4a1f207ef2eabc034819c99b8ab0ac
- https://www.sciencedirect.com/topics/computer-science/cryptographic-attack
- https://en.wikipedia.org/wiki/Side-channel_attack
- https://en.wikipedia.org/wiki/Public-key_cryptography
- https://en.bitcoin.it/wiki/Common_Vulnerabilities_and_Exposures
- https://patents.google.com/patent/US6539092B1/en
- https://app.opencve.io/cve/?vendor=bitcoin&product=bitcoin&page=3
- https://arxiv.org/html/2503.12248v1
- https://pikabu.ru/story/private_key_debug_oshibki_v_vyichislenii_poryadka_yellipticheskoy_krivoy_secp256k1_ugrozyi_dlya_yekosistemyi_bitcoin_chast_2_12755792_12755792
- https://www.ndss-symposium.org/wp-content/uploads/2025-273-paper.pdf
- https://www.fireblocks.com/blog/lindell17-abort-vulnerability-technical-report/
- https://cve.mitre.org/cgi-bin/cvekey.cgi
該漏洞在比特幣 Taproot的背景下尤其危險, 原因如下:
- 內部金鑰 ( )是產生最終 Taproot bitcoinops 位址
tapInternalKey的基礎。 - 這次洩漏可能使攻擊者能夠恢復 christian-rossow+1 的 私鑰。
- 與普通比特幣地址不同,Taproot 使用 Schnorr 簽名 ,金鑰材料外洩的風險極高 。
該圖突顯了立即修復 以確保使用 Taproot 協議的比特幣錢包和交易安全的必要性 。
- https://forklog.com/exclusive/taproot-kak-ugroza-privatnosti-pochemu-kritikuyut-gryadushhee-obnovlenie-bitkoina
- https://habr.com/ru/articles/771980/
- https://forklog.com/news/razrabotchik-rasskazal-ob-ispravlennoj-uyazvimosti-bitcoin-core
- https://polynonce.ru/libbitcoin/
- https://habr.com/ru/articles/778200/
- https://blog.bitmex.com/ru_ru-taproot-demonstration/
- https://www.gate.com/ru/post/status/4129717
- https://academy.binance.com/ru/articles/what-is-taproot-and-how-it-will-benefit-bitcoin
- https://pikabu.ru/story/kak_uyazvimosti_cve202529774_i_bag_sighash_single_ugrozhayut_multipodpisnyim_koshelkam_seti_bitkoin_s_poddelnyimi_rawtx_chast_2_129995184999951
- https://www.youtube.com/watch?v=01LEyuNgRSQ
- https://deepsource.com/directory/javascript/issues/JS-D025
- https://arxiv.org/pdf/2103.14244.pdf
- https://www.techtarget.com/searchsecurity/definition/side-channel-attack
- https://github.com/advisories/GHSA-h7cp-r72f-jxh6
- https://exploitdog.ru/cve/github/GHSA-h7cp-r72f-jxh6
- https://cwe.mitre.org/data/definitions/122.html
建議檢查程式碼的其他部分是否有類似錯誤,並在所有財務關鍵型應用程式的新版本中實作記憶體佈局的修改。
- https://vulert.com/vuln-db/npm-elliptic-182798
- https://portswigger.net/daily-swig/dozens-of-cryptography-libraries-vulnerable-to-private-key-theft
- https://archway.finance/blog/bitcoin-quantum-computing-taproot-security
- https://www.galaxy.com/insights/research/bitcoin-taproot
- https://bitcoinops.org/en/preparing-for-taproot/
- https://christian-rossow.de/publications/btcsteal-raid2018.pdf
- https://github.com/pcaversaccio/ecdsa-nonce-reuse-attack
- https://www.reddit.com/r/Bitcoin/comments/6l6rmr/a_simple_explanation_on_schnorr_signatures_and/
- https://phemex.com/academy/taproot-and-schnorr-signatures