
PoCs fonctionnels pour trois vulnérabilités de NextGen Connect 4.5.2.
Preuves de concept fonctionnelles pour trois vulnérabilités accessibles par le réseau dans NextGen Connect (Mirth Connect) 4.5.2. Les harnais exécutent l'image de conteneur officielle, ne créent que la configuration de canal nécessaire à la découverte, exécutent l'attaque depuis un conteneur séparé, et échouent à moins que l'effet de sécurité revendiqué ne soit observé.
Cette revue a utilisé la méthodologie publique Refute-or-Promote et son playbook d'orchestration open-source. La méthode sépare la génération de candidats de la revue adversariale à contexte neuf et exige une preuve empirique avant promotion. Le code source vulnérable 4.5.2 et la méthode de revue sont tous deux publics : toute personne disposant d'un accès ordinaire à un modèle, du code source, et de la capacité de valider en toute sécurité dans un laboratoire peut appliquer le même processus, et aurait pu découvrir ces classes de bugs de manière indépendante. La confidentialité autour d'un rapport ne rend pas la capacité de revue sous-jacente privée.
Ce sont de véritables exploits, pas des tests unitaires de parseur. Ils récupèrent un hash de mot de passe actif via une injection SQL, exfiltrent le contenu de fichiers locaux à la cible via deux chemins XML non authentifiés distincts, et bloquent les opérations adossées à Derby jusqu'au redémarrage.
| CVE | Découverte | Attaquant | Impact démontré | CVSS 3.1 / 4.0 | PoC |
|---|
| CVE-2026-82583 | Injection selectLimit dans _getTables | Utilisateur API authentifié | Export de la table des mots de passe vers la racine web publique ; gel de Derby jusqu'au redémarrage | 8.3 / 7.2 | sql-selectlimit-injection/ |
| CVE-2026-78224 | XXE dans l'étape XSLT | Client de canal non authentifié | Lecture OOB d'un fichier local à la cible ; DoS par entité lente local au canal | 8.2 / 8.8 | xslt-step-xxe/ |
| CVE-2026-82578 | XXE dans l'adaptateur XML Batch | Client de canal non authentifié | Lecture OOB d'un fichier local à la cible | 7.5 / 8.7 | xml-batch-xxe/ |
CVSS 3.1 et 4.0 sont des standards différents ; les scores appariés ne constituent pas une comparaison avant/après.
Les trois ont été reproduits contre :
nextgenhealthcare/connect:4.5.2
sha256:4afa295cfe7c5ffd596efee69594157fea87202e33d66bb4a98a52db4598f836
NextGen a signalé en privé que le problème XSLT a été corrigé dans la version 4.7.1 et que l'injection SQL et les problèmes XML Batch ont été corrigés dans la version 4.7.2. L'avis CISA ICSMA-26-253-01 considère 4.7.1 et antérieures comme affectées et recommande 4.7.2 ou ultérieure. Les versions postérieures à 4.5 sont propriétaires, il n'existe donc pas d'image corrigée publique à partir de laquelle ce dépôt pourrait fournir le même type de contrôle négatif reproductible utilisé pour une version corrective open-source.
Un pied dans la place authentifié sur l'API administrative devient un accès à des données que
le compte n'était pas censé exporter. L'exploit fourni écrit la ligne active
PERSON_PASSWORD sous public_html et prouve que le fichier résultant est téléchargeable
sans authentification. L'étape qui compte est de passer d'une action API restreinte à un
fichier sur disque qui n'a plus du tout besoin de la session de l'attaquant.
Dans un environnement d'intégration réel, la base de données peut décrire des canaux, des points de terminaison et des identifiants utilisés pour atteindre des bases de données, des serveurs SFTP, des relais de messagerie, des API et d'autres systèmes cliniques. Un test contrôlé séparé a récupéré un mot de passe de connecteur délibérément implanté à partir du XML de canal exporté. Cela rend la primitive utile pour la cartographie d'environnement et le vol de secrets ; l'utilisation de tout identifiant récupéré contre un système en aval n'a pas été testée et n'est pas revendiquée.
Le volet optionnel de déni de service gèle la base de données Derby intégrée. Les appels API adossés à la base de données expirent alors, la même injection ne peut pas dégeler son propre point d'entrée, et un redémarrage du processus est nécessaire. C'est une charge de récupération pratique pour les installations adossées à Derby, pas la preuve que des bases de données de production externes se comportent de la même manière.
Une fois qu'un canal XSLT affecté est déployé, l'attaquant n'a besoin d'aucun compte Mirth. Le XML entrant fait que le service lit un fichier local à la cible et envoie son contenu à un callback contrôlé par l'attaquant. C'est utile même lorsque la réponse normale du canal ne contient pas les données transformées et que l'attaquant ne peut pas lire l'historique des messages.
Le client autonome accepte une URI file: monoligne choisie par l'appelant. Des fichiers tels
que des identifiants d'hôte, des jetons, des fragments de configuration ou des identifiants
sont pratiquement précieux si le compte de service Mirth peut les lire et que le serveur peut
atteindre le callback. La preuve fournie n'utilise qu'un canari généré et ne revendique pas la
récupération universelle de fichiers arbitraires, le transport multiligne, ou un accès au-delà
du compte de service.
Une entité externe lente occupe également le canal victime par défaut à un seul thread. Cela peut retarder ou arrêter l'interface clinique spécifique mappée à ce canal jusqu'à ce que l'entité soit libérée. Le canal de contrôle et l'API administrative restent sains, il s'agit donc d'une perturbation locale au canal plutôt que d'une panne de tout le serveur.
Lorsqu'un mode batch XML affecté est activé, un expéditeur non authentifié peut utiliser le corps batch brut pour déclencher le même type de divulgation de fichier sortante. Le serveur renvoie HTTP 500, mais l'attaquant dispose déjà du contenu du fichier cible uniquement via le callback OOB. Cela rend la faille pratiquement utile comme chemin d'exfiltration aveugle même lorsqu'un test basé uniquement sur le code de réponse rejetterait la requête comme un échec de parseur.
Le traitement batch est désactivé par défaut, le mode split doit atteindre le parseur adossé à XPath, et une sortie réseau serveur est requise. Ce dépôt ne revendique pas de déni de service démontré pour CVE-2026-82578.
Prérequis : Bash, Docker, Linux x86-64, et un accès réseau pour le pull initial de l'image. Les deux images sont épinglées par digest. Aucun port hôte n'est publié ; la cible et l'attaquant communiquent uniquement sur un bridge Docker interne spécifique à la tâche.
./run-all.sh
Ou exécuter une seule découverte :
./sql-selectlimit-injection/poc/run.sh
./xslt-step-xxe/poc/run.sh
./xml-batch-xxe/poc/run.sh
Chaque invocation crée des conteneurs nommés de manière unique et un réseau bridge,
enregistre evidence/current-run.log, et supprime ses propres ressources de laboratoire en
sortie. Les fichiers evidence/vulnerable-4.5.2.log versionnés sont des transcriptions d'un
rejeu sur Linux x86-64.
PERSON_PASSWORD et récupère le fichier
sans authentification. Son volet optionnel de laboratoire invoque SYSCS_FREEZE_DATABASE,
après quoi les appels API adossés à la base de données cessent de répondre jusqu'au
redémarrage de la cible.file: monoligne
locale à la cible ; le wrapper de laboratoire utilise un canari aléatoire et une assertion
exacte. La même exécution prouve l'indisponibilité locale au canal avec un second canal sain
et l'API admin, puis vérifie la récupération.Element Name du produit. L'attaquant
ne contrôle que le corps batch non authentifié. Son client autonome a le même mode
--file-uri et la même limitation OOB monoligne.À exécuter uniquement dans un laboratoire jetable que vous possédez. Le PoC SQL gèle délibérément la base de données cible ; la récupération nécessite de redémarrer la cible. Les PoC XXE lisent un canari monté par défaut, mais leurs clients autonomes acceptent des URL d'écoute arbitraires et des URI de fichiers monolignes locales à la cible. Ne les dirigez jamais vers des systèmes sans autorisation.
Selon la CISA, mettre à niveau vers Connect 4.7.2 ou ultérieure. Lorsqu'une mise à niveau immédiate n'est pas possible, restreindre l'API administrative aux réseaux de gestion de confiance, supprimer les étapes XSLT inutiles, désactiver le traitement batch XML là où il n'est pas requis, et bloquer la sortie réseau serveur non nécessaire. Ces mesures réduisent l'exposition mais ne réparent pas le code vulnérable.
Les découvertes 1 et 3 doivent être créditées à Abhinav Agarwal. La découverte 2 a été indépendamment découverte par Abhinav Agarwal et signalée pour la première fois à NextGen par Youngdu. NextGen a coordonné les correctifs et l'attribution des CVE.
Ce dépôt est destiné à aider les défenseurs à transformer le texte d'un avis en comportement observable et testable. Dans une copie isolée d'un environnement, les défenseurs peuvent l'utiliser pour :
_getTables suspectes, les procédures
inattendues d'export ou de gel de Derby, les nouveaux fichiers sous public_html, le XML
entrant contenant un DOCTYPE, et les callbacks provenant de Mirth après des erreurs de
listener ;Chaque PoC s'exécute dans un conteneur, épingle ses images par digest, et échoue en mode fermé à moins qu'un canari aléatoire ne revienne. Un défenseur peut reproduire la véritable frontière de sécurité plutôt que de se fier à une capture d'écran ou à un numéro de sévérité. Il existe pour aider les gens à découvrir ce qu'ils exécutent, à le tester, et à confirmer qu'un correctif a fonctionné. Il n'est pas là pour être pointé vers un hôpital.