Sebenarnya, ini bukanlah bug atau vulnerability murni, melainkan akibat dari misconfiguration pada deployment aplikasi Laravel. Information disclosure terjadi ketika sebuah website secara tidak sengaja mengungkapkan informasi sensitif kepada pengguna, yang seharusnya hanya diketahui oleh administrator atau developer.
Informasi yang bocor melalui file .env
Laravel sering kali dianggap tidak penting oleh pengguna biasa. Namun, bagi seorang bug hunter atau penyerang, informasi ini sangat berharga. Mengapa? Karena file .env
biasanya berisi data sensitif seperti APP_KEY
, kredensial database (DB_DATABASE
, DB_USERNAME
, DB_PASSWORD
), API key (AWS_KEY
), dan konfigurasi penting lainnya. Informasi ini dapat digunakan untuk melakukan serangan lanjutan terhadap sistem.
Yang mengejutkan, saat melakukan pengujian pada beberapa website, termasuk milik instansi pemerintahan, banyak yang masih terkena misconfiguration ini. Hal ini bisa terjadi karena developer lupa mengatur file .env
agar tidak dapat diakses publik saat aplikasi sudah di-production, atau kurangnya pemahaman tentang best practice deployment Laravel.
Langkah-langkah Eksploitasi:
Cari Target Website
Biasanya, misconfiguration ini dapat ditemukan pada aplikasi Laravel yang masih menampilkan halaman login diwebsite.com/login
.Ubah Input Name Menjadi Array
Pada halaman login, buka tab inspect element di browser, lalu ubah atributname
pada input menjadi array (misal:name="email[]"
).Login dengan Kredensial Acak
Masukkan data acak pada form login, lalu klik tombol login.Perhatikan Error yang Muncul
Jika aplikasi tidak menangani input array dengan benar, akan muncul error yang menampilkan stack trace beserta environment variables.Scroll ke Bawah untuk Melihat Variabel Environment
Pada tampilan error, scroll ke bawah hingga menemukan daftar environment variables.Di sini, Anda dapat melihat informasi sensitif seperti
APP_KEY
,DB_DATABASE
,DB_USERNAME
,DB_PASSWORD
, dan lain-lain.Langkah Lanjutan
Setelah mendapatkan kredensial database, Anda bisa mencoba melakukan koneksi ke database secara remote (misal, menggunakan MySQL jika port 3306 terbuka). Selain itu, Anda juga bisa mencoba mengakses halaman admin sepertiwebsite.com/phpmyadmin
menggunakan kredensial yang ditemukan.Jika berhasil masuk ke phpMyAdmin dan user database memiliki hak akses tinggi (misal: root), Anda dapat melakukan eksploitasi lanjutan, seperti teknik
INTO OUTFILE
untuk menulis file ke server. Namun, teknik ini hanya bisa dilakukan jika user database memiliki privilege yang cukup.
Cara Mencegah
- Jangan Pernah Deploy File
.env
ke Public Directory
Pastikan file.env
hanya bisa diakses oleh server, dan tidak dapat diakses secara publik melalui web browser. - Konfigurasi Web Server dengan Benar
Atur web server (Nginx/Apache) agar tidak mengizinkan akses langsung ke file.env
. - Gunakan Environment Variable pada Server
Sebaiknya, gunakan environment variable pada server (misal, melalui konfigurasi di CI/CD) daripada menyimpan data sensitif di file.env
pada production. - Nonaktifkan Debug Mode di Production
PastikanAPP_DEBUG=false
pada environment production agar error detail tidak ditampilkan ke pengguna.
Dengan menerapkan best practice di atas, Anda dapat meminimalisir risiko information disclosure pada aplikasi Laravel.