Un bogue dans Java et Python permettrait à des attaquants de contourner les défenses des pare-feu
Selon des chercheurs en sécurité

Le , par Stéphane le calme, Chroniqueur Actualités
Des chercheurs ont rapporté l’existence d’une faille dans Java et Python qui permettrait à des attaquants de contourner les défenses fournies par les pare-feu. Alexander Klink et Timothy Morgan ont assuré que la principale vulnérabilité s'est produite parce que Java ne vérifie pas la syntaxe des noms d'utilisateurs dans son protocole FTP.

« Le code (probablement ancien) a un bogue : il ne vérifie pas la syntaxe du nom d'utilisateur. RFC 959 spécifie qu'un nom d'utilisateur peut se composer d'une séquence de n’importe lequel des 128 caractères ASCII sauf <CR> et <LF>. Devinez ce que les exécutants de JRE ont oublié ? Précisément de vérifier la présence de <CR> ou <LF>. Cela signifie que si nous mettons %0D%0A n'importe où dans la partie nom d’utilisateur de l'URL (ou dans la partie mot de passe), nous pouvons terminer la commande USER (ou PASS) et injecter une nouvelle commande dans la session FTP », a expliqué Klink.

Pour rappel, CR et LF désigne respectivement le retour chariot (Carriage Returns - caractère 13 (0x0D)) et le saut de ligne (Line Feeds caractère 10 (0x0A)).

Aussi, si nous avons par exemple l’intention de nous servir de la commande USER sur un serveur mail au lieu d’un serveur FTP, nous obtiendrons une génération d’erreur (étant donné que USER n’est pas une commande SMTP valide), mais notre session va continuer. Combiné avec le bogue mentionné, un attaquant sera alors en mesure de lancer des commandes SMTP arbitraires qui vont forcer l’envoi de courriels.

« Cette attaque est particulièrement intéressante dans un scénario où vous pouvez accéder à un serveur de messagerie interne sans restriction sur une machine faisant du parsing XML. De plus, cette attaque va vous permettre d’envoyer des pièces jointes étant donné que la taille de l’URL semble ne pas être limitée en dehors de la limite imposée par la quantité de RAM disponible », a estimé Klink.

La vulnérabilité peut également être exploitée pour faire du parsing de fichiers JNLP malveillants, conduire des attaques man-in-the-middle (MiTM) ou des campagnes SSRF (Server-Side Request Forgery).

Selon Morgan, « cette injection de protocole FTP permet de tromper le pare-feu d'une victime en autorisant des connexions TCP d'Internet vers le système de l'hôte vulnérable ».

Dans le cas de Java, l'attaque peut être effectuée contre des utilisateurs de desktop même s'ils n'ont pas le plugin de navigateur Java activé.

Le chercheur dit également qu'un bogue « presque identique » existe aussi dans les bibliothèques urllib2 et urllib de Python. Cependant, bien que la faille de sécurité Java ne soit pas limitée aux attaques basées sur des noms de répertoires répertoriés dans des URL malveillantes, le bogue Python semble être limité de cette manière.

Morgan affirme que les fournisseurs ont jusqu'à présent échoué à réparer le bogue, bien que l'équipe de sécurité de Python ait été informée en janvier 2016 et que l'équipe d'Oracle ait été informée en novembre 2016.

Le chercheur recommande la désactivation du mode classique FTP par défaut et propose que les applications en entreprise soient auditées pour vérifier si elles sont vulnérables à ces attaques.

Source : billet Alexander Klink, billet Timothy Morgan


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de CaptainDangeax CaptainDangeax - Membre habitué https://www.developpez.com
le 23/02/2017 à 14:15
En fait ce bug n'en est pas vraiment un. Celui qui code en Java ou en Python pour aller faire de l'injection FTP sait très bien ce qu'il fait et n'a pas besoin de ce bug pour envoyer les commandes qu'il a envie. Et de toute façon, FTP n'a pas été conçu à une époque où l'on s'occupait de sécurité. L'utiliser aujourd'hui c'est s'exposer à bien des problèmes.
Avatar de Uther Uther - Expert éminent https://www.developpez.com
le 23/02/2017 à 15:42
C'est un peu plus compliqué que ça. Il n'y a pas d'objet officiel pour se connecter directement en FTP dans la bibliothèque standard Java. Mais on peut bien en faire de manière indirecte via l'objet URLConnection. Si on ne fait pas les contrôles adéquats, il y a donc moyen de faire une injection en utilisant une URL de type FTP en remplacement de http par exemple.
Offres d'emploi IT
Ingénieur intégration, validation, qualification du système de drone H/F
Safran - Ile de France - Éragny (95610)
Data scientist senior H/F
Safran - Ile de France - Magny-les-Hameaux (Saclay)
Ingénieur H/F
Safran - Ile de France - Moissy-Cramayel (77550)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil