- Memperkenalkan teknik serangan yang memanfaatkan karakter carriage return di dalam repositori Git
- Kerentanan ini menimbulkan kemungkinan eksekusi kode jarak jauh (RCE)
- Perintah berbahaya dapat dijalankan selama proses
git clone tertentu
- Dampaknya telah dikonfirmasi pada lingkungan Linux dan Windows
- Menyoroti risiko pengelolaan repositori Git yang rentan terhadap keamanan
Karakter carriage return dan kerentanan Git
- Di dalam repositori Git, dimungkinkan untuk membuat nama file yang mengandung karakter carriage return (
\r)
- Jika repositori yang berisi nama file seperti ini disalin dengan
git clone, maka pada proses penafsiran perintah dapat terjadi eksekusi perintah yang tidak diinginkan
Skenario eksekusi kode jarak jauh (RCE)
- Penyerang menambahkan file yang disisipi karakter carriage return lalu meng-commit-nya ke repositori
- Ketika pengguna melakukan
git clone pada repositori ini, kesalahan penafsiran oleh sistem file dan perintah Git dapat memicu risiko eksekusi kode yang tidak diinginkan
- Secara khusus, penyerang dapat mendorong agar skrip hook (misalnya kode di folder
.git/hooks) dijalankan secara otomatis
Lingkungan terdampak dan mitigasi
- Dapat terjadi pada Git di berbagai sistem operasi seperti Linux dan Windows
- Ini merupakan ancaman keamanan serius bagi pengembang dan perusahaan yang mengelola repositori Git atau sering melakukan clone repositori eksternal
Rekomendasi keamanan
- Saat melakukan clone repositori Git eksternal yang tidak tepercaya, perlu menggunakan versi terbaru dan memeriksa status keamanannya
- Perlu mendeteksi nama file dengan karakter tidak lazim di dalam repositori, terutama yang mengandung carriage return, lalu meninjaunya sebelum melakukan clone
1 komentar
Komentar Hacker News
Semua ini menghasilkan situasi saat melakukan clone submodule: pembacaan dilakukan dalam bentuk
path = ..., tetapi saat menulis justru tercatat ke path lain yang tidak diakhiri^MMuncul pertanyaan bagaimana tepatnya "remote code execution" yang disebut di artikel bisa terjadi di sini, dan seberapa serius dampaknya dari sisi keamanan
PoC memang belum dirilis, tetapi disebut bahwa isinya hampir merupakan modifikasi langsung dari exploit CVE-2024-32002, dan tes pada commit perbaikannya juga memberi petunjuk besar
Mengutip penjelasan CVE-2024-32002: dengan memanipulasi repository yang berisi submodule secara jahat dan memanfaatkan bug Git, penyerang dapat menulis file ke direktori
.git/alih-alih ke worktree submodule. Karena itu, hook yang langsung dijalankan selama proses clone bisa ditulis, sehingga pengguna bahkan tidak sempat memeriksa kode yang benar-benar akan dieksekusiRingkasnya, hook git berbahaya bisa disisipkan ke repository; biasanya hook git tidak terpasang saat
git clone, tetapi serangan kali ini memungkinkan hal itu sehingga hook bisa berjalan selama proses cloneInformasi lebih lanjut tentang CVE baru ini bisa dilihat di sini
post-checkoutDisebutkan kebenaran sederhana namun tidak nyaman bahwa jika penulisan file arbitrer dimungkinkan, biasanya itu bisa berkembang menjadi RCE
Disebutkan bahaya menulis file konfigurasi dengan DSL ad-hoc
Sering kali tidak ada spesifikasi formal untuk sintaksnya, dan standar sebenarnya untuk parsing tersebar di implementasi serialisasi/deserialisasi buatan sendiri
Jika keduanya tidak sinkron—misalnya parser sudah mendukung sintaks baru tetapi writer belum—perbedaan parser bisa menjadi bom waktu
Pelajarannya: perlu ada satu source of truth, lalu bagian yang bergantung padanya sebaiknya dihasilkan otomatis berdasarkan itu
Ditunjukkan bahwa bug ini terpisah dari masalah source of truth
DSL yang dipakai di sini (format file ini) memang ad-hoc, tetapi sangat umum, familier, dan cukup rapi sehingga secara praktis biasanya sudah memadai sebagai spesifikasi
Setelah mereproduksi masalahnya sendiri, seseorang mengunggahnya ke repository ini
Langsung mencoba memperbarui ke Git versi terbaru, tetapi di Arch pembaruannya belum tersedia
Sampai patch baru keluar, ia berencana menahan diri untuk tidak melakukan pull; ada kekhawatiran repository populer dengan auto-pull bisa bermasalah sehingga upgrade akan memakan waktu lama
Muncul pertanyaan apakah kerentanan ini dipublikasikan sebelum patch tersedia
Melihat pernyataan bahwa exploit lama "hanya dimodifikasi sedikit", muncul pertanyaan mengapa Git tidak memakai Landlock (fitur keamanan sandbox khusus Linux)
Untuk operasi
git clone, diusulkan model yang hanya memberi akses baca ke direktori config, akses baca/tulis ke direktori target clone, dan melarang pemanggilan subprocessAda sindiran tentang betapa setiap exploit selalu menampilkan kalkulator
Namun jika pemanggilan subprocess dilarang, semua hook git seperti
post-checkoutjuga akan rusakseccomp, tetapi banyak fiturnya akan terbatasiSelain itu, tanpa subprocess, penggunaan git lewat SSH juga tidak akan bisa
Ditanyakan apakah Homebrew sendiri terdampak masalah ini, yakni apakah ia melakukan recursive clone
Kemungkinan itu ditemukan pada kode ini
Ada pendapat bahwa tujuan Homebrew sendiri memang menjalankan kode dari repository, jadi justru aneh jika tidak melakukan recursive clone
Melihat kutipan terkenal Jon Postel soal CR+LF memunculkan nostalgia
parsing/quoting)git blamemenunjukkan bahwa kode bermasalah itu ditulis 19 tahun lalu, bertepatan dengan refleksi 10 tahun BernsteinSepertinya masih harus menunggu karena pembaruan Git 2.50.1 belum tersedia di Homebrew
brew install git --HEADDibagikan fakta bahwa Homebrew dan Debian Bookworm sama-sama masih menyediakan versi yang rentan
Muncul pemikiran apakah system call yang memuat daftar direktori seharusnya menolak keberadaan file jika nama filenya mengandung karakter kontrol ASCII (bytes), menganggapnya sebagai kerusakan disk, atau menanganinya dengan cara lain
Disebutkan bahwa dalam locale saat ini byte-byte itu bisa saja punya makna lain; tidak seperti Windows yang mengasumsikan semua nama file sebagai UTF-16, jadi situasi tak terduga bisa muncul
Ditunjukkan secara singkat bahwa pada sistem keluarga Unix, nama file (dan string lainnya) pada dasarnya hanyalah array byte, dan dari situlah masalah ini muncul