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 atributnamepada 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/phpmyadminmenggunakan 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 OUTFILEuntuk menulis file ke server. Namun, teknik ini hanya bisa dilakukan jika user database memiliki privilege yang cukup.
Cara Mencegah
- Jangan Pernah Deploy File
.envke Public Directory
Pastikan file.envhanya 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.envpada production. - Nonaktifkan Debug Mode di Production
PastikanAPP_DEBUG=falsepada environment production agar error detail tidak ditampilkan ke pengguna.
Dengan menerapkan best practice di atas, Anda dapat meminimalisir risiko information disclosure pada aplikasi Laravel.