Direktori .git yang terekspos: kebocoran source code yang tersembunyi di depan mata
Ketika web server menyajikan direktori .git bersama file aplikasi Anda, penyerang dapat mengunduh cukup banyak objek untuk merekonstruksi seluruh source code — termasuk setiap secret yang pernah di-commit, bahkan jika sudah dihapus di commit berikutnya. AppSafe menandai ini sebagai kritis.
Apa itu
Git menyimpan seluruh repositori — setiap file, setiap commit, setiap ujung branch — di direktori tersembunyi .git di root proyek. Jika direktori itu berakhir di dalam web root dan server Anda tidak memblokir aksesnya, file /.git/config, /.git/HEAD, dan object store di bawah /.git/objects/ dapat diunduh oleh publik.
Merekonstruksi source lengkap dari direktori .git yang bocor sangatlah mudah. Tool seperti git-dumper mengambil index lalu menarik setiap objek yang direferensikan, menghasilkan checkout yang berfungsi penuh. Penyerang tidak butuh akses shell — cukup browser.
Kenapa penting
Source code Anda hampir pasti berisi informasi yang meningkatkan risiko: API key yang di-hardcode (sering di commit lama), skema database, path endpoint internal, logika bisnis, dan alur autentikasi. Bahkan jika saat ini tidak ada secret yang di-commit, riwayatnya penuh dengan materi yang bisa dieksploitasi penyerang.
Riwayat Git bersifat permanen secara desain. Secret yang di-commit bertahun-tahun lalu lalu dihapus masih hidup di object store dan ikut terunduh bersama semuanya. Merotasinya adalah satu-satunya cara untuk menetralkannya.
Cara memperbaiki
Tolak semua request yang path-nya diawali /.git/. Kembalikan 404, bukan 403, agar tidak mengonfirmasi bahwa direktori tersebut ada.
location ~ /\.git {
deny all;
return 404;
}Perbaikan paling andal adalah tidak pernah men-deploy direktori .git ke document root sejak awal. Susun build Anda agar output hasil kompilasi masuk ke direktori public/ terpisah, lalu deploy hanya direktori itu, bukan root proyek.
Setelah men-deploy perbaikan, buka https://yourdomain.com/.git/config di browser. Hasilnya harus 404, bukan isi konfigurasi Git Anda. AppSafe memeriksa ulang hal ini di setiap scan.
Jika direktori tersebut pernah dapat diakses, anggap setiap API key, password, dan token yang pernah muncul di commit mana pun sudah bocor. Rotasi semuanya — menghapus commit saja tidak cukup, karena objeknya masih ada di pack file yang mungkin sudah diunduh penyerang.
FAQ
Saya men-deploy ke platform terkelola (Vercel, Netlify, Fly.io) — apakah saya berisiko?
Platform terkelola yang melakukan build dari source biasanya hanya men-deploy output build, sehingga direktori .git tidak disajikan. Risikonya lebih tinggi pada deployment VPS, container Docker yang di-build dari root proyek, atau ekspor situs statis yang menyalin seluruh working tree.
Apa yang sebenarnya diperiksa AppSafe?
AppSafe meminta /.git/config dan /.git/HEAD lalu memeriksa apakah body respons terlihat seperti file Git asli (cocok dengan pola [core] atau ref:). Halaman 200 generik yang bukan konten Git tidak ditandai.
Bolehkah saya langsung menghapus direktori .git di server?
Ya, jika Anda hanya butuh file yang di-deploy untuk menjalankan aplikasi. Tetapi pastikan proses deployment Anda tidak menyalinnya kembali pada push berikutnya. Memblokirnya di level web server adalah lapisan pertahanan tambahan ketika script deployment tidak konsisten.
Apakah aplikasimu terpengaruh?
AppSafe memeriksa ini dan puluhan masalah lain dalam satu pemindaian gratis.
Pindai aplikasiku gratisDari blog
Crawler AI palsu sedang memburu file .env-mu. Begini cara mengeceknya
Pemindai kredensial meminjam nama crawler AI untuk lolos dari allowlist, dan mereka mencari satu file khusus: .env-mu. Cara mengecek apakah file itu bisa diakses, dan cara menguncinya.
Insiden Railway: cara merotasi rahasia aplikasimu tanpa downtime
Railway meminta semua pengguna mengganti environment variable mereka setelah penyerang mengincar API key penyedia AI dan platform. Cara mengecek keterpaparanmu, merotasi semuanya tanpa membuat aplikasi down, dan membuat pembobolan berikutnya tidak terlalu menyakitkan.
PHP2Shell sedang dieksploitasi: cara cek apakah aplikasimu terekspos
Dua bug kritis di PHP sendiri berubah dari "patch dirilis" menjadi "dieksploitasi di dunia nyata" hanya dalam hitungan hari. Cara mengetahui apakah ada yang kamu hosting memakai versi terdampak, dan apa yang harus dilakukan hari ini.
Panduan terkait
File .env yang terekspos: cara penyerang menemukan rahasiamu
Satu .env yang bisa dijangkau bisa menyerahkan seluruh stack-mu.
Source map di produksi membocorkan kode sumbermu
File .map yang ikut terkirim menyerahkan kode sumber aslimu.
Indeks direktori terbuka: saat file server Anda menampilkan semuanya
File server yang menampilkan isinya memberi penyerang inventaris gratis.
Backup database yang terekspos: apa yang terjadi saat /backup.sql dapat dijangkau
Dump .sql yang dapat dijangkau sama dengan menyerahkan seluruh database Anda.