PrestaShop
Reading time: 5 minutes
tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Perl backticks/qx// sinks in Apache mod_perl handlers (reachability and exploitation)
Pattern reale: il codice Perl costruisce una stringa di comando shell ed la esegue tramite backticks (o qx//). In un mod_perl AccessHandler, componenti della request controllate dall'attaccante come $r->uri() possono fluire in quella stringa. Se qualche ramo concatena input raw e poi lo valuta con una shell, ottieni pre-auth RCE.
Primitive di esecuzione Perl rischiose (avviano una shell quando ricevono una singola stringa):
- Backticks / qx//: my $out =
cmd ...; - system with a single string: system("/bin/sh -c '...'") implicitly
- open with a pipe: open my $fh, "cmd |" or "| cmd"
- IPC::Open3 with a single string
Minimal vulnerable shape observed in the wild:
sub getCASURL {
...
my $exec_cmd = "...";
if ($type eq 'login') {
$exec_cmd .= $uri; # $uri from $r->uri() â attacker-controlled
my $out = `$exec_cmd`; # backticks = shell
}
}
Considerazioni chiave sulla raggiungibilitĂ in mod_perl:
- Registrazione dell'handler: httpd.conf deve instradare le richieste nel tuo modulo Perl, e.g. PerlModule MOD_SEC_EMC::AccessHandler e configurazione che invoca AccessHandler::handler per uno scope di percorso.
- Attivazione del ramo vulnerabile: forza il flusso di login non autenticato in modo che type == "login" (e.g., ometti il cookie di auth previsto).
- Percorso risolvibile: assicurati che la tua richiesta punti a una URI che si risolve nello scope configurato. Se Apache non instrada mai la richiesta attraverso l'handler, la sink non viene raggiunta.
Exploitation workflow
- Ispeziona httpd.conf per PerlModule/MOD_PERL handler scopes per trovare un percorso risolvibile processato dall'handler.
- Invia una richiesta non autenticata in modo che sia presa la path di redirect del login (type == "login").
- Inserisci metacaratteri shell nel percorso del request-URI cosĂŹ che $r->uri() trasporti il tuo payload nella stringa di comando.
Example HTTP PoC (path injection via ';')
GET /ui/health;id HTTP/1.1
Host: target
Connection: close
Tips
- Prova separatori: ;, &&, |,
backticks, $(...), and encoded newlines (%0A) a seconda del quoting. - Se patch precedenti citano altri argomenti ma non l'URI in un ramo, i payload aggiunti alla fine della stringa spesso funzionano: ;id# or &&/usr/bin/id#
Rafforzamento (Perl)
- Non costruire stringhe shell. Preferisci l'esecuzione con vettore di argomenti: system('/usr/bin/curl', '--silent', '--', $safe_url) â no shell.
- Se una shell è inevitabile, effettua escaping in modo rigoroso e coerente in tutti i rami; tratta $r->uri() come ostile. Considera URI::Escape per paths/queries e allowlist rigorose.
- Evita backticks/qx// per l'esecuzione di comandi; cattura l'output tramite open3/list form se veramente necessario senza invocare una shell.
- Nei mod_perl handlers, mantieni i percorsi di auth/redirect privi di esecuzione di comandi o assicurati che la sanitizzazione sia identica in tutti i rami per evitare regressioni âfixed everywhere but one branchâ.
Ricerca di vulnerabilitĂ
- Diff delle patch sui moduli che assemblano comandi shell; cerca quote incoerenti tra i rami (e.g., if ($type eq 'login') left unescaped).
- Grep per backticks, qx//, open\s*(|||, and system\s*(\s*" per trovare shell basate su stringhe. Costruisci un call graph dal sink all'entry della richiesta ($r) per verificare la raggiungibilitĂ pre-auth.
Real-world case: Dell UnityVSA pre-auth RCE (CVE-2025-36604)
- Pre-auth command injection via backticks in AccessTool.pm:getCASURL when type == "login" concatenated raw $uri ($r->uri()).
- Raggiungibile tramite MOD_SEC_EMC::AccessHandler â make_return_address($r) â getCASLoginURL(..., type="login") â getCASURL(..., $uri, 'login').
- Nuance pratica: use a resolvable path covered by the handler; otherwise the module wonât execute and the sink wonât be hit.
References
- Itâs Never Simple Until It Is: Dell UnityVSA PreâAuth Command Injection (CVEâ2025â36604)
- Dell PSIRT DSAâ2025â281 â Security update for Dell Unity/UnityVSA/Unity XT
- watchTowr Detection Artefact Generator â Dell UnityVSA PreâAuth CVEâ2025â36604
tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks