CVE-2025-62861 : la création de modèles de blocs est interrompue par l'éviction d'un frère TRUC lors d'une réorganisation

Bitcoin Core a rendu publique une faille de mempool liée aux règles TRUC, après la découverte d’un comportement incohérent lors d’une réorganisation de chaîne. Le correctif avait déjà été publié le 10 octobre 2025 dans Bitcoin Core v30.0, tandis que les versions concernées vont de 28.0 à 28.2 et de 29.0 à 29.1.

CVE-2025-62861 : la création de modèles de blocs est interrompue par l'éviction d'un frère TRUC lors d'une réorganisation

La vulnérabilité est classée en sévérité High. Elle touche la politique de relais des transactions, qui impose des restrictions de topologie supplémentaires aux transactions de version 3 dites « TRUC » : une transaction TRUC ne peut avoir qu’un seul ancêtre non confirmé et qu’un seul descendant non confirmé.

Une incohérence créée lors d’une réorganisation

Ces règles relèvent de la politique du mempool, et non du consensus. Autrement dit, un bloc valide peut contenir une topologie qui ne serait pas acceptée dans le mempool, par exemple un parent TRUC avec plusieurs enfants. Dans ce cas, lorsque Bitcoin Core recevait une transaction qui donnait à un parent TRUC un deuxième enfant non confirmé, la logique de « sibling eviction », introduite en v28.0, pouvait considérer l’enfant déjà présent comme un candidat au remplacement et l’expulser si la nouvelle transaction payait suffisamment, selon les règles du replace-by-fee.

Le problème apparaissait lors d’une réorganisation de chaîne. Les transactions des blocs déconnectés sont alors réintroduites dans le mempool avec bypass_limits=true, afin de rétablir fidèlement les transactions auparavant confirmées, sans appliquer les règles anti-DoS ni les restrictions de topologie du mempool. Or, le bug venait du fait que la branche de sibling eviction n’était pas protégée par bypass_limits : l’application des règles TRUC continuait pendant cette réinsertion.

Une réorganisation peut restaurer une topologie de transactions qui viole la limite de descendants de TRUC : valide dans un bloc, mais impossible à recréer dans le mempool. Avec la sibling eviction toujours active, Bitcoin Core pouvait expulser une transaction restaurée tout en conservant ses descendants déjà présents dans le mempool, laissant celui-ci contenir des transactions dépensant des sorties qui n’existaient plus.

Effet sur la production de blocs

Le principal effet de cet état incohérent est que la création d’un modèle de bloc par un mineur ne peut plus aboutir : le modèle assemblé échoue à sa vérification de validité. Un nœud ayant subi une telle réorganisation ne peut donc plus produire de blocs jusqu’à un redémarrage, qui recharge le mempool dans un état cohérent.

Le correctif a été intégré dans la PR #33504 en bloquant les vérifications TRUC lorsque bypass_limits est actif, afin que la sibling eviction ne s’exécute plus pendant la réinsertion liée à une réorganisation.

Calendrier de divulgation

Bitcoin Core précise que Niklas Goegge a découvert le problème et l’a signalé de manière responsable. Il l’a rapporté à la liste de diffusion sécurité de Bitcoin Core le 2025-09-26, puis Greg Sanders a ouvert la PR #33504 le 2025-09-29. La fusion dans master a eu lieu le 2025-10-02, suivie de rétroportages vers les branches 29.x, 30.x et 28.x les 2025-10-03, 2025-10-06 et 2025-10-07.

Bitcoin Core 30.0 a été publié avec le correctif le 2025-10-10, puis Bitcoin Core 29.2 le 2025-10-14 et Bitcoin Core 28.3 le 2025-10-17. La dernière version vulnérable de Bitcoin Core, la branche 29.x, a atteint sa fin de vie le 2026-10-27.