Vulnérabilités dans le langage de programmation Golang

Date de publication :

Trois vulnérabilités ont été découvertes puis corrigées sur Golang. Leur exploitation permet d’injecter du code arbitraire et d’effectuer un déni de service sur les dispositifs vulnérables :

CVE-2020-28362[Score CVSS v3 : 7.5] : Plusieurs méthodes de math/big.Rat et math/big.Int (tel que Div, Exp, DivMod, Quo, Rem, QuoRem, Mod, ModInverse, ModSqrt, Jacobi et GCD) peuvent planter lorsque des nombres très grands leurs sont passées en entrée. Les arguments concernés sont les diviseurs ou les modulos supérieurs à 3168 bits (sur les architectures 32 bits) ou 6336 bits (sur les architectures 64 bits).

Les méthodes crypto/rsa.VerifyPSS, crypto/rsa.VerifyPKCS1v15, et crypto/dsa.Verify peuvent également planter lorsqu'elles sont appelées sur des clés publiques et des signatures élaborées. Les opérations traitées par crypto/ecdsa et crypto/elliptic ne peuvent être affectées que si des paramètres de courbes personnalisés avec des champs de taille inhabituellement grande (plusieurs fois plus grands que la plus grande courbe prise en charge, P-521) sont utilisés. L'utilisation de crypto/x509.Verify sur une chaîne de certificats X.509 spécialement conçue peut entraîner un comportement non-désiré également, même si les certificats ne sont pas reliés à une autorité racine de confiance. Les clients net/http peuvent être amenés à se bloquer en contactant un serveur HTTPS, tandis que les serveurs net/http qui acceptent les certificats des clients ne sont pas affectés.

De plus, une application peut planter en invoquant la méthode crypto/x509.(*CertificateRequest).CheckSignature sur une demande de certificat X.509 ou suite une requête issue de golang.org/x/crypto/otr. L'analyse d'une entité golang.org/x/crypto/openpgp ou bien  la vérification d'une signature peut entraîner un plantage. Enfin, un client golang.org/x/crypto/ssh peut présenter des comportements erratiques en raison d'une clé hôte malformée. Un serveur pourrait présenter un déni de service si sa fonction PublicKeyCallback accepte une clé publique malformée, ou bien si la fonction IsUserAuthority accepte un certificat avec une clé publique malformée.

CVE-2020-28366, CVE-2020-28367[Score CVSS v3 : 7.5] :  La commande go peut permettre l'exécution de code arbitraire au moment de la compilation lorsque cgo (inclusion du langage C dans du code Go), est utilisé. Cela peut se produire lorsque l'exécution de la commande go se trouve sur un paquet malveillant, ou toute autre commande qui construit du code non fiable. Un attaquant peut alors construire un paquet malveillant pour injecter du code arbitraire sur des dispositifs vulnérables.

Informations

La faille est activement exploitée :

Un correctif existe :

Une mesure de contournement existe :

Risques

Risques

  • Déni de service
  • Injection de code arbitraire

Criticité

  • Score CVSS v3 : 7.5

Existence d’un code d’exploitation

  • Il n’existe à ce jour aucun code d’exploitation connu publiquement.

Composants vulnérables

  • Les versions de Go 1.14.12 et 1.15.x avant 1.15.4 sont sensibles à ces vulnérabilités.

CVE

Solutions ou recommandations

Mise en place de correctifs de sécurité

Mettre à jour Go vers une des versions suivantes :

  • version 1.14.13

  • version 1.15.4

Solution de contournement

  • Dans les cas où un projet go ne nécessite pas de code de type cgo. Pour éviter que les vulnérabilités CVE-2020-28366 et CVE-2020-28367 soient exploitées, il est possible de préciser que les projets Go créés ne dépendent pas des dépendances de code cgo incluses. Ainsi les fichiers de code cgo ne seront pas compilés automatiquement.
    Exemple de commande : CGO_ENABLED=0 go get github.com/someproject