Bitcoin Core : : CVE-2017-18350 Divulgation


Divulgation des détails de CVE-2017-18350, dont un correctif a été publié le 6 novembre 2017 dans la version 0.15.1 de Bitcoin Core.

CVE-2017-18350 est une vulnérabilité de dépassement de mémoire tampon qui permet à un serveur proxy SOCKS malveillant d’écraser la pile de programmes sur les systèmes avec un type de caractères signé (y compris les PC x86 32 bits et 64 bits courants).

La vulnérabilité a été introduite dans 60a87bce873 (prise en charge SOCKS5) et publiée pour la première fois dans Bitcoin Core v0.7.0rc1 le 27 août 2012. Un correctif était caché dans d90a00eabed (« Améliorer et documenter le code SOCKS ») publié dans la v0.15.1, 6 novembre 2017.

Bitcoin Core : : CVE-2017-18350 Divulgation

Pour être vulnérable, le nœud doit être configuré pour utiliser un tel proxy malveillant en premier lieu. Notez que l’utilisation de n’importe quel proxy sur un réseau non sécurisé (comme Internet) est potentiellement une vulnérabilité puisque la connexion pourrait être interceptée à cette fin.

Lors d’une demande de connexion du nœud, le proxy malveillant répondrait avec un accusé de réception d’un nom de domaine cible différent de celui demandé. Normalement, cet accusé de réception est entièrement ignoré, mais si la longueur utilise le bit haut (c’est-à-dire une longueur comprise entre 128 et 255 inclus), il sera interprété par les versions vulnérables comme un nombre négatif à la place. Lorsque le nombre négatif est passé à l’appel système recv() pour lire le nom de domaine, il est reconverti en un nombre non signé/positif, mais à une taille beaucoup plus large (généralement 32 bits), ce qui entraîne une lecture effectivement infinie dans et au-delà du tampon de pile factice de 256 octets.

Pour corriger cette vulnérabilité, le tampon factice a été remplacé par un type de données explicitement non signé, évitant la conversion vers/à partir d’un nombre négatif.

Le mérite revient à practiceswift pour avoir découvert et fourni le correctif initial de la vulnérabilité, et à Wladimir J. van der Laan pour une version déguisée du correctif ainsi qu’au nettoyage général du code à risque.

  • 2012-04-01 : Vulnérabilité introduite dans PR #1141
  • 08/05/2012 : Vulnérabilité fusionnée dans le référentiel maître git
  • 2012-08-27 : Vulnérabilité publiée dans la v0.7.0rc1
  • 17/09/2012 : Vulnérabilité publiée dans la v0.7.0
  • 2017-09-21 : practiceswift révèle une vulnérabilité à l’équipe de sécurité
  • 2017-09-23  : Wladimir ouvre le PR #11397 pour corriger discrètement la vulnérabilité
  • 2017-09-27  : Correctif fusionné avec le référentiel git principal
  • 18/10/2017  : correctif fusionné avec le référentiel git 0.15
  • 2017-11-04 : Correctif publié dans la v0.15.1rc1
  • 09/11/2017 : correctif publié dans la v0.15.1
  • 2019-06-22  : Existence d’une vulnérabilité divulguée à bitcoin-dev ML
  • 2019-11-08 : Divulgation des détails de la vulnérabilité à bitcoin-dev ML