30 novembre 2020

[CVE-2020-28929] [CVE-2020-28930] [CVE-2020-28931] : Multiples vulnérabilités au sein d’EPSON EPS TSE Server 8

Introduction

Il y a quelques mois, BSSI a effectué un test d’intrusion dont le produit EPSON EPS TSE Server 8 figurait dans le périmètre du client.

Cet article décrit trois vulnérabilités découvertes par l’équipe au cours de ces tests. Elles affectent l’interface d’administration EPS TSE Server 8 (version 21.0.11).

L’interface d’administration Web EPS TSE Server 8 permet d’administrer et de configurer les différentes imprimantes fiscales connectées au serveur :

Une image contenant capture d’écran

Description générée automatiquement

Vulnérabilité n°1 – Récupération des identifiants administrateurs sans authentification (CVE-2020-28929)

La première vulnérabilité résulte d’un défaut de contrôle d’accès permettant à un attaquant non authentifié de télécharger une archive des fichiers de journalisation du serveur contenant les identifiants (noms d’utilisateur et empreintes de mot de passe) des comptes administrateurs.

Les tests menés par les auditeurs se sont déroulés en deux étapes :

  1. Boîte noire : La première étape a permis de tester l’application, sans information du client, à l’instar d’un attaquant.
  2. Boîte grise : La seconde étape consistait à auditer la sécurité de l’application grâce à un compte fourni par les équipes techniques du client, à l’instar d’un employé malveillant.

Dans un premier temps, une navigation automatique via fuzzing des dossiers et fichiers (à l’aide d’outils tels que Dirb, Patator ou encore WFuzz) a été conduite en boîte noire. Le fuzz a permis de découvrir l’existence du fichier « http://<IP>/maintenance/troubleshoot.php », mais l’interface web ne retournait qu’une page blanche.

Ensuite une navigation manuelle, en boîte grise, de l’application a permis de tester les fonctions présentent au sein de l’interface d’administration. L’analyse des requêtes a permis de constater que la fonctionnalité d’export de log utilisait l’URL « http://<IP>/maintenance/troubleshoot.php?download=1 ».

Une requête GET à cette URL permet le téléchargement d’une archive contenant de nombreux fichiers de journalisation :

L’analyse de ces fichiers journaux a permis de retrouver l’ensemble des identifiants de l’interface ainsi que l’empreinte de leur mot de passe :

Ici le couple « admin / $6$seh$Hg0i6hGTSqOJRESk1E/RJnLVvUDh/Q7l0N9zHsH5xODtQZkR/ETDIHc1Up57Yj7q3JoFwIUrijyQOtqW/z54C1 » a pu être retrouvé. L’utilisation de la bibliothèque Python crypt permet de retrouver l’empreinte du mot de passe du compte administrateur :

Afin de tester les mécanismes d’authentification, les auditeurs ont tenté de récupérer l’archive contenant les fichiers journaux sans être authentifiés. La fonctionnalité d’export ne vérifiant pas la présence d’un jeton d’authentification, ces fichiers ont pu être récupérés sans authentification.

Un attaquant non authentifié est donc en mesure d’obtenir les couples « identifiants / empreintes de mot de passe » des comptes de l’appareil pour ensuite tenter de les casser (attaque hors ligne) afin d’obtenir un accès administrateur sur l’appareil.

Vulnérabilité n°2 – Injection JavaScript (XSS) sur la page de gestion d’utilisateur (CVE-2020-28930)

La seconde vulnérabilité identifiée au cours des tests permet à un utilisateur authentifié d’injecter du code malveillant exécuté côté client (HTML/JavaScript) dans les pages web consultées par d’autres utilisateurs (XSS stockée).

Les tests menés par les auditeurs ont permis d’identifier un paramètre vulnérable aux injections de type Cross-Site Scripting (XSS). Ce dernier a été identifié dans l’onglet de gestion des utilisateurs de l’interface d’administration (https://<IP>/settings/users.php).

En effet, l’absence de filtrage des entrées dans le nom d’utilisateur permet à un attaquant d’exploiter les fonctionnalités « mettre à jour » et « supprimer« , afin d’injecter du code JavaScript malveillant :

Le nom d’utilisateur suivant a été utilisé afin d’exécuter une charge utile malveillante JavaScript : a’%2Balert(document.domain)%2B’

Note : L’interception des requêtes à l’aide d’un proxy (Burp par exemple) est nécessaire pour créer un utilisateur ayant du code malveillant pour nom d’affichage.

Une fois l’utilisateur créé, dès lors que l’administrateur souhaite modifier ou supprimer l’utilisateur malveillant, la charge JavaScript est exécutée :

Les cookies de session de l’appareil étant générés sans les attributs de sécurité « Secure » et « HttpOnly », il est possible de dérober le jeton de session d’un autre administrateur par ce moyen.

L’appareil ne dispose que d’un seul type de compte (administrateur) et l’exploitation de cette vulnérabilité nécessite au préalable de posséder un tel compte. Cette vulnérabilité peut donc être couplée avec la vulnérabilité n°3 (CSRF) ou être utilisée par un employé malveillant qui souhaiterait piéger un autre administrateur avant de réaliser des actions malveillantes sur l’appareil.

Vulnérabilité n°3 – Vulnérabilité de type « Cross-Site Request Forgery » sur l’ensemble de l’interface d’administration (CSRF) (CVE-2020-28931)

La troisième vulnérabilité permet à un attaquant non authentifié de forcer un utilisateur authentifié (c’est-à-dire, un administrateur) à exécuter des requêtes POST à son insu. Cette vulnérabilité permet notamment à un attaquant ne possédant pas de compte valide d’en obtenir un en forçant un administrateur à créer un nouveau compte à haut privilège à son insu.

En effet, les tests menés par les auditeurs ont permis de mettre en avant l’absence de protection anti Cross-Site Request Forgery.

L’attaque consiste alors à provoquer l’envoi de requêtes (par exemple, GET ou POST) par une victime vers un site vulnérable (V), à son insu et en son nom (cf. figures 1 et 2). L’envoi des requêtes se fait lorsque la victime visite un site malveillant ou compromis (M), ou clique sur un lien. L’attaque de type CSRF se fait toujours en aveugle, car l’attaquant provoque l’envoi d’une ou plusieurs requêtes sans obtenir de réponse.

Source : https://www.cert.ssi.gouv.fr/information/CERTA-2008-INF-003/

Conclusion

Suite à la découverte de ces vulnérabilités, l’équipe d’audit de BSSI a contacté et déclaré les 3 vulnérabilités à l’équipe responsable du produit concerné au sein d’EPSON. Un correctif a été mis à disposition à partir du 15 octobre 2020 (correspondant à la version 21.0.18). Ce correctif corrige effectivement les 3 vulnérabilités en dépit du fait que cela n’est pas indiqué dans le changelog.

Ces vulnérabilités sont maintenant connues sous les CVE 2020-28929, CVE 2020-28930 et CVE 2020-28931.

Chronologie

29/07/2020 – Découverte de la vulnérabilité
24/08/2020 – Prise de contact avec l’équipe Sécurité d’EPSON
06/10/2020 – Relance de l’équipe
15/10/2020 – Proposition de correction des vulnérabilités via le correctif 21.0.18
26/10/2020 – Demande de vérification de correction
13/11/2020 – Relance de l’équipe
30/11/2020 – Divulgation des vulnérabilités (notification à EPSON + 90j)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *