9 octobre 2018

Apache Struts, une nouvelle faille critique

Logo

Une faille critique, baptisée Apache Struts, a défrayé la chronique. Apache Struts est un framework développé par la fondation Apache qui permet de développer des applications web en Java. Les fonctionnalités de ce framework peuvent être étendues par l'utilisation de plugins, comme un analyseur syntaxique de JSON ou un module facilitant la création d'API REST. Pour ce qui est de l'architecture, Struts adopte une approche Model-Vue-Contrôleur. Cependant, une des spécificités de Struts est que les contrôleurs sont appelés des actions et possèdent l'extension de fichier ".action". Un indice valable lors de la réalisation de tests d'intrusion d'une application web...

Vous voulez savoir ce que vos serveurs exposés laissent passer ? Voir nos tests d’intrusion externes.

logo Struts cybersécurité

Struts : Configuration

Les liens entre les différentes routes, actions et vues sont définis dans un fichier de configuration à la racine de l’application nommé « struts.xml ». Voici un exemple de configuration par défaut :

Les actions sont donc contenues dans des packages dans lesquels il est possible de spécifier un namespace. Spécifier un namespace permet de grouper les actions et est directement répercuté sur l’URL finale d’accès aux actions en question. Voici donc un nouvel exemple avec l’ajout de cet attribut :

Ajouter des namespaces fait donc partie des bonnes pratiques de configuration d’Apache Struts. C’est justement l’objet de la vulnérabilité découverte récemment : CVE-2018-11776.

CVE-2018-11776 : Aperçu

Cette vulnérabilité a été découverte par Man Yue Mo, chercheur chez Semmle Security en août 2018. Elle permet à un attaquant d’exécuter à distance des commandes arbitraires sur la machine hôte.

La faille résulte du fait que l’URL d’accès aux actions d’une application Struts passe avant tout par un analyseur syntaxique qui va s’atteler à récupérer le namespace dans lequel est contenue l’action demandée. Cependant, dans le cas où l’action n’a pas de namespace attribué et que l’option « alwaysSelectFullNamespace » est définie à « true », il est possible de faire exécuter des commandes au serveur. Voici un exemple qui illustre cette résolution de commande :

CVE-2018-11776 : Exploitation

Comme dit précédemment, plus intéressant que de résoudre des opérations algébriques, il est possible de faire exécuter à la machine hôte des commandes systèmes grâce à l’injection d’une charge formatée comme suit :

Pour faciliter l’exploitation de cette faille, il est possible d’utiliser sur GitHub le script python développé par Mazin Ahmed appelé « struts-pwn.py ».

Voyez plutôt :

CVE-2018-11776 : Conséquences

Cette vulnérabilité a pour conséquence la prise de contrôle à distance de la machine hôte. Elle pourrait par conséquent être exploitée par des attaquants, leur permettant ainsi de récupérer des données sensibles sur la machine et les données personnelles des utilisateurs de l’application. Ce n’est pas sans rappeler la précédente faille critique ayant affecté Apache Struts (CVE-2017-5638), qui avait donné lieu à une fuite de plus de 200 000 cartes de crédit, données personnelles et numéros de sécurité sociale d’utilisateurs d’Equifax en septembre 2017.

CVE-2018-11776 : Recommandations

Heureusement, il est relativement trivial de se prémunir contre l’exploitation de cette vulnérabilité. En effet, il suffit simplement de :

• Ne pas laisser la variable « alwaysSelectFullNamespace » définie à « true » dans la configuration de Struts
• Encapsuler chaque action (fichier .action) dans un namespace
• Et surtout, effectuer une montée en version d’Apache Struts vers la version 2.5.17 ou supérieure

Blog

Nos derniers articles

Vol de données dans les applications web : ce que recommande le CERT-FR

En 2025, le CERT-FR a été informé de 196 exfiltrations de données, contre 130 l’année précédente. On imagine volontiers des attaques sophistiquées derrière ces fuites. Pourtant, dans la plupart des cas, les attaquants n’ont exploité aucune faille technique : ils ont réutilisé des identifiants légitimes, obtenu un accès par ingénierie sociale ou trouvé des données exposées sans contrôle d’accès. Le centre de réponse aux incidents de l’ANSSI en tire un retour d’expérience de 80 pages, publié le 20 octobre 2026, qui décrit ce qu’il a vu chez les victimes et ce qu’il recommande pour les applications web.

9 novembre 2026

Cyber Resilience Act : quelles obligations pour les éditeurs et les fabricants ?

Le Cyber Resilience Act est entré en vigueur le 10 décembre 2024, mais rien ne vous était encore demandé. Cela a changé le 11 septembre 2026 : depuis cette date, la plateforme européenne de signalement est ouverte, et les fabricants doivent y déclarer leurs vulnérabilités activement exploitées. Restait une inconnue que le règlement laissait à chaque État membre : qui contrôle, et qui sanctionne. La foire aux questions publiée par l’ANSSI l’a levée.

28 août 2026

Tester la sécurité de son site web : ce que voient les outils gratuits

Le contrôle d'accès défaillant occupe la première place du Top 10 de l'OWASP depuis l'édition 2021, devant les défauts cryptographiques et les injections. C'est aussi la famille de failles qu'un scanner automatique détecte le plus mal, parce qu'elle suppose de comparer les droits de deux comptes distincts et de comprendre qui a le droit de voir quoi. Un outil qui lit des en-têtes HTTP ne raisonne pas comme cela. Vouloir tester la sécurité de son site web reste une démarche saine, et les scanners publics ont leur utilité. Ils répondent simplement à une question plus étroite que celle que se pose un dirigeant.

18 août 2026

informations

Contactez-nous

Une question ou un projet en tête ? Remplissez le formulaire, nous reviendrons vers vous rapidement pour un premier échange.

    *Informations obligatoires

    Les informations recueillies à partir de ce formulaire sont traitées par Digitemis pour donner suite à votre demande de contact. Pour connaître et/ou exercer vos droits, référez-vous à la politique de Digitemis sur la protection des données, cliquez ici.

    → Index