
Prova de conceito para CVE-2026-89282: sequestro da ordem de busca de DLL proxy em instalações do Apache Lounge para Windows que resulta em escalada de privilégios para SYSTEM na reinicialização do serviço.
Autor: Ashish Kunwar (@D0rkerDevil)
Data: 2026-10-17
CVE: CVE-2026-89282
CWE: CWE-427 (Elemento de Caminho de Pesquisa Não Controlado) / CWE-732 (Atribuição Incorreta de Permissões para Recurso Crítico)
CVSS 3.1: 7.3 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Corrigido em: Apache Lounge 2.4.68-260920 Win64 (20 de setembro de 2026)
A distribuição Windows do Apache Lounge do Apache HTTP Server (anterior à build 2.4.68-260920) é instalada com ACLs padrão inseguras que concedem a BUILTIN\Users acesso de escrita (WD + AD) à árvore do diretório de instalação, incluindo C:\Apache24\bin\. Combinado com a ordem de pesquisa de DLL padrão do Windows — que carrega a partir do diretório da aplicação antes de System32 para DLLs que não estão na chave de registro KnownDLLs — qualquer usuário local padrão pode plantar uma DLL proxy que executa código arbitrário como NT AUTHORITY\SYSTEM quando o serviço Apache reinicia.
Este PoC demonstra a exploração completa: um usuário de baixo privilégio planta uma VCRUNTIME140.dll proxy com 71 encaminhadores de exportação PE em C:\Apache24\bin\. No reinício do Apache, o httpd.exe (em execução como LocalSystem) carrega o proxy, que encaminha todas as chamadas legítimas para a DLL real enquanto executa um payload com privilégios de SYSTEM em DllMain. O Apache continua servindo normalmente — sem falhas, sem interrupções.
O instalador Windows do Apache Lounge cria C:\Apache24\ sob C:\, que no Windows herda por padrão as permissões Authenticated Users: Modify. O instalador não reforça essas ACLs. Isso concede a qualquer usuário local a capacidade de gravar novos arquivos em:
| Diretório | Impacto |
|---|---|
C:\Apache24\bin\ | Sequestro de DLL — 21 DLLs de sistema sequestráveis |
C:\Apache24\modules\ | Injeção direta de módulo |
C:\Apache24\conf\ | Adulteração de configuração |
C:\Apache24\htdocs\ | Modificação de conteúdo web |
O serviço Apache24 é executado como LocalSystem (SYSTEM) com AUTO_START, fazendo com que qualquer DLL carregada a partir do diretório da aplicação seja executada no mais alto nível de privilégio do 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"
A DLL plantada é acionada na próxima reinicialização do serviço Apache. Em um servidor de produção, isso ocorre por meio de:
httpd -k restart)Após a reinicialização, o httpd.exe carrega nossa DLL proxy como SYSTEM. O payload do DllMain é executado:
Administrators21 DLLs de sistema carregadas pelo httpd.exe não estão na chave de registro KnownDLLs e podem ser sequestradas a partir de C:\Apache24\bin\:
| DLL | KnownDLL | Sequestrável |
|---|---|---|
| VCRUNTIME140.dll | Não | Sim — explorada |
| ucrtbase.dll | Não | Sim |
| KERNELBASE.dll | Não | Sim |
| bcrypt.dll | Não | Sim |
| msvcp_win.dll | Não | Sim |
| CRYPTSP.dll | Não | Sim |
| rsaenh.dll | Não | Sim |
| CRYPTBASE.dll | Não | Sim |
| bcryptPrimitives.dll | Não | Sim |
| mswsock.dll | Não | Sim |
| napinsp.dll | Não | Sim |
| DNSAPI.dll | Não | Sim |
| IPHLPAPI.DLL | Não | Sim |
| winrnr.dll | Não | Sim |
| nlansp_c.dll | Não | Sim |
| wshbth.dll | Não | Sim |
| rasadhlp.dll | Não | Sim |
| fwpuclnt.dll | Não | Sim |
| ntdll.dll | Não | Sim |
| win32u.dll | Não | Sim |
| gdi32full.dll | Não | Sim |
Um usuário padrão não consegue acionar por conta própria a reinicialização do Apache em uma configuração padrão do Windows Server 2022. Mais de 16 métodos foram testados exaustivamente — todos falharam:
TerminateProcess nos PIDs do httpd → ACCESS_DENIEDnet stop/start Apache24 → SDDL nega RP/WP para logon interativo/serviçosc stop Apache24 → Acesso negadohttpd -k restart → acesso ao SCM negadoSeShutdownPrivilege não detidoschtasks /ru SYSTEM → requer administradorO acionamento vem da manutenção rotineira do servidor, que é inevitável em qualquer sistema de produção.
Imediata (manual):
icacls "C:\Apache24" /remove:g "BUILTIN\Users" /T
icacls "C:\Apache24" /grant "BUILTIN\Users:(OI)(CI)(RX)" /T
Permanente: Atualize para o Apache Lounge 2.4.68-260920 ou posterior, que vem com ACLs de instalador corrigidas.
Defesa em profundidade: Implante políticas de mitigação de processos para restringir o carregamento de DLLs a binários assinados.
| Arquivo | Descrição |
|---|---|
vcruntime140_hijack.c | Código-fonte da DLL proxy — payload do DllMain + prova de conceito |
vcruntime140.def | Definições de encaminhamento de exportações (71 exportações → vcruntime140_orig.dll) |
deploy_hijack.bat | Script de implantação automatizada |
| Data | Evento |
|---|---|
| 2026-09-20 | Apache Lounge lança 2.4.68-260920 com correção de ACL |
| 2026-09-22 | CVE-2026-89282 publicada pelo CERT/CC |
| 2026-10-16 | Descoberta independente + PoC completa (este trabalho) |
| 2026-10-17 | Confirmada como duplicata da CVE-2026-89282; lançamento público |
Esta PoC é disponibilizada apenas para fins educacionais e de testes de segurança autorizados. Licença MIT.
Descoberta e documentada de forma independente por @D0rkerDevil. Cadeia de exploração completa desenvolvida antes do conhecimento da CVE-2026-89282.