Bitcoin Core : Annonce de la vulnérabilité CVE-2017-18350
Un correctif a été publié pour une vulnérabilité dans Bitcoin Core, qui permettait à un serveur proxy SOCKS malveillant d'exploiter un dépassement de tampon. Cette faille, identifiée sous le nom de CVE-2017-18350, a été introduite en 2012 et a finalement été corrigée le 6 novembre 2017. La découverte et le correctif ont été réalisés par Practicalswift et Wladimir J. van der Laan.
La vulnérabilité CVE-2017-18350 affecte les nœuds Bitcoin
La vulnérabilité CVE-2017-18350 est un dépassement de tampon qui permet à un serveur proxy SOCKS malveillant d'écraser la pile des programmes sur des systèmes utilisant des caractères signés, y compris les ordinateurs classiques x86 32 bits et 64 bits. Cette faille a été introduite dans la version 0.7.0rc1 de Bitcoin Core le 27 août 2012, lors de l'ajout du support pour SOCKS5. Elle était présente jusqu'à sa correction dans la version 0.15.1 publiée le 6 novembre 2017.
Conditions nécessaires à l'exploitation de la vulnérabilité
Pour qu'un nœud soit vulnérable, il doit être configuré pour utiliser un proxy malveillant spécifique. De plus, toute utilisation d'un proxy sur des réseaux non sécurisés comme Internet comporte déjà une exposition potentielle aux interceptions. Lorsqu'une demande de connexion est effectuée par le nœud, si le proxy répond avec un nom de domaine différent tout en exploitant une longueur incorrecte (128 à 255), cela peut entraîner une interprétation erronée des données en tant que nombre négatif.
Les mécanismes techniques derrière l'exploitation
Dans les versions vulnérables, lorsque ce nombre négatif est transmis au système via l'appel `recv()`, il se reconvertit ensuite en nombre positif mais avec une taille largement supérieure (généralement 32 bits). Cela provoque alors une lecture infinie au-delà du tampon factice traditionnellement fixé à 256 octets. Pour remédier à cette situation critique, les développeurs ont remplacé le tampon factice par un type de données explicitement non signé afin d'éviter toute conversion vers ou depuis un nombre négatif.
Remerciements aux chercheurs ayant découvert la faille
Le mérite revient principalement à Practicalswift, qui a signalé cette vulnérabilité à l'équipe sécurité et fournit également le correctif initial nécessaire pour résoudre ce problème majeur. On doit également remercier Wladimir J. van der Laan, qui a travaillé sur un correctif déguisé ainsi que sur l'optimisation générale du code risqué lié à cette faille.
Toutes les étapes clés liées à cette vulnérabilité
Voici quelques dates importantes concernant cette vulnérabilité :
- 01/04/2012 : Vulnérabilité introduite dans le PR #1141
- 08/05/2012 : Vulnérabilité fusionnée avec le référentiel git principal
- 27/08/2012 : Vulnérabilité publiée dans la v0.7.0rc1
- 17/09/2012 : Vulnérabilité publiée dans la version 0.7.0
- …
- 21/09/2017 : PracticalSwift révèle une vulnérabilité à l'équipe sécurité
- 23/09/2017 : Wladimir ouvre le PR #11397 pour corriger discrètement la vulnérabilité
- 27/09/2017 : Correctif fusionné avec le référentiel git principal
- 18/10/2017 : Correctif fusionné avec Git v0.15
- 04/11/2017 : Correctif publié dans v0.15.1rc1
- 09/11/2017 : Correctif publié dans v0.15.1
- …
- Date non précisée : divulgation d'une autre existence potentielle liée au même problème sur Bitcoin-dev ML en juin et novembre de l'année suivante
Cette série d'événements souligne l'importance cruciale du suivi continu et des mises à jour régulières pour maintenir la sécurité des logiciels tels que Bitcoin Core face aux menaces émergentes.
