CVE-2024-52912:時間戳調整導致網路分裂
version 訊息處理有兩個漏洞,分別是有號整數溢位與 abs64 邏輯錯誤,攻擊者可藉此扭曲受害者的調整後時間,讓對方認定新區塊時間太過超前而拒收。攻擊者必須是最先連上的 200 個對等節點之一。這個中度風險缺陷已在 Bitcoin Core 0.21.0 修復。
Bitcoin Core
從官方來源收錄的全部內容。
141 篇文章
version 訊息處理有兩個漏洞,分別是有號整數溢位與 abs64 邏輯錯誤,攻擊者可藉此扭曲受害者的調整後時間,讓對方認定新區塊時間太過超前而拒收。攻擊者必須是最先連上的 200 個對等節點之一。這個中度風險缺陷已在 Bitcoin Core 0.21.0 修復。
Bitcoin Core
特製孤兒交易無效但驗證成本高,可讓節點停擺數小時,因為每接受一筆新交易,都會啟動一次二次方複雜度的孤兒快取搜尋。Pieter Wuille 的 #15644 改成一找到符合項目就暫停,先處理新訊息。這項高風險修正隨 Bitcoin Core 0.18.0 送到使用者手上。
Bitcoin Core
在 0.20.0 之前的 Bitcoin Core,一則格式錯誤的 GETDATA 訊息就能讓 net_processing 執行緒空轉、CPU 飆到 100%,每個攻擊者連線還多吃 1.5 MB 記憶體。其他對等節點仍能獲得服務,所以評為低風險。John Newbery 發現此漏洞,並以 #18808 修復。
Bitcoin Core
直接接在創世區塊上的標頭只需難度 1,從 Bitcoin Core 0.12.0 到 0.15.0 都能繞過檢查點邏輯,濫發者可藉此無限擴大 mapBlockIndex,甚至可能讓節點記憶體耗盡而當機。Cory Fields 於 2017 年通報這個中度風險漏洞,#11028 將其修補。
Bitcoin Core
一則塞了 50,000 個區塊項目的 INV,可讓節點排入 50,000 個各約 1 kB 的 getheaders 回應,對方只要拒絕讀取,這 50 MB 的傳送緩衝區就一直滿載。John Newbery 的 #18962 改為每則 INV 只送一個 GETHEADERS,當初以節省頻寬為名提出,收錄於 0.20.0。
Bitcoin Core
攻擊者先扣住 GETDATA 回覆,再濫發假公告,把交易從容量 50,000 筆的 g_already_asked_for 對應表擠掉,接著反覆重新宣告,受害者就無法向其他人索取該筆交易。John Newbery 揭露這個中度風險漏洞,Pieter Wuille 的 #19988 在 Bitcoin Core 0.21.0 修復。
Bitcoin Core
Bitcoin Core 0.10.1 之前,接收訊息最大可達 32 MiB,攻擊者每條連線都能逼節點配置這麼多記憶體,甚至可能造成當機。Bitcointalk 使用者 Evil-Knievel 通報此問題,#5843 把上限砍到 2 MiB,後來因 Segwit 提高到 4 MB。原訂 2015 年的揭露遭到延後,細節到 2024 年才公開。
Bitcoin Core
Wladimir J. Van Der Laan 在 miniupnpc 發現第二個緩衝區溢位,會洩漏資料,若與 CVE-2015-6031 串接可達成遠端程式碼執行,他也針對 Ubuntu 的 miniupnpc 1.6-precise 實際示範。這個攻擊手法無法直接移植到 Bitcoin Core,修補則收錄於 2016 年 2 月的 0.12 版。
Bitcoin Core
Bitcoin Core 27.1 以修正錯誤為主:GUI 替未簽署交易加價手續費的功能恢復正常,代理 IP 欄位不再接受連接埠,GetAddedNodeInfo() 現在也能偵測透過 addnode 加入的 CJDNS 對等節點(#30085)。簽署時處理 TapMiniscript 的方式同樣有所更動(#29853)。
Bitcoin Core
BIP324 v2 傳輸在 Bitcoin Core 27.0 預設開啟;新的 CoinGrinder 演算法會在費率達 30 sat/vB 以上時,尋找最輕的輸入組合。共識程式碼不再使用網路調整時間,改用系統時間,節點營運者的時鐘準確度因此更要緊。libbitcoinconsensus 列為棄用,預計在 v28 移除。
Bitcoin Core
升級到 Bitcoin Core 25.2 的節點不再處理變造區塊(#29412)。這一版也修復 getrawtransaction 的 segfault(#29003)、WalletBatch::EraseRecords 的 use-after-free(#29176),以及選取「Mask values」時的 GUI 當機。
Bitcoin Core
I2P 工作階段在 Bitcoin Core 26.1 同時採用 ECIES-X25519 與 ElGamal 加密(#29200),節點載入記憶池時也會記錄進度。修正項目包括拒絕處理變造區塊(#29412),以及啟用 SFFO 時錢包會跳過 BnB 幣選擇(#28994)。
Bitcoin Core
實驗性的 BIP324 v2 傳輸在 Bitcoin Core 26.0 登場,預設關閉,須以 -v2transport 啟用。新的 loadtxoutset RPC 可載入 assumeutxo 快照,幾分鐘內就能有一個可用節點,原本的 chainstate 則在背景繼續驗證完成;submitpackage 可將原始交易以套件形式送進記憶池。
Bitcoin Core
Bitcoin Core 24.2 不再提供過時的手續費估算(#27622),RPC 對無效 bech32 位址的處理也獲修正(#27727)。其餘異動多半落在建置系統與 CI,包括用 Xcode 15 連結器建置 macOS Qt 套件的修正(#28543)。
Bitcoin Core
平行下載 compact block 的功能進入 Bitcoin Core 25.1(#27626)。其他修正涵蓋 REST 的 /deploymentinfo 當機(#27853)、遠端用戶端斷線後的伺服器關閉(#28551),以及現在會拒絕無效腳本的錢包遷移(#28125)。
Bitcoin Core
只要透過 -blockfilterindex=1 備有 BIP158 compact block filter,Bitcoin Core 25.0 的描述符錢包重新掃描就會變快,新的 scanblocks RPC 也能搜尋這些過濾器。轉發政策現在接受非見證資料 65 位元組以上的交易。-blocksonly 模式下,記憶池記憶體上限從 300MB 降到 5MB。
Bitcoin Core
Bitcoin Core 24.1 的錢包上鎖時會清除主金鑰,不再留在記憶體中(#27080);只序列化一次的做法則避免 peers.dat 毀損(#26909)。inv-to-send 佇列處理更快(#27610),無效 URI 造成的 REST segfault 也已消失(#27468)。
Bitcoin Core
Bitcoin Core 23.2 的主軸是三項 P2P 異動:peers.dat 不再毀損(#26909)、不再提前清除其他對等節點的下載狀態(#27608),以及 inv-to-send 佇列加速(#27610)。其餘屬於建置與 CI 工作,例如在 aarch64 上用 clang-16 編譯 bdb。
Bitcoin Core
deriveaddresses 在索引 2147483647 當機的問題已在 Bitcoin Core 23.1 修好(#26275),MacOS 13 上由特定通知引發的 segfault 也已排除。GUI 現在拒絕加密 watch-only 錢包,Qt5 則升級到 5.15.3(#24668)。
Bitcoin Core
單獨寫 -persistmempool 旗標,在 Bitcoin Core 22.1 代表 -persistmempool=1;過去反而會誤關記憶池保存(#23061)。手續費計算改為無條件進位,以免低於預期費率(#22949),與 external_spk_managers 相關的錢包 segfault 也已修復(#23333)。
Bitcoin Core