Threat Intelligence

CVE-2026-8037 : comment 16 octets de mémoire heap non initialisée ouvrent un root shell sur Kemp LoadMaster

Admin CyberAfrik 20 August 2026 36 lectures
CVE-2026-8037 : comment 16 octets de mémoire heap non initialisée ouvrent un root shell sur Kemp LoadMaster

Rapport CTI technique du 20 août 2026

Résumé exécutif

CVE-2026-8037 est une vulnérabilité d'injection de commande pré-authentification affectant Progress Kemp LoadMaster, un load balancer et contrôleur de livraison d'applications déployé en bordure de nombreux réseaux d'entreprise. Le défaut, noté 9.6 sur l'échelle CVSS, permet à un attaquant non authentifié d'exécuter des commandes arbitraires sur l'appliance dès lors que l'API est activée. CISA l'a ajoutée à son catalogue Known Exploited Vulnerabilities le 7 août 2026, après que la société de threat intelligence KEVIntel a recensé 792 tentatives d'exploitation en 41 jours, provenant de 65 adresses IP réparties dans 18 pays.

Le mécanisme sous-jacent est instructif pour quiconque audite du code C d'appliance réseau. Le correctif publié par Progress ne modifie qu'une seule fonction, escape_quotes(), sans ajouter le moindre caractère à la liste des symboles échappés. La faille ne tient donc pas à un défaut de filtrage classique mais à un buffer heap alloué avec malloc() jamais initialisé et jamais terminé par un octet nul, ce qui permet à sprintf() de continuer sa lecture bien au-delà des données prévues et de récupérer, dans un chunk mémoire libéré voisin, une charge utile préalablement pulvérisée par l'attaquant via le parseur JSON de l'API.

Chronologie

DateÉvénement
4 juin 2026Progress publie l'avis de sécurité et le correctif pour CVE-2026-8037 (LoadMaster GA 7.2.63.2, LTSF 7.2.54.18)
29 juin 2026Début observé de l'exploitation active selon watchTowr Labs, qui publie son analyse technique le jour même
Juillet 2026eSentire signale des tentatives d'exploitation en cours, majoritairement infructueuses
4 août 2026Dernière vague d'activité recensée par KEVIntel : cinq tentatives en une journée
7 août 2026CISA ajoute CVE-2026-8037 au catalogue KEV, avec échéance de correction au 10 août pour les agences fédérales (BOD 26-04)
20 août 2026Total cumulé de 792 tentatives d'exploitation documentées depuis 65 IP distinctes dans 18 pays

Fiche vulnérabilité

CVE-2026-8037 | CVSS 9.6 | Progress Kemp LoadMaster, API accessible

Injection de commande OS pré-authentification (CWE-77) rendue exploitable par une lecture hors limites sur segment libéré du tas (CWE-457, use of uninitialized resource ; apparenté à CWE-825, expired pointer dereference sur chunk réutilisé). Versions affectées : LoadMaster GA 7.2.63.1 et antérieures, LoadMaster LTSF 7.2.54.17 et antérieures, lorsque l'API de gestion est exposée. Découverte attribuée à Syed Ibrahim Ahmed (TrendAI Research), publiée sous la référence ZDI-26-342.

Conditions d'exploitation : accès réseau à l'endpoint /accessv2 de l'API, aucune authentification requise, aucune interaction utilisateur. La complexité d'exploitation est réelle mais documentée en détail par watchTowr Labs, qui a publié une preuve de concept complète le 29 juin 2026 : PoC disponible, oui, source watchTowr Labs. Patch disponible depuis le 4 juin 2026 (LoadMaster GA 7.2.63.2, LTSF 7.2.54.18) ; à défaut de mise à jour immédiate, restreindre l'accès réseau à l'API sur liste blanche d'IP constitue la seule mitigation partielle documentée.

Diagramme de la chaîne d'attaque

Analyse technique

Étape 1 : un correctif qui ne change presque rien

La fonction escape_quotes() sert à neutraliser les apostrophes dans les valeurs apiuser et apipass avant leur insertion dans une commande shell du type validuser -u '' -p ''. Avant le 4 juin, elle allouait son buffer de sortie avec malloc() et ne posait aucun octet nul de fin après l'expansion des apostrophes échappées. Le correctif se limite à deux changements : remplacer malloc() par calloc() (buffer zérotté par défaut) et écrire explicitement un octet nul après la dernière écriture. Aucun caractère supplémentaire n'est ajouté à la liste des symboles filtrés, ce qui a immédiatement mis la puce à l'oreille des chercheurs de watchTowr : le bug n'était pas un défaut de filtrage, mais un défaut de terminaison de chaîne.

Étape 2 : ce que révèle un chunk de tas non initialisé

Quand malloc() réutilise un chunk précédemment libéré, il ne l'efface pas. Les premiers octets contiennent encore les métadonnées de l'allocateur (pointeur tcache next, clé de protection anti double-free) suivis des données de l'ancien occupant du chunk. Si le buffer résultant n'est jamais explicitement terminé par un octet nul, toute fonction qui le traite comme une chaîne C, ici sprintf() via __sprintf_chk(), continuera de lire au-delà de la frontière logique du buffer jusqu'à tomber sur un octet nul, où qu'il se trouve en mémoire.

Étape 3 : effacer les métadonnées et pulvériser la charge utile

L'endpoint /accessv2 accepte un corps JSON avec les champs apiuser et apipass. En envoyant quatre apostrophes comme valeur d'apiuser, l'attaquant déclenche l'expansion d'échappement : chaque apostrophe devient la séquence de quatre octets '\''. Quatre apostrophes produisent donc seize octets, exactement la taille des métadonnées d'allocateur situées en tête du chunk libéré adjacent. En parallèle, la requête ajoute des dizaines de clés JSON supplémentaires (g0, g1, g2...) contenant chacune une charge du type AAAA...'; cat /etc/passwd #, dans le but de pulvériser cette charge sur le tas et d'augmenter la probabilité qu'une copie atterrisse juste après le chunk réservé à apiuser.

Étape 4 : concaténation et exécution via system()

Lorsque le chunk pulvérisé se positionne au bon endroit, __sprintf_chk() construit la commande finale en lisant le buffer apiuser échappé, dépasse sa frontière faute d'octet nul, traverse les seize octets de métadonnées désormais écrasés par les apostrophes échappées, puis continue dans le chunk voisin jusqu'à rencontrer la charge injectée. La commande complète, incluant le point-virgule et la commande arbitraire de l'attaquant, est alors passée telle quelle à system(). Résultat : exécution de commande arbitraire avec les privilèges du processus API, sans authentification.

Indicateurs de compromission

TypeValeur
IP attaquante192.42.116[.]58
IP attaquante192.42.116[.]105
IP attaquante146.70.139[.]154
Endpoint cibléPOST /accessv2
Motif de requêteCorps JSON avec apiuser contenant des séquences d'apostrophes répétées et clés supplémentaires (g0, g1, g2...) porteuses de charges shell
Volume observé792 tentatives, 65 IP sources, 18 pays, sur 41 jours (source KEVIntel)

MITRE ATT&CK

Aucune cartographie officielle de l'acteur ou de la campagne n'a été publiée par CISA ou par les vendeurs cités ; le tableau suivant reflète une lecture technique de la chaîne d'exploitation, pas une attribution.

TactiqueTechniqueIDJustification
Initial AccessExploit Public-Facing ApplicationT1190Endpoint API /accessv2 exposé sans authentification
ExecutionCommand and Scripting Interpreter: Unix ShellT1059.004Commande injectée exécutée via system() côté appliance
Defense EvasionObfuscated Files or InformationT1027Encodage/pulvérisation JSON pour placer la charge en mémoire hors du corps de requête visible
DiscoverySystem Information DiscoveryT1082Commande de démonstration cat /etc/passwd utilisée dans les PoC publics

Remédiation : checklist opérationnelle

  1. Mettre à jour immédiatement vers LoadMaster GA 7.2.63.2 ou LTSF 7.2.54.18 (ou versions ultérieures).
  2. Si la mise à jour ne peut être appliquée sous 24 à 48h, désactiver l'accès à l'API de gestion depuis Internet et le restreindre à un réseau d'administration dédié.
  3. Auditer les journaux d'accès à /accessv2 sur les 41 derniers jours pour rechercher des corps de requête JSON contenant des séquences d'apostrophes multiples ou un nombre anormal de clés (g0, g1, g2...).
  4. Comparer les IP sources des connexions à l'API avec la liste d'IOC publiée par KEVIntel et watchTowr Labs.
  5. Pour les entités fédérales américaines soumises à BOD 26-04, documenter la conformité au correctif au regard de l'échéance du 10 août 2026 déjà dépassée.
  6. En cas de suspicion de compromission antérieure au patch, considérer l'appliance comme potentiellement compromise et procéder à une réinitialisation complète plutôt qu'à un simple correctif à chaud.

Sources

Tags : CVE-2026-8037Kemp LoadMasterProgresscommand injectionCWE-77uninitialized heapKEV CISARCE pré-authentification
Partager cet article