
Preuve de concept pour CVE-2026-89282 : détournement de l'ordre de recherche de DLL proxy dans les installations Windows d'Apache Lounge, permettant une élévation de privilèges vers SYSTEM lors du redémarrage du service.
Auteur : Ashish Kunwar (@D0rkerDevil)
Date : 2026-10-17
CVE : CVE-2026-89282
CWE : CWE-427 (Élément de chemin de recherche non contrôlé) / CWE-732 (Attribution incorrecte de permissions pour une ressource critique)
CVSS 3.1 : 7.3 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Corrigé dans : Apache Lounge 2.4.68-260920 Win64 (20 septembre 2026)
La distribution Windows Apache Lounge du serveur HTTP Apache (antérieure au build 2.4.68-260920) s'installe avec des ACL par défaut non sécurisées qui accordent à BUILTIN\Users un accès en écriture (WD + AD) à l'arborescence du répertoire d'installation, y compris C:\Apache24\bin\. Combiné à l'ordre de recherche standard des DLL sous Windows — qui charge depuis le répertoire de l'application avant System32 pour les DLL absentes de la clé de registre KnownDLLs — tout utilisateur local standard peut déposer une DLL proxy qui exécute du code arbitraire en tant que NT AUTHORITY\SYSTEM lors du redémarrage du service Apache.
Ce PoC démontre l'exploitation complète : un utilisateur à faibles privilèges dépose une DLL proxy VCRUNTIME140.dll avec 71 exportations PE en redirection dans C:\Apache24\bin\. Au redémarrage d'Apache, httpd.exe (s'exécutant en tant que LocalSystem) charge le proxy, qui redirige tous les appels légitimes vers la vraie DLL tout en exécutant une charge utile à privilèges SYSTEM dans DllMain. Apache continue de servir normalement — sans plantage ni interruption.
L'installateur Windows d'Apache Lounge crée C:\Apache24\ sous C:\, qui sous Windows hérite par défaut des permissions Authenticated Users: Modify. L'installateur ne durcit pas ces ACL. Cela accorde à tout utilisateur local la capacité d'écrire de nouveaux fichiers dans :
| Répertoire | Impact |
|---|---|
C:\Apache24\bin\ | Détournement de DLL — 21 DLL système détournables |
C:\Apache24\modules\ | Injection directe de module |
C:\Apache24\conf\ | Altération de la configuration |
C:\Apache24\htdocs\ | Modification du contenu web |
Le service Apache24 s'exécute en tant que LocalSystem (SYSTEM) avec AUTO_START, ce qui fait que toute DLL chargée depuis le répertoire de l'application s'exécute au plus haut niveau de privilège Windows.
# Cross-compile from Linux/macOS (mingw-w64)
x86_64-w64-mingw32-gcc -shared -o VCRUNTIME140.dll vcruntime140_hijack.c vcruntime140.def \
-Wl,--enable-stdcall-fixup -s
# Or compile on Windows (MSVC)
cl /LD vcruntime140_hijack.c /link /DEF:vcruntime140.def /OUT:VCRUNTIME140.dll
REM Create hard link to the real DLL for export forwarding
mklink /H "C:\Apache24\bin\vcruntime140_orig.dll" "C:\Windows\System32\VCRUNTIME140.dll"
REM Plant the proxy DLL
copy VCRUNTIME140.dll "C:\Apache24\bin\VCRUNTIME140.dll"
La DLL plantée se déclenche au prochain redémarrage du service Apache. Sur un serveur de production, cela se produit via :
httpd -k restart)Après le redémarrage, httpd.exe charge notre DLL proxy en tant que SYSTEM. La charge utile de DllMain s'exécute :
Administrators21 DLL système chargées par httpd.exe ne figurent pas dans la clé de registre KnownDLLs et peuvent être détournées depuis C:\Apache24\bin\ :
| DLL | KnownDLL | Détournable |
|---|---|---|
| VCRUNTIME140.dll | Non | Oui — exploitée |
| ucrtbase.dll | Non | Oui |
| KERNELBASE.dll | Non | Oui |
| bcrypt.dll | Non | Oui |
| msvcp_win.dll | Non | Oui |
| CRYPTSP.dll | Non | Oui |
| rsaenh.dll | Non | Oui |
| CRYPTBASE.dll | Non | Oui |
| bcryptPrimitives.dll | Non | Oui |
| mswsock.dll | Non | Oui |
| napinsp.dll | Non | Oui |
| DNSAPI.dll | Non | Oui |
| IPHLPAPI.DLL | Non | Oui |
| winrnr.dll | Non | Oui |
| nlansp_c.dll | Non | Oui |
| wshbth.dll | Non | Oui |
| rasadhlp.dll | Non | Oui |
| fwpuclnt.dll | Non | Oui |
| ntdll.dll | Non | Oui |
| win32u.dll | Non | Oui |
| gdi32full.dll | Non | Oui |
Un utilisateur standard ne peut pas déclencher lui-même le redémarrage d'Apache sur une configuration Windows Server 2022 par défaut. Plus de 16 méthodes ont été testées de manière exhaustive — toutes ont échoué :
TerminateProcess sur les PID httpd → ACCESS_DENIEDnet stop/start Apache24 → la SDDL refuse RP/WP à l'ouverture de session interactive/servicesc stop Apache24 → Accès refuséhttpd -k restart → accès SCM refuséSeShutdownPrivilege non détenuschtasks /ru SYSTEM → nécessite un administrateurLe déclenchement provient de la maintenance de routine du serveur, inévitable sur tout système de production.
Immédiat (manuel) :
icacls "C:\Apache24" /remove:g "BUILTIN\Users" /T
icacls "C:\Apache24" /grant "BUILTIN\Users:(OI)(CI)(RX)" /T
Permanent : Mettez à jour vers Apache Lounge 2.4.68-260920 ou une version ultérieure, qui est livrée avec des ACL d'installateur corrigées.
Défense en profondeur : Déployez des politiques d'atténuation des processus pour restreindre le chargement des DLL aux binaires signés.
| Fichier | Description |
|---|---|
vcruntime140_hijack.c | Code source de la DLL proxy — charge utile DllMain + preuve de concept |
vcruntime140.def | Définitions de transfert d'exportation (71 exportations → vcruntime140_orig.dll) |
deploy_hijack.bat | Script de déploiement automatisé |
| Date | Événement |
|---|---|
| 2026-09-20 | Apache Lounge publie 2.4.68-260920 avec le correctif ACL |
| 2026-09-22 | CVE-2026-89282 publiée par CERT/CC |
| 2026-10-16 | Découverte indépendante + PoC complet (ce travail) |
| 2026-10-17 | Confirmé comme doublon de CVE-2026-89282 ; publication publique |
Ce PoC est publié à des fins éducatives et de tests de sécurité autorisés uniquement. Licence MIT.
Découvert et documenté de manière indépendante par @D0rkerDevil. Chaîne d'exploitation complète développée avant d'avoir connaissance de CVE-2026-89282.