Saat menyerang aplikasi, mendapatkan source code aplikasi bisa sangat membantu untuk melakukan eksploitasi lanjut. Ini karena beberapa bug, seperti injeksi SQL, lebih mudah ditemukan menggunakan analisis static code dibandingkan dengan melakukan pengujian black box secara random pada website.
Mendapatkan source code aplikasi juga sering kali berarti penyerang mendapatkan comment/dokumentasi code penting, API key, dan data sensitif lainnya. Jadi source code merupakan suatu yang harus selalu dilindungi dari publik, sayangnya belum semua developer menyadari hal ini, khususnya para pengembang yang menggunakan GIT.
Berdasarkan data dari LinuxSec, pada tahun 2018 saja, ada lebih dari 390.000 website yang secara tidak sengaja tidak melindungi direktori “.git” pada website mereka. Hal ini menyebabkan struktur website mereka bisa dibaca bahkan didownload.
Menemukan kebocoran informasi direktori .git
Web secara tidak sengaja dapat mengekspos source codenya ke publik melalui direktori .git yang terbuka dan tidak diproteksi.
Saat developer menggunakan Git untuk proyek webnya, direktori git (terletak di domainnya.com/.git) digunakan untuk menyimpan semua informasi kontrol versi proyek, termasuk riwayat komit dari file proyek. Biasanya, folder .git tidak boleh diakses oleh publik. Namun terkadang folder .git tidak sengaja tersedia, dan saat itulah kebocoran informasi terjadi.
Untuk memeriksa apakah folder .git aplikasi terekspos oleh publik, cukup buka direktori root aplikasi, misalnya domainnya.com, dan tambahkan /.git ke URL. Ada tiga kemungkinan yang dapat terjadi saat Anda menjelajah ke direktori /.git:
- Error 404, artinya direktori .git aplikasi tidak tersedia untuk publik, dan Anda tidak akan dapat source code.
- Error 403, direktori .git tersedia di server, tetapi tidak dapat diakses (diproteksi).
- Bisa diakses, jika tidak mendapatkan error dan server merespons dengan list isi direktori .git, maka penyerang dapat langsung menjelajahi konten folder dan mengambil informasi apa pun yang ada di dalamnya.
Baca juga: Cara Menghilangkan Public dan Index.php Pada URL Web CodeIgniter 4
Mengonfirmasi bahwa file dapat diakses
Penyerang dapat mengonfirmasi bahwa konten folder .git dapat diakses umum dengan mencoba mengakses file konfigurasi direktori .git:
> curl https://domainnya.com/.git/config
Jika file ini dapat diakses, penyerang mungkin dapat mengunduh seluruh konten direktori .git.
Merekonstruksi source code dari direktori .git
Jika .git dapat diakses, penyerang dapat dengan mudah menelusuri file dan mengambil informasi yang dari web. Dia juga dapat menggunakan perintah wget dalam mode rekursif (-r) untuk mengunduh konten direktori secara keseluruhan.
> wget -r domainnya.com/.git
Umunya semua direktori dapat tampil, namun jika list direktori tidak diaktifkan dan file direktori tidak ditampilkan, masih ada cara bagi penyerang untuk merekonstruksi seluruh direktori .git. Untuk memahami bagaimana ini dilakukan, pertama-tama kita harus memahami struktur direktori .git:
Struktur direktori .git
Direktori .git diatur dengan cara tertentu. Saat penyerang sudah melakukan wget .git dari web target, penyerang dapat menjalankan perintah:
> ls .git
Perintah diatas dapat memperlihatkan struktur direktori dari .git. Hasilnya, penyerang dapat melihat kurang lebih list seperti berikut:
Berikut adalah beberapa file dan folder standar dalam direktori .git yang penting dalam mencari source code web korban:
1. Direktori /objects
Direktori /objects digunakan untuk menyimpan objek Git. Direktori ini berisi folder tambahan yang masing-masing memiliki dua nama karakter. Subdirektori ini diberi nama setelah dua karakter pertama dari hash SHA1 dari objek git yang disimpan di dalamnya.
> ls .git/objects
Dan perintah diabawah ini akan mengungkapkan objek git yang disimpan di folder-folder tertentu yang ada:
> ls .git/objects/12
Git menyimpan berbagai jenis objek dalam objects. Objek yang disimpan di sini bisa berupa commit, tree, blob, dan anatasi tag. Penyerang dapat menentukan tipe objek dengan menggunakan perintah:
> git cat-file -t OBJECT-HASH
Objek commit menyimpan informasi tentang object tree, parrent commit, author, commit, tanggal, dan pesan commit. Object tree berisi daftar direktori untuk komit. Objek blob berisi salinan file yang dikomit (baca: source code aktual!). Sedangkan objek tag berisi informasi tentang objek yang diberi tag dan nama tag yang terkait.
Penyerang dapat menampilkan file yang terkait dengan objek Git dengan menggunakan perintah:
> git cat-file -p OBJECT-HASH
Gambar diatas merupakan contoh yang memperlihatkan isi salah satu object yang berisi commit, penyerang kemudian dapat mencari object yang berisi object tree biasanya di object a0 untuk melihat struktur web atau atau blob untuk source code.
2. /HEAD file
Umumnya dapat objects git ada banyak subfolder, untuk mengetahui object mana yang menjadi object utama, maka direktori /head dapat dimanfaatkan.
> cat .git/HEAD
> cat .git/refs/heads/master
Jika object utama dari head master diketahui seperti gambar diatas maka langkah 1 dapat kembali dilakukan.
Menemukan informasi yang berguna
Setelah mendapatkan source code proyek, penyerang dapat mencari kredensial (API Key, password DB, dll), kunci enkripsi, dan code comment. Proses ini dapat dilakukan dengan melihat file-file yang kiranya penting secara satu persatu.
Demikian, semoga bermanfaat dan dapat mencerahkan agar kita selalu memproteksi direktori .git dari projek web kita.
Referensi: https://medium.com/swlh/hacking-git-directories-e0e60fa79a36