Bug: file version control yang bisa diakses via web

Untuk orang awam: saya menemukan bahwa beberapa situs yang cukup besar (beberapa di antaranya: Kompas  dan Tempo) memiliki kesalahan konfigurasi (misconfiguration) sehingga memungkinkan saya mendownload source code web tersebut. Saya akan membahas bagian teknisnya, tapi sebelumnya saya akan berusaha jelaskan untuk orang awam.

Nilai sebuah source code bisa beragam. Ibaratnya di depan rumah seseorang saya menemukan ada dokumen lengkap tentang sebuah bangunan. Di situ tercantum berbagai informasi, denah lengkap rumahnya, sampai merk kunci yang digunakan.

Nah jika rumah itu ada celahnya, maka dengan mudah saya tinggal membacanya, tanpa perlu mengelilingi rumah untuk mencari kelemahannya, dokumen itu nilainya penting, karena jadi komponen penting untuk bisa masuk. Tapi jika rumah itu memang aman, tidak ada celahnya, maka dokumen itu tidak terlalu bernilai. Jadi memiliki source code, tidak berarti kita selalu akan bisa masuk.

Lalu apa hasil temuan dari beberapa situs besar yang saya temukan? Salah satu situs ada yang ternyata memiliki password rahasia yang memungkinkan kita bisa login ke account manapun (password ini memang ditanam oleh developernya). Ada situs yang memiliki API Key dalam source code.

Dari semuanya, yang paling parah: ada orang (bukan developernya) yang sudah memasang backdoor sehingga siapapun bisa menjalankan perintah apapun di server tersebut, dan file tersebut masuk ke dalam git. Versi orang awamnya: ada yang berhasil mengubah dokumen design/blueprintnya, jadi andaikan server dibersihkan, dan dibangun ulang berdasarkan blueprint tersebut, maka lubangnya akan muncul lagi.

Andaikan saya orang jahat, saya bisa menulis sendiri berita “Hacker Thailand bobol situs media online Indonesia”. Atau bahkan mungkin saya jual aksesnya untuk bikin hoax pilkada.

Sebagai catatan, jenis  security misconfiguration yang saya bahas ini sudah sangat lama, ini contohnya ini blog dari tahun 2012. Kesalahan kenapa source code bisa diakses adalah karena programmer atau admin melakukan checkout di direktori web server dan direktori .git (untuk Git), .svn (untuk subversion), .hg (untuk Mercurial), .bzr (untuk Bazaar), atau CVS (untuk CVS) bisa diakses.

Beberapa orang berusaha melakukan konfigurasi file .htaccess agar direktori .git tidak bisa dilisting direktorinya, tapi masih bisa dibaca filenya. Dengan skrip dvcs-ripper, masih mungkin untuk mengambil sebagian besar source code. (Jika ada yang penasaran: silakan baca penjelasan detail mengenai git-pack yang membuat tidak semua file bisa didapatkan)

Jangan lakukan ini

Berikut ini daftar hal-hal yang sebaiknya tidak Anda lakukan. Karena banyak orang menggunakan “git” dan karena menulis “versioning software” terlalu panjang, berikutnya saya akan menulis “git” saja, tapi ini berlaku untuk software versioning apapun yang Anda pakai.

Jangan checkout git di direktori web

Meskipun Anda memakai .htaccess (atau mekanisme sejenis di web server lain) dengan benar, masih ada kemungkinan bisa bocor, contohnya:

  • Admin mengubah konfigurasi web server sehingga .htaccess tidak diproses (atau bahkan ada kemungkinan Admin coba-coba menggunakan software web server lain)
  • Aplikasi Anda ada bugnya, yang memungkinkan orang membaca atau mendownload file, termasuk juga file git, terutama file .git/index, yang berisi daftar semua file.

Jadi checkout lah di direktori lain, atau bahkan lebih bagus lagi: di server lain. Kasus terburuk dari penjebolan adalah: penyerang mendapatkan akses root. Mendapatkan akses root kadang mudah sekali, misalnya hampir semua server Linux yang kernelnya tidak dipatch sekitar 6 bulan terakhir ini kemungkinan vulnerable terhadap dirty cow. Jika user mendapatkan akses root di server production, maka dia bisa mengakses direktori .git jika dicheckout di manapun di komputer yang sama. Jika account git tersebut ternyata juga punya akses ke source code system lain, maka akibatnya mungkin lebih gawat lagi.

Kebiasaan buruk lain yang sering dilakukan adalah: mengedit file langsung di production/live, lalu melakukan commit langsung di direktori tersebut.

Jangan add semua file tanpa dicek

Saya pernah membaca kebiasaan seseorang yang selalu melakukan:

git add .
git commit -a -m "message"

Digabung dengan kebiasaan sebelumnya: checkout di direktori web, hasilnya bisa fatal. Seseorang bisa menaruh backdoor  (file php), dan karena developer langsung  menambahkan semua file ke git, lalu commit all, maka backdoornya sudah masuk di git. Andaikan web server dibersihkan, dan checkout ulang, backdoornya ikut terbawa.

Sebaiknya lakukan: git status untuk mengecek dulu file apa saja yang berubah.

Jangan taruh API key di Git

Best practice adalah untuk tidak menaruh API Key di git. API Key umumnya digunakan sebagai token akses untuk sebuah layanan. Sebagian API key tidak berbahaya sama sekali, sebagian lagi dampaknya menengah, dan sebagian lagi sangat berbahaya.

Contoh yang berbahaya adalah Amazon API key. Intinya dengan key ini, orang bisa memanfaatkan resource Amazon, dan Anda yang harus membayar. Sudah ada banyak kasus terdokumentasi, ini salah satu contoh kejadian nyata yang menimpa seseorang. Anda dapat mengkonfigurasi git hook untuk memfilter jika ada anggota team yang berusaha memasukkan API key ke source code.

Jika sudah pernah terlanjur menaruh API key di GIT, sebaiknya minta API key baru. Percuma menghapus key atau mendelete filenya karena bisa dilihat dari history git.

Jangan bikin kode yang memalukan

Ada software yang saya temui yang punya backdoor untuk semua user. Jika kita menggunakan password ajaib tersebut, maka kita bisa masuk ke account siapa saja. Bayangkan apa yang terjadi kalau itu jatuh ke tangan yang salah?

Penutup

Temuan saya sebenarnya lebih dari yang di daftar di atas, tapi untuk berbagai alasan, saya hanya cantumkan sebagian saja. Salah satu contoh alasannya: udah dilaporin masih tetep tidak diperbaiki, jadi ya sudah lah, saya putuskan hanya mempublish yang sudah diperbaiki saja (sudah 2 minggu sejak saya mulai melaporkan bugnya), dan biarlah orang lain yang menemukan sisanya.

Tidak hanya situs Indonesia. ada juga situs media Thailand yang saya temukan bermasalah dan sudah saya sampaikan via teman yang berprofesi di bidang security di sini. Situs coconuts.co juga memiliki bug ini (nggak jelas ini situs mana, nggak ketemu di about ataupun contactnya), sudah saya kirimi infonya dan sudah diperbaiki (walau tidak ada ucapan terima kasih sama sekali).

Saya tidak mencari dan mendapatkan uang dari semua temuan ini (hanya ada satu tawaran traktiran kopi). Lagi pula, menerima bayaran itu hal yang merepotkan (masalah laporan pajak dsb), kalo mau menawarkan sesuatu, kiriman Indomie, Meises Ceres atau Kopi Aroma akan lebih baik 😂.

Kebanyakan bug ini saya temukan sambil lalu dengan extension Bishop, dan sebagian lagi saya temukan dari skrip custom saya yang menganalisis access_log server squid saya di rumah. Jadi temuan saya ini cuma dari situs-situs yang pernah saya kunjungi (kebanyakan dari mengklik link yang dishare di Facebook).

Sudah cukup lama sejak tulisan saya mengenai Mencari dan Melaporkan Bug Security. Saya cukup senang kali ini semua responnya netral dan atau positif, tidak ada yang berusaha menuntut saya. Walaupun sebagian responnya masih cukup lambat. Tapi ya sudah lah, itu masalah mereka.

1 thought on “Bug: file version control yang bisa diakses via web”

Leave a Reply

Your email address will not be published. Required fields are marked *