PrestaShop
Reading time: 5 minutes
tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :
HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Perl backticks/qx// sinks in Apache mod_perl handlers (reachability and exploitation)
ModĂšle observĂ© en conditions rĂ©elles : du code Perl construit une chaĂźne de commande shell et l'exĂ©cute via des backticks (ou qx//). Dans un mod_perl AccessHandler, des composants de requĂȘte contrĂŽlĂ©s par l'attaquant comme $r->uri() peuvent s'Ă©couler dans cette chaĂźne. Si une branche quelconque concatĂšne une entrĂ©e brute puis l'Ă©value avec un shell, vous obtenez une pre-auth RCE.
Primitives d'exécution Perl risquées (ouvrent un shell lorsqu'on leur fournit une seule chaßne) :
- 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
Forme minimale vulnérable observée en conditions réelles:
sub getCASURL {
...
my $exec_cmd = "...";
if ($type eq 'login') {
$exec_cmd .= $uri; # $uri from $r->uri() â attacker-controlled
my $out = `$exec_cmd`; # backticks = shell
}
}
Considérations clés d'atteignabilité dans mod_perl :
- Enregistrement du handler : httpd.conf doit router les requĂȘtes vers votre module Perl, par ex. PerlModule MOD_SEC_EMC::AccessHandler et une configuration qui invoque AccessHandler::handler pour une portĂ©e de chemin.
- Déclenchement de la branche vulnérable : forcez le flux de login non authentifié pour que type == "login" (par ex., omettez le auth cookie attendu).
- Chemin rĂ©soluble : assurez-vous que votre requĂȘte cible une URI qui se rĂ©sout dans la portĂ©e configurĂ©e. Si Apache ne route jamais la requĂȘte via le handler, le sink n'est pas atteint.
Exploitation workflow
- Inspectez httpd.conf pour les scopes PerlModule/MOD_PERL du handler afin de trouver un chemin résoluble traité par le handler.
- Envoyez une requĂȘte non authentifiĂ©e pour que le chemin de redirection de login soit pris (type == "login").
- Placez des shell metacharacters dans le chemin request-URI pour que $r->uri() transporte votre payload dans la chaĂźne de commande.
Example HTTP PoC (path injection via ';')
GET /ui/health;id HTTP/1.1
Host: target
Connection: close
Conseils
- Essayez des séparateurs : ;, &&, |,
backticks, $(...), et des sauts de ligne encodés (%0A) selon la façon dont la chaßne est citée. - Si des patches antérieurs mettent entre guillemets d'autres arguments mais pas l'URI dans une branche, les payloads ajoutés à la fin de la chaßne fonctionnent souvent : ;id# or &&/usr/bin/id#
Durcissement (Perl)
- Ne construisez pas de chaĂźnes pour le shell. PrĂ©fĂ©rez l'exĂ©cution avec vecteur d'arguments : system('/usr/bin/curl', '--silent', '--', $safe_url) â sans shell.
- Si un shell est inévitable, échappez strictement et de maniÚre cohérente dans toutes les branches ; considérez $r->uri() comme hostile. Envisagez URI::Escape pour les chemins/queries et des allowlists strictes.
- Ăvitez les backticks/qx// pour l'exĂ©cution de commandes ; capturez la sortie via open3/list si vraiment nĂ©cessaire sans invoquer un shell.
- Dans les handlers mod_perl, maintenez les chemins de code auth/redirect sans exécution de commandes ou assurez une sanitisation identique entre les branches pour éviter les régressions du type « corrigé partout sauf dans une branche ».
Recherche de vulnérabilités
- Différenciez les patches des modules qui assemblent des commandes shell ; cherchez des guillemets incohérents entre branches (p.ex., if ($type eq 'login') laissé non échappé).
- Cherchez avec grep : backticks, qx//, open\s*(|||, et system\s*(\s* pour trouver des shells basĂ©s sur des chaĂźnes. Construisez un graphe d'appels du sink jusqu'Ă l'entrĂ©e de la requĂȘte ($r) pour vĂ©rifier l'atteignabilitĂ© prĂ©-auth.
Cas réel : Dell UnityVSA pre-auth RCE (CVE-2025-36604)
- Injection de commande pré-auth via backticks dans AccessTool.pm:getCASURL lorsque type == "login" concaténait le $uri brut ($r->uri()).
- Accessible via MOD_SEC_EMC::AccessHandler â make_return_address($r) â getCASLoginURL(..., type="login") â getCASURL(..., $uri, 'login').
- Nuance pratique : utilisez un chemin résoluble pris en charge par le handler ; sinon le module ne s'exécutera pas et le sink ne sera pas atteint.
Références
- 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
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :
HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
HackTricks