PrestaShop
Reading time: 4 minutes
tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:
HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Perl backticks/qx// sinks in Apache mod_perl handlers (reachability and exploitation)
실제 사례 패턴: Perl 코드가 셸 명령 문자열을 생성하고 backticks (또는 qx//)를 통해 실행합니다. mod_perl AccessHandler에서는 $r->uri() 같은 공격자 제어 요청 구성 요소가 그 문자열로 흘러들어갈 수 있습니다. 어떤 분기에서 원시 입력을 단순히 이어붙이고 이를 셸로 평가하면 pre-auth RCE가 발생합니다.
Risky Perl execution primitives (spawn a shell when given a single string):
- 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
}
}
mod_perl에서의 주요 도달성 고려사항:
- Handler 등록: httpd.conf가 요청을 Perl 모듈로 라우팅해야 합니다. 예: PerlModule MOD_SEC_EMC::AccessHandler 및 특정 경로 범위에 대해 AccessHandler::handler를 호출하도록 구성되어 있어야 합니다.
- 취약한 분기 트리거: 인증되지 않은 로그인 흐름을 강제하여 type == "login"이 되게 합니다(예: 예상되는 auth cookie를 생략).
- 해석 가능한 경로: 요청이 구성된 범위 내에서 해석되는 URI를 대상으로 하는지 확인하세요. Apache가 요청을 핸들러로 절대 라우팅하지 않으면 sink에 도달하지 않습니다.
Exploitation workflow
- httpd.conf를 검사하여 PerlModule/MOD_PERL 핸들러 범위를 찾아 핸들러가 처리하는 해석 가능한 경로를 찾습니다.
- 인증되지 않은 요청을 보내 로그인 리디렉트 경로가 선택되게 합니다 (type == "login").
- 요청 URI 경로에 쉘 메타문자(shell metacharacters)를 삽입하여 $r->uri()가 페이로드를 명령 문자열로 전달하게 합니다.
예시 HTTP PoC (path injection via ';')
GET /ui/health;id HTTP/1.1
Host: target
Connection: close
Tips
- 구분자들을 시도해보세요: ;, &&, |,
backticks, $(...), 그리고 인용 방식에 따라 인코딩된 줄바꿈(%0A). - 이전 패치가 다른 인자를 인용하지만 어떤 분기에서는 URI를 인용하지 않는 경우, 문자열 끝에 페이로드를 덧붙이면 종종 동작합니다: ;id# or &&/usr/bin/id#
Hardening (Perl)
- 쉘 문자열을 만들지 마세요. 인수 벡터 형태의 실행을 선호하세요: system('/usr/bin/curl', '--silent', '--', $safe_url) — 쉘을 사용하지 마세요.
- 쉘 사용이 불가피한 경우, 모든 분기에서 엄격하고 일관되게 이스케이프하세요; $r->uri()를 적대적 입력으로 취급하세요. 경로/쿼리에 대해서는 URI::Escape와 강력한 허용리스트 사용을 고려하세요.
- 명령 실행에 backticks/qx// 사용을 피하세요; 정말 필요하다면 쉘을 호출하지 않는 open3/list 형태로 출력을 캡처하세요.
- mod_perl 핸들러에서는 auth/redirect 코드 경로에서 명령 실행을 피하거나, 모든 분기에서 동일한 정제(또는 검증)를 보장해 "모두 고쳤지만 한 분기만 빠진" 회귀를 방지하세요.
Vulnerability hunting
- 쉘 명령을 조립하는 모듈의 패치-디프를 검사하세요; 분기 간 불일치하는 인용을 찾으세요(예: if ($type eq 'login')가 이스케이프되지 않은 경우).
- 문자열 기반 쉘을 찾기 위해 backticks, qx//, open\s*(|||, and system\s*(\s*"를 grep하세요. sink부터 요청 진입($r)까지 호출 그래프를 만들어 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()).
- Reachable through MOD_SEC_EMC::AccessHandler → make_return_address($r) → getCASLoginURL(..., type="login") → getCASURL(..., $uri, 'login').
- Practical nuance: 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
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:
HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
HackTricks