CVE-2022-42889 Text4Shell : comment détecter et corriger cette vulnérabilité sur Apache Commons Text ?

Comprendre et neutraliser la CVE-2022-42889
Maxime ALAY-EDDINE
octobre 17, 2022

CVE-2022-42889 Text4Shell : une vulnérabilité de type exécution de code à distance qui affecte le logiciel Apache Commons Text

Le 13 octobre 2022, la fondation Apache a publié une vulnérabilité dans le code du projet Apache Commons Text et a publié un message à cet effet dans la liste de diffusion du projet.

Cette vulnérabilité ressemble fortement à la série des CVE Log4Shell, et est référencée sous le code CVE-2022-42889.

Apache Commons Text est un composant logiciel utilisé pour manipuler des chaînes de caractères, édité par la fondation Apache.

Apache Commons Text est utilisé pour vérifier si une chaîne de caractères en contient une autre, ou pour construire des messages à partir d’un format préconfiguré.

Apache Commons Text est une bibliothèque utilisée, mais à une échelle nettement inférieure à celle de Log4J : si une recherche GitHub donnait plus de 300 000 résultats pour Log4J, une recherche sur Apache Commons Text donne moins de 20 000 entrées.

Comment fonctionne la CVE-2022-42889 ?

Apache Commons Text permet, lors de la manipulation de chaînes de caractères :

  • d’effectuer des opérations complémentaires, afin de récupérer des valeurs issues de sources complémentaires ;
  • de faire des appels à des systèmes tiers, avec des protocoles comme DNS (système de gestion des noms de domaine), ou encore via des appels d’URL ou de l’exécution de scripts.

La vulnérabilité CVE-2022-42889 / Text4Shell consiste à injecter sur un logiciel vulnérable une charge malveillante, qui va demander à Apache Commons Text d’aller chercher une valeur issue d’une source tierce, avec DNS, ou via une exécution de script.

Or, dans ce cas, Apache Commons Text ne vérifie pas par défaut les données à traiter, ce qui veut dire que du code malveillant peut être exécuté si aucun filtre n’a été implémenté dans le code de l’application vulnérable.

Comment attaquer un système avec cette vulnérabilité ?

Le plus simple est ici de directement appeler le préfixe souhaité, conformément à la documentation, avec les préfixes :

  • dns : effectue une résolution DNS à partir de la variable envoyée ;
  • url : effectue un appel sur l’URL saisie ;
  • script : exécute un script sur la cible dans la JVM.

Un exemple de script d’attaque est donc :

${script:javascript:java.lang.Run.Runtime.getRuntime().exec("cat /etc/shadow");}

Un pirate peut alors demander à une application vulnérable d’afficher le contenu d’un fichier distant, ou d’effectuer des appels vers des systèmes tiers.

Notons qu’il faut absolument réussir à injecter le code malveillant dans une partie de l’application qui utilise l’interpolation de chaînes de caractères, et que ceci est donc bien moins répandu et trivial que les attaques connues sur Log4J.

Text4Shell est donc une vulnérabilité qui n’est pas nécessairement triviale à exploiter, et qui dépend beaucoup du contexte d’utilisation de la bibliothèque Apache Commons Text.

Quels sont les systèmes affectés par la CVE-2022-42889 ?

Les versions de Apache Commons Text de 1.5 à 1.9 incluses sont affectées par Text4Shell CVE-2022-42889

D’après le bulletin d’information d’Apache, la vulnérabilité affecte Apache Commons Text dans les versions 1.5 à 1.9 incluses.

Ainsi, Apache recommande de mettre à jour Commons Text dans la version 1.10.0 pour corriger le problème.

Comment scanner un serveur contre Text4Shell ?

Cyberwatch recommande de parcourir l’ensemble du disque dur à la recherche de fichiers JAR liés à Apache Commons Text. Un exemple de script, non exhaustif, figure ci-dessous :

# POUR LINUX (Bash)
## Parcourir le disque à la recherche de JAR liés à Apache Commons Text
for line in $(find / -name \*.jar 2>&1 | grep commons-text)
do
  echo "DEBUG:potential apache commons text candidate on $line"
done

# POUR WINDOWS (PowerShell)
## Parcourir le disque à la recherche de JAR liés à Apache Commons Text
$jar = @()
$drives = Get-PSDrive -PSProvider 'FileSystem'
foreach($drive in $drives) {
  $jar += Get-ChildItem -Path $Drive.Root -File -ErrorAction SilentlyContinue -Force -Recurse -Filter '*.jar'
}
foreach($line in $jar) {
  if($line -match 'commons-text'){
    $path = $line.FullName
    Write-Output "DEBUG:Potential apache commons text candidate on '$path'"
  }
}

Une analyse exhaustive nécessitera aussi de faire une veille sur les composants tiers qui pourraient embarquer Apache Commons Text, ou d’étudier le contenu des fichiers WAR qui embarqueraient des versions vulnérables (les commandes unzip et jar peuvent être utilisées pour ce dernier cas).

Les clients de Cyberwatch peuvent aussi directement consulter les pages des CVE-2022-42889 dans leur encyclopédie des vulnérabilités, afin d’identifier les actifs concernés.

Comment neutraliser cette vulnérabilité ?

L’action prioritaire est de mettre à jour Apache Commons Text vers la version 1.10.0, via les gestionnaires de paquets habituels ou via un téléchargement direct depuis https://commons.apache.org/proper/commons-text/download_text.cgi.

Cyberwatch Vulnerability Manager permet de détecter la CVE-2022-42889, et peut déployer les correctifs de sécurité lorsque cela concerne un paquet officiel de la distribution. N’hésitez pas à nous demander une démonstration via le formulaire dédié.

Article mis à jour le 17/10/2022 à 17h30 : création de l’article.

Vous avez des questions ?

Vous souhaitez une démonstration ?

Contactez-nous et nos experts reviendront vers vous sous 24h.

Votre demande