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:

  1. Cari Target Website
    Biasanya, misconfiguration ini dapat ditemukan pada aplikasi Laravel yang masih menampilkan halaman login di website.com/login.

  2. Ubah Input Name Menjadi Array
    Pada halaman login, buka tab inspect element di browser, lalu ubah atribut name pada input menjadi array (misal: name="email[]").

    Image 1

  3. Login dengan Kredensial Acak
    Masukkan data acak pada form login, lalu klik tombol login.

    Image 2

  4. Perhatikan Error yang Muncul
    Jika aplikasi tidak menangani input array dengan benar, akan muncul error yang menampilkan stack trace beserta environment variables.

    Image 3

  5. Scroll ke Bawah untuk Melihat Variabel Environment
    Pada tampilan error, scroll ke bawah hingga menemukan daftar environment variables.

    Image 4

    Di sini, Anda dapat melihat informasi sensitif seperti APP_KEY, DB_DATABASE, DB_USERNAME, DB_PASSWORD, dan lain-lain.

  6. 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 seperti website.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
    Pastikan APP_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.