PrestaShop
Reading time: 4 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın:
HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Perl backticks/qx// Apache mod_perl handler'larında sink'ler (reachability and exploitation)
Gerçek dünya deseni: Perl kodu bir shell komut dizgesi oluşturur ve backticks (veya qx//) ile çalıştırır. Bir mod_perl AccessHandler içinde, $r->uri() gibi saldırgan tarafından kontrol edilen istek bileşenleri bu dizeye akabilir. Eğer herhangi bir dal ham girdiyi birleştirip ardından bir shell ile değerlendiriyorsa, pre-auth RCE elde edersiniz.
Riskli Perl yürütme primitive'leri (tek bir string verildiğinde shell başlatır):
- 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
Gerçek dünyada gözlemlenen minimal zafiyetli yapı:
sub getCASURL {
...
my $exec_cmd = "...";
if ($type eq 'login') {
$exec_cmd .= $uri; # $uri from $r->uri() → attacker-controlled
my $out = `$exec_cmd`; # backticks = shell
}
}
mod_perl'de ana erişilebilirlik hususları:
- Handler registration: httpd.conf istekleri Perl modülünüze yönlendirmeli, örn. PerlModule MOD_SEC_EMC::AccessHandler ve bir path scope için AccessHandler::handler'ı çağıran yapılandırma.
- Triggering the vulnerable branch: yetkilendirilmemiş login akışını zorlayın ki type == "login" olsun (örn. beklenen auth cookie'yi göndermeyin).
- Resolvable path: isteğinizin yapılandırılmış kapsam içinde çözülen bir URI'yi hedeflediğinden emin olun. Apache isteği handler üzerinden hiç yönlendirmezse, sink'e ulaşılamaz.
Exploitation workflow
- httpd.conf'yi PerlModule/MOD_PERL handler kapsamları açısından inceleyin ve handler tarafından işlenen çözülebilir bir path bulun.
- Yetkilendirilmemiş bir istek gönderin ki login yönlendirme yolu seçilsin (type == "login").
- request-URI yoluna shell metacharacters yerleştirin, böylece $r->uri() payload'unuzu komut dizisine taşır.
Example HTTP PoC (path injection via ';')
GET /ui/health;id HTTP/1.1
Host: target
Connection: close
İpuçları
- Ayırıcıları deneyin: ;, &&, |,
backticks, $(...), ve kodlanmış yeni satırlar (%0A) alıntılamaya bağlı olarak. - Eğer önceki yamalar diğer argümanları quote edip ama bir dalda URI'yi quote etmiyorsa, dizenin sonuna eklenen payload'lar genellikle işe yarar: ;id# or &&/usr/bin/id#
Sertleştirme (Perl)
- Shell stringleri oluşturmayın. Argüman-vektörlü yürütmeyi tercih edin: system('/usr/bin/curl', '--silent', '--', $safe_url) — shell çağrısı yok.
- Eğer bir shell kaçınılmazsa, tüm branch'lerde katı ve tutarlı kaçış uygulayın; $r->uri()'yi güvenilmez olarak değerlendirin. Yollar/sorgular için URI::Escape ve güçlü allowlist'ler düşünün.
- Komut yürütme için backticks/qx// kullanmaktan kaçının; gerçekten gerekliyse shell çağırmadan çıktı yakalamak için open3/list formunu kullanın.
- mod_perl handler'larında auth/redirect kod yollarını komut yürütmeden uzak tutun veya “fixed everywhere but one branch” regresyonlarını önlemek için tüm branch'larda özdeş sanitizasyon sağlayın.
Zafiyet avı
- Shell komutları birleştiren modüllerde patch-diff yapın; branch'lar arasında tutarsız quoting'leri arayın (ör. if ($type eq 'login') kaçışlanmamış bırakılmış).
- Grep for backticks, qx//, open\s*(|||, and system\s*(\s*" to find string-based shells. Sink'ten request girişine ($r) kadar bir call graph inşa ederek pre-auth ulaşılabilirliğini doğrulayın.
Gerçek dünya örneği: Dell UnityVSA pre-auth RCE (CVE-2025-36604)
- Pre-auth command injection, type == "login" olduğunda AccessTool.pm:getCASURL içindeki backticks aracılığıyla ham $uri ($r->uri()) ile birleştirilerek gerçekleşiyordu.
- Ulaşılabilirlik: MOD_SEC_EMC::AccessHandler → make_return_address($r) → getCASLoginURL(..., type="login") → getCASURL(..., $uri, 'login').
- Pratik nüans: handler tarafından kapsanan ve çözülebilir bir path kullanın; aksi halde modül çalışmaz ve sink tetiklenmez.
Referanslar
- 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
AWS Hacking'i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın:
HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks