Page cover

☠️leHACK 2024 - Challenge DLS

Initié en 2003 par un groupe de personnes réunies sous le nom de Hackerz Voice et inspiré par le célèbre événement de hacking américain nommé DEFCON, leHACK fête ses 20 ans en 2024.

Pour l'occasion, en tant qu'ancien étudiant du Pôle Supérieur De La Salle (association SHIELDS), accompagné de la marraine de la promotion 2024 Claire Kemp, fondatrice de la société IT-Gnosis, j'ai eu l'occasion de créer un challenge pour animer le stand.

Contexte

Le RSSI du CHU HACK vous sollicite pour un test d’intrusion sur son système d’information hospitalier (SIH). Il attire votre attention sur un serveur utilisé pour l’imagerie médicale. Apparemment, les équipes techniques assurent l’avoir bien sécurisé. Prouvez-lui le contraire en lui donnant le nom du patient ayant réalisé un IRM cérébral.

Le serveur est accessible sur l'URL https://medic.hopto.org

Step 1 - Reconnaissance

On commence par regarder ce que contient notre serveur web :

  • nginx/1.18.0

  • Une balise html avec le texte "Orthanc"

Qu'est ce que "Orthanc" ?

ORTHANC est une plateforme open-source dédiée à la gestion et à l'archivage des images médicales, principalement au format DICOM (Digital Imaging and Communications in Medicine). Elle permet de stocker, de manipuler et de partager des images médicales, facilitant ainsi l'interopérabilité entre différents systèmes et dispositifs médicaux. ORTHANC est utilisée dans les hôpitaux et les cliniques pour gérer les données d'imagerie médicale de manière sécurisée et efficace. Elle propose une API RESTful qui permet l'intégration avec d'autres logiciels médicaux et outils de visualisation.

  • On apprend qu'il y a une API.

La documentation est disponible en ligne :

On apprend aussi qu'une CVE est sortie en 2023 :

Orthanc before 1.12.0 allows authenticated users with access to the Orthanc API to overwrite arbitrary files on the file system, and in specific deployment scenarios allows the attacker to overwrite the configuration, which can be exploited to trigger Remote Code Execution (RCE).

Un POC est disponible en ligne :

Il demande plusieurs prérequis :

Infos d'internet pour les identifiants :

Conf par défaut trouvable sur internet :

Le POC met à disposition un script pour vérifier la vulnérabilité :

3KB
Ouvrir

Contenu de mon fichier host.txt :

On découvre que l'exploit est impossible :

Step 2 - Initial Access

En analysant le code du POC, on découvre qu'il utilise plusieurs endpoint :

  • /instances

  • /tools/reset

  • /tools/execute-script

Le seul endpoint fonctionnel semble être /tools/execute-script, les autres sont trigger par le reverse proxy nginx en frontal du serveur Orthanc, inexploitable.

En utilisant POST, on peut bien interroger l'endpoint 👍 :

Step 3 - Lateral Movement

On peut se renseigner sur l'endpoint /tools/execute-script dans la doc de l'API :

  • Il est possible d'exécuter des scripts en LUA (exemple de payload dans le POC d'ailleurs)

Cette commande permet de faire un simple print en LUA :

Celle-ci permet de lancer la commande id et de récupérer son résultat :

Maintenant que nous avons notre RCE sur le serveur Orthanc, on doit essayer de retrouver sa base de données (cf Contexte du challenge).

On peut par exemple find sur les fichiers où l'utilisateur "orthanc" est propriétaire :

Le résultat /var/lib/orthanc/db-v6/8f/33/8f337f9b-0f19-4904-9aa2-119952eb4281 est intéréssant.

On peut faire un file dessus, on remarque qu'il s'agit d'un fichier DICOM (image radio) :

Step 4 - Exfiltration

Ici les possibilités sont infinies 😄, voici une méthode :

  • On lis le fichier.

  • On l'encode en b64 (pour faciliter le transfert 🚎).

  • On le décode côté attaquant et on le place dans un fichier.

Ensuite, on peut soit faire un strings sur le fichier pour récupérer les métadonnées de la radio :

  • On identifie le nom du patient "Yves Remord", née le 25/10/1995

Pour un peu plus de fun, on peut aussi ouvrir la radio dans un tool comme MicroDicom DICOM Viewer :

Voilà ! à tester dans vos audits d'hopitaux, en maitrisant les payloads sur /execute-script... car un sleep 10000 sur l'endpoint coupe tout le serveur... 👏


Sources du challenge

Fichier docker-compose.yml

Fichier Dockerfile

Fichier curl-script.sh

Fichier orthanc.json

33KB
Ouvrir
Configuration Orthanc

Fichier patient1.dcm

3MB
Ouvrir
Fichier DICOM contenant le flag

Mis à jour

Ce contenu vous a-t-il été utile ?