Des vulnérabilités trouvées dans les bibliothèques réseau Rust and Go empêchent la validation IP

Récemment des informations sur les vulnérabilités ont été publiées qui se trouvaient dans les bibliothèques standard des langages Rouille et va, qui sont liés à une mauvaise gestion des adresses IP avec des chiffres octaux dans les fonctions d'analyse d'adresse.

Il est mentionné que eCes vulnérabilités vous permettent d'éviter les vérifications d'adresses valides etn applications, par exemple, pour organiser l'accès aux adresses d'interface de bouclage ou aux sous-réseaux intranet lorsque des attaques d'usurpation de requête côté serveur sont effectuées.

Les vulnérabilités dans ces deux langages Les chaînes d'adresses IP ont une réalisation dans la spécification à base zéro, puisque vous êtes en théorie, ils devraient être interprétés comme des nombres octaux, mais le problème à l'origine de ces problèmes est que de nombreuses bibliothèques ignorent cela et suppriment simplement le zéro, ainsi ils finissent par traiter la valeur comme un nombre décimal.

Par exemple, afin de comprendre comment les adresses IP sont interprétées dans ces bugs, le nombre 0177 en octal est 127 en décimal et avec lequel un attaquant peut demander une ressource spécifiant la valeur "0177.0.0.1", qui, puisqu'elle n'est pas prise en octal, la notation décimale est "127.0.0.1".

Voilà pourquoi en cas d'utilisation d'une des bibliothèques problématiques, l'application ne détectera pas l'occurrence de l'adresse 0177.0.0.1 dans le sous-réseau 127.0.0.1, mais en fait, lors de l'envoi d'une requête, l'adresse "0177.0.0.1" peut être appelée et, en raison d'une mauvaise interprétation, les fonctions réseau la traiteront comme 127.0.0.1. De même, l'accès aux adresses intranet peut être trompé et vérifié en spécifiant diverses valeurs, que l'attaquant évaluera pour une éventuelle exploitation.

Du côté de Rust, le problème s'est avéré être soumis à la bibliothèque standard "std :: net" et qui est déjà catalogué sous "CVE-2021-29922". Il décrit que l'analyseur d'adresse IP de cette bibliothèque supprime un zéro devant les valeurs de l'adresse, mais uniquement si pas plus de trois chiffres ont été spécifiés, par exemple, "0177.0.0.1" sera interprété comme une valeur invalide et un résultat incorrect sera renvoyé en réponse.

Une validation d'entrée de chaîne octale incorrecte dans la bibliothèque "net" standard de rust-lang permet à des attaquants distants non authentifiés d'effectuer des attaques SSRF, RFI et LFI indéterminées sur de nombreux programmes qui dépendent de rust-lang std :: net. Les octets de l'adresse IP sont laissés dépouillés au lieu d'être évalués comme des adresses IP valides.

Il est également mentionné que les applications qui utilisent la bibliothèque std :: net :: IpAddr lors de l'analyse des adresses spécifiées par utilisateur sont potentiellement sensibles aux attaques SSRF (usurpation de requête côté serveur), RFI (inclusion de fichier distant) et LFI (inclusion de fichiers locaux). De même, un attaquant peut saisir 127.0.026.1, qui est en fait 127.0.22

Par exemple, un attaquant qui envoie une adresse IP à une application Web basée sur std :: net :: IpAddr pourrait provoquer SSRF en entrant des données d'entrée octales ; Un attaquant peut envoyer des adresses IP exploitables si l'octet a 3 chiffres, avec l'octet minimum exploitable 08 qui conduit à un déni de service et l'octet maximum exploitable 099 qui conduit également à un déni de service. 

Si vous voulez en savoir plus sur cette vulnérabilité dans Rust, vous pouvez vérifier les détails dans le lien suivant. Il est également mentionné que la vulnérabilité a été corrigée dans la branche Rust 1.53.0.

Dès que au problème qui affecte à Go, il est mentionné que cela est soumis à la bibliothèque standard « net » et il est déjà répertorié sous CVE-2021-29923. Dans la description, il est mentionné que permet à des attaquants distants non authentifiés d'effectuer des attaques SSRF, RFI et LFI indéterminé dans de nombreux programmes qui dépendent de la fonction net.ParseCIDR intégrée de golang. Les octets IP CIDR individuels sont supprimés au lieu de les évaluer comme des octets IP valides.

Par exemple, un attaquant pourrait transmettre la valeur 00000177.0.0.1, qui, lorsqu'elle est vérifiée dans la fonction net.ParseCIDR, sera analysée comme 177.0.0.1/24, et non 127.0.0.1/24. Le problème se manifeste également sur la plateforme Kubernetes. La vulnérabilité a été corrigée dans Go version 1.16.3 et bêta version 1.17.

Vous pouvez en savoir plus sur cette vulnérabilité dans le lien suivant.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.