Apache Struts, une nouvelle faille critique

logo Struts cybersécurité

Struts : Aperçu

Bien avant la faille de sécurité Log4Shell, une autre 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…

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’utilisateur de 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

Je partage

Derniers articles

Angular, N’Tier et HttpOnly

Avec l’apparition au cours de la décennie 2010 des environnements de travail Javascript de plus en plus puissants, l’architecture N’Tiers, si elle était déjà une norme dans le contexte d’application d’entreprises au cours des années 2000, a pu voir son modèle s’étendre à de nombreuses solutions Web. Ce modèle repose sur l’utilisation de technologies exécutées par le navigateur. Or, il arrive parfois que cette couche doive gérer une partie de l’authentification de l’utilisateur, pourtant une recommandation courante sur l’authentification est qu’elle ne doit jamais être côté client. Aussi, les cookies devraient toujours posséder l’attribut HttpOnly, empêchant leur lecture par une couche Javascript et ce afin d’empêcher tout vol de session lors d’une attaque de type XSS. Pourtant, cet attribut empêche littéralement l’application front-end de travailler avec ces éléments. Comment gérer au mieux ces questions sur ce type de déploiement ?

Lire l'article

Cybersécurité bancaire en Europe : les nouvelles mesures de la BCE, les risques et les solutions

La cybersécurité est devenue une préoccupation majeure pour le secteur financier, confronté à une digitalisation croissante de ses activités. Alors que la Banque Centrale Européenne (BCE) intensifie ses efforts pour renforcer la résilience face aux cybermenaces, cet article explore le contexte actuel, les initiatives de la BCE et les recommandations de Digitemis pour faire face à l’intensification des menaces sur le secteur.

Lire l'article