
Prueba de concepto para CVE-2026-89282: secuestro del orden de búsqueda de DLL proxy en instalaciones de Apache Lounge para Windows que permite una escalada de privilegios a SYSTEM al reiniciar el servicio.
Autor: Ashish Kunwar (@D0rkerDevil)
Fecha: 2026-10-17
CVE: CVE-2026-89282
CWE: CWE-427 (Elemento de ruta de búsqueda no controlado) / CWE-732 (Asignación incorrecta de permisos para un recurso crítico)
CVSS 3.1: 7.3 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Corregido en: Apache Lounge 2.4.68-260920 Win64 (20 de septiembre de 2026)
La distribución Windows de Apache Lounge de Apache HTTP Server (anterior a la compilación 2.4.68-260920) se instala con ACL predeterminadas inseguras que otorgan a BUILTIN\Users acceso de escritura (WD + AD) al árbol del directorio de instalación, incluido C:\Apache24\bin\. Combinado con el orden de búsqueda de DLL estándar de Windows —que carga desde el directorio de la aplicación antes que desde System32 para las DLL que no están en la clave de registro KnownDLLs—, cualquier usuario local estándar puede colocar una DLL proxy que ejecute código arbitrario como NT AUTHORITY\SYSTEM cuando se reinicie el servicio Apache.
Esta PoC demuestra la explotación completa: un usuario con bajos privilegios coloca un VCRUNTIME140.dll proxy con 71 reenviadores de exportación PE en C:\Apache24\bin\. Al reiniciarse Apache, httpd.exe (que se ejecuta como LocalSystem) carga el proxy, el cual reenvía todas las llamadas legítimas a la DLL real mientras ejecuta una carga útil con privilegios de SYSTEM en DllMain. Apache continúa sirviendo con normalidad: sin fallos ni interrupciones.
El instalador Windows de Apache Lounge crea C:\Apache24\ bajo C:\, que en Windows hereda por defecto los permisos Authenticated Users: Modify. El instalador no refuerza estas ACL. Esto otorga a cualquier usuario local la capacidad de escribir nuevos archivos en:
| Directorio | Impacto |
|---|---|
C:\Apache24\bin\ | Secuestro de DLL — 21 DLL del sistema secuestrables |
C:\Apache24\modules\ | Inyección directa de módulos |
C:\Apache24\conf\ | Manipulación de la configuración |
C:\Apache24\htdocs\ | Modificación del contenido web |
El servicio Apache24 se ejecuta como LocalSystem (SYSTEM) con AUTO_START, lo que hace que cualquier DLL cargada desde el directorio de la aplicación se ejecute con el nivel de privilegio más alto de 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 plantada se activa en el siguiente reinicio del servicio Apache. En un servidor de producción, esto ocurre mediante:
httpd -k restart)Tras el reinicio, httpd.exe carga nuestra DLL proxy como SYSTEM. La carga útil de DllMain se ejecuta:
Administrators21 DLLs del sistema cargadas por httpd.exe no están en la clave de registro KnownDLLs y pueden ser secuestradas desde C:\Apache24\bin\:
| DLL | KnownDLL | Secuestrable |
|---|---|---|
| VCRUNTIME140.dll | No | Sí — explotada |
| ucrtbase.dll | No | Sí |
| KERNELBASE.dll | No | Sí |
| bcrypt.dll | No | Sí |
| msvcp_win.dll | No | Sí |
| CRYPTSP.dll | No | Sí |
| rsaenh.dll | No | Sí |
| CRYPTBASE.dll | No | Sí |
| bcryptPrimitives.dll | No | Sí |
| mswsock.dll | No | Sí |
| napinsp.dll | No | Sí |
| DNSAPI.dll | No | Sí |
| IPHLPAPI.DLL | No | Sí |
| winrnr.dll | No | Sí |
| nlansp_c.dll | No | Sí |
| wshbth.dll | No | Sí |
| rasadhlp.dll | No | Sí |
| fwpuclnt.dll | No | Sí |
| ntdll.dll | No | Sí |
| win32u.dll | No | Sí |
| gdi32full.dll | No | Sí |
Un usuario estándar no puede autoactivar el reinicio de Apache en una configuración predeterminada de Windows Server 2022. Se probaron exhaustivamente más de 16 métodos — todos fallaron:
TerminateProcess sobre los PID de httpd → ACCESS_DENIEDnet stop/start Apache24 → SDDL deniega RP/WP para inicio de sesión interactivo/serviciosc stop Apache24 → Acceso denegadohttpd -k restart → acceso denegado al SCMSeShutdownPrivilege no disponibleschtasks /ru SYSTEM → requiere administradorLa activación proviene del mantenimiento rutinario del servidor, que es inevitable en cualquier sistema de producción.
Inmediata (manual):
icacls "C:\Apache24" /remove:g "BUILTIN\Users" /T
icacls "C:\Apache24" /grant "BUILTIN\Users:(OI)(CI)(RX)" /T
Permanente: Actualice a Apache Lounge 2.4.68-260920 o posterior, que incluye ACLs de instalador corregidas.
Defensa en profundidad: Implemente políticas de mitigación de procesos para restringir la carga de DLL a binarios firmados.
| Archivo | Descripción |
|---|---|
vcruntime140_hijack.c | Código fuente de la DLL proxy — payload en DllMain + prueba de concepto |
vcruntime140.def | Definiciones de reenvío de exportaciones (71 exportaciones → vcruntime140_orig.dll) |
deploy_hijack.bat | Script de despliegue automatizado |
| Fecha | Evento |
|---|---|
| 2026-09-20 | Apache Lounge publica 2.4.68-260920 con la corrección de ACL |
| 2026-09-22 | CVE-2026-89282 publicada por CERT/CC |
| 2026-10-16 | Descubrimiento independiente + PoC completo (este trabajo) |
| 2026-10-17 | Confirmado como duplicado de CVE-2026-89282; publicación pública |
Esta PoC se publica únicamente con fines educativos y de pruebas de seguridad autorizadas. Licencia MIT.
Descubierto y documentado de forma independiente por @D0rkerDevil. Cadena de explotación completa desarrollada antes de conocer la CVE-2026-89282.