Di banyak tim pengembang di Indonesia, cara berbagi kode masih sangat "manual": folder proyek di-zip lalu dikirim lewat WhatsApp, ditaruh di Google Drive bersama, disinkronkan via OneDrive, atau dicolokkan dari flash disk saat rapat dengan vendor. Kebiasaan itu tampak sepele. Namun sebuah temuan yang dipublikasikan awal September 2026 menunjukkan bahwa justru pola serah-terima seperti inilah yang bisa mengubah satu folder repositori menjadi eksekusi kode di laptop developer, tanpa satu pun perintah diketik dan tanpa satu pun tombol persetujuan diklik.
Temuan itu dinamai GitSpawn. Peneliti dari Manifold Security melaporkan delapan kelemahan pada tujuh AI coding agent berbasis command line, di antaranya Claude Code, OpenAI Codex, Cursor, goose, Hermes Agent, Qwen Code, dan Grok Build. Saat publikasi, empat di antaranya belum ditambal. Artikel ini membedah mekanismenya, lalu memberi panduan langkah demi langkah untuk mengeraskan (hardening) alur kerja tim Anda, termasuk skrip audit yang bisa langsung Anda jalankan hari ini.
Akar Masalahnya Bukan Model AI, Tapi Pipa Air di Bawahnya
Godaan pertama saat membaca berita seperti ini adalah menyalahkan modelnya: mungkin ada prompt injection, mungkin LLM-nya "tertipu". Bukan itu masalahnya. Manifold menegaskan bahwa celahnya ada pada perkakas biasa di bawah permukaan, yaitu subprocess yang dijalankan agen saat sesi dimulai untuk mengetahui posisinya berada di mana.
Hampir setiap agen CLI, ketika Anda membuka sebuah proyek, langsung mengumpulkan konteks di latar belakang: repositori ini ada di branch apa, file apa saja yang berubah, apa isi diff terakhir. Untuk itu agen memanggil perintah Git biasa seperti git status atau git diff. Sampai sini tidak ada yang aneh.
Masalahnya, setiap perintah tersebut memicu Git menyegarkan index-nya. Dan Git punya setelan performa bernama core.fsmonitor, yang nilainya adalah sebuah perintah program pembantu (helper) yang dijalankan Git untuk mengidentifikasi file mana saja yang berubah. Setelan ini dibaca langsung dari .git/config milik repositori itu sendiri.
Artinya: siapa pun yang mengontrol isi folder .git pada sebuah repositori, mengontrol perintah apa yang dijalankan mesin Anda saat agen AI sekadar mengecek status repositori.Perintah itu berjalan dengan hak penuh pengguna yang sedang login, di luar sandbox agen, dan tanpa dialog persetujuan apa pun. Pada Claude Code dan Hermes Agent, payload menyala sebelum dialog workspace trust disetujui. Pada Qwen Code, bahkan sebelum pengguna terautentikasi. Pada Grok Build, pada ketukan tombol pertama.
Mengapa git clone Tidak Bisa Dipakai Menyerang
Ini bagian yang penting dipahami agar tidak salah menaksir risiko. Serangan ini tidak bisa dikirim lewat git clone, git fetch, atau git pull. Protokol Git tidak pernah mengirimkan .git/config milik server ke klien; saat Anda melakukan clone, konfigurasi lokal dibuat baru di mesin Anda.
Konsekuensinya, repositori beracun harus tiba sebagai file dengan direktori .git yang masih utuh. Kanal yang mempertahankan struktur itu antara lain:
- Arsip ZIP, RAR, atau TAR yang dibuat dari folder proyek (bukan dari tombol "Download ZIP" di GitHub, yang justru membuang
.git) - Folder di shared drive perusahaan atau NAS
- Direktori yang tersinkronisasi lewat Google Drive, OneDrive, Dropbox, atau Syncthing
- Flash disk dan hard disk eksternal
- Salinan proyek dari kontraktor, vendor outsourcing, atau peserta program magang
Dengan kata lain: tepat seperti cara rekan kerja, konsultan, dan vendor rutin menyerahkan proyek di banyak organisasi Indonesia. Inilah sebabnya risiko ini terasa jauh lebih dekat di sini daripada yang mungkin dibayangkan.
Peta Versi: Mana yang Sudah Aman, Mana yang Belum
Berdasarkan data yang dipublikasikan Manifold dan pengujian ulang mereka pada 1 September 2026:
- goose — semua versi di bawah 1.44.0 terdampak, diperbaiki di 1.44.0. Ini satu-satunya temuan yang membawa skor: GitHub memberikan CVE-2026-72718 dengan CVSS 4.0 base score 7.0.
- Codex CLI — versi 0.102.0 hingga 0.130.0 terdampak, diperbaiki di 0.131.0. OpenAI menerbitkan tiga CVE tersendiri untuk kelas kelemahan yang sama, salah satunya CVE-2026-19592. Versi rilis terkini per 2 September 2026 adalah 0.152.1, sehingga instalasi yang dipatok di bawah 0.131.0 masih rentan.
- Codex Desktop — terdampak pada macOS dan Windows, dengan build perbaikan masing-masing.
- Claude Code — jalur
core.fsmonitordikonfirmasi pada 2.1.193 dan diperbaiki pada 2.1.196. Namun ada jalur kedua melalui perintahclaude ultrareviewyang memanfaatkan kunci konfigurasi Git berbeda (sengaja tidak diungkap peneliti agar tidak menjadi template siap pakai bagi penyerang); jalur ini masih aktif saat diuji pada 2.1.252. - Hermes Agent — 0.18.2 dan 0.21.0 dikonfirmasi rentan, perbaikan masih tertunda; VulnCheck menetapkan CVE-2026-71963.
- Qwen Code — 0.19.6 dan 0.22.3 dikonfirmasi rentan, perbaikan tertunda.
- Grok Build — 0.2.93 dan 1.0.13 dikonfirmasi rentan, perbaikan tertunda.
Perlu dicatat secara jujur: belum ada laporan eksploitasi di dunia nyata untuk temuan-temuan ini, dan tidak satu pun CVE di atas tercantum dalam katalog Known Exploited Vulnerabilities (KEV) milik CISA pada pemeriksaan 2 September 2026. Ini adalah risiko yang harus ditangani secara preventif, bukan insiden yang sedang berlangsung.
Pola yang Berulang, Bukan Hal Baru
Yang membuat GitSpawn layak diperhatikan adalah sifatnya sebagai kelas kelemahan, bukan bug tunggal. Penyalahgunaan FSMonitor mengeksploitasi fitur yang sah, bukan cacat kode. Pola serupa sudah pernah muncul jauh sebelum era agen AI: Visual Studio Code sebelum 1.63.1 (CVE-2021-43891) dan IDE JetBrains sebelum 2021.3.1 (CVE-2022-24346) sama-sama pernah menjalankan konfigurasi repositori sebelum dialog kepercayaan muncul. Sonar juga melaporkan sink yang sama pada Claude Code pada April 2026, dan Anthropic sempat memindahkan urutan startup untuk menutupnya pada versi 2.0.34 (5 November 2025) — sebelum perilaku serupa muncul kembali pada 2.1.193.
Pelajarannya: selama alat pengembangan otomatis membaca konfigurasi dari dalam artefak yang tidak dipercaya, kelas kelemahan ini akan terus lahir kembali dalam bentuk baru.
Tutorial: Enam Langkah Mengeraskan Workflow Anda
Langkah 1 — Matikan fsmonitor secara global sebagai pertahanan dasar
Ini langkah termurah dan paling berdampak. Setelan global akan menjadi jaring pengaman ketika Anda lupa memeriksa sebuah repositori.
# Matikan fsmonitor secara global
git config --global core.fsmonitor false
# Verifikasi
git config --global --get core.fsmonitor
# Output yang diharapkan: false
# Audit seluruh konfigurasi global terkait fsmonitor
git config --global --list | grep -i fsmonitor
Catatan penting: konfigurasi lokal repositori (.git/config) memiliki prioritas lebih tinggi daripada konfigurasi global. Jadi langkah ini mengurangi permukaan serangan, tetapi tidak sepenuhnya menutupnya. Ia harus dikombinasikan dengan langkah 2 dan 3.
Langkah 2 — Periksa .git/config sebelum membuka repositori apa pun yang tiba sebagai file
Jadikan ini refleks, sama seperti tidak mengklik lampiran .exe dari email tak dikenal. Kunci yang perlu dicurigai bukan hanya core.fsmonitor, tetapi juga core.hooksPath dan attr.tree yang berpasangan dengan filter clean atau process.
# Lihat isi konfigurasi tanpa menjalankan perintah Git apa pun
cat proyek-dari-vendor/.git/config
# Cek nilai spesifik pada repositori tersebut
cd proyek-dari-vendor
git config --get core.fsmonitor
git config --get core.hooksPath
git config --local --list
Yang perlu Anda cari adalah baris seperti ini — kehadiran nilai berupa perintah shell, bukan path ke binary fsmonitor yang sah, adalah tanda bahaya:
[core]
fsmonitor = "sh -c '...perintah apa pun di sini...'"
hooksPath = ".hooks-tersembunyi"
Langkah 3 — Otomatiskan pemeriksaan dengan skrip pra-buka
Refleks manual akan gagal saat tim sedang sibuk. Simpan skrip berikut sebagai audit-repo.sh, jadikan dapat dieksekusi, lalu jalankan pada setiap folder proyek yang masuk. Skrip ini sengaja hanya membaca file secara tekstual dan tidak memanggil perintah Git di dalam repositori target, sehingga tidak akan memicu penyegaran index.
#!/usr/bin/env bash
# audit-repo.sh - periksa konfigurasi Git berbahaya tanpa menjalankan git di dalam repo
set -euo pipefail
TARGET="${1:-.}"
CFG="$TARGET/.git/config"
BERBAHAYA=0
if [ ! -f "$CFG" ]; then
echo "[i] Tidak ada .git/config di $TARGET (bukan repo, atau hasil clone bersih)."
exit 0
fi
echo "[*] Memeriksa $CFG"
for KUNCI in fsmonitor hooksPath sshCommand pager editor askpass; do
if grep -Eiq "^[[:space:]]*${KUNCI}[[:space:]]*=" "$CFG"; then
echo "[!] Ditemukan kunci berisiko: $KUNCI"
grep -Ein "^[[:space:]]*${KUNCI}[[:space:]]*=" "$CFG"
BERBAHAYA=1
fi
done
# Filter clean/process pada atribut dapat menjalankan perintah eksternal
if grep -Eiq "^[[:space:]]*(clean|smudge|process)[[:space:]]*=" "$CFG"; then
echo "[!] Ditemukan filter clean/smudge/process:"
grep -Ein "^[[:space:]]*(clean|smudge|process)[[:space:]]*=" "$CFG"
BERBAHAYA=1
fi
# Hook yang dapat dieksekusi di luar sampel bawaan Git
if [ -d "$TARGET/.git/hooks" ]; then
HOOKS=$(find "$TARGET/.git/hooks" -maxdepth 1 -type f -perm -u+x ! -name "*.sample" 2>/dev/null || true)
if [ -n "$HOOKS" ]; then
echo "[!] Hook aktif ditemukan:"
echo "$HOOKS"
BERBAHAYA=1
fi
fi
if [ "$BERBAHAYA" -eq 0 ]; then
echo "[OK] Tidak ada indikator konfigurasi berbahaya. Tetap tinjau isi kode secara terpisah."
else
echo "[BAHAYA] Jangan buka repo ini dengan agen AI atau IDE sebelum dibersihkan."
exit 2
fi
Cara pakai:
chmod +x audit-repo.sh
./audit-repo.sh ~/Downloads/proyek-dari-vendor
Langkah 4 — Normalkan repositori yang masuk, jangan sekadar memeriksanya
Pemeriksaan mendeteksi apa yang Anda tahu harus dicari. Normalisasi menghilangkan seluruh kelas masalah. Alih-alih membuka folder mentah dari vendor, buang riwayat Git yang tidak dipercaya dan bangun ulang:
# Opsi A: buang .git milik pihak lain, mulai riwayat bersih
rm -rf proyek-dari-vendor/.git
cd proyek-dari-vendor
git init
git add -A
git commit -m "Impor awal dari vendor (riwayat asli dibuang)"
# Opsi B: jika riwayat commit memang dibutuhkan, clone dari folder itu
# (clone tidak membawa .git/config sumber)
git clone proyek-dari-vendor proyek-bersih
./audit-repo.sh proyek-bersih
Opsi B memanfaatkan sifat protokol Git yang sudah dibahas di atas: hasil clone selalu memiliki konfigurasi lokal yang dibuat baru. Riwayat commit tetap terjaga, konfigurasi beracun tertinggal.
Langkah 5 — Perbarui agen dan patok versi minimum di tingkat organisasi
Perbaikan tersedia untuk goose, Claude Code (jalur fsmonitor), Codex, dan Cursor. Perbarui, lalu catat versi minimum yang diizinkan dalam kebijakan tim Anda.
# Cek versi terpasang
npm ls -g --depth=0 2>/dev/null | grep -Ei "codex|claude|qwen"
# Contoh pemutakhiran paket global
npm update -g @openai/codex
# Verifikasi setelah update
codex --version
Untuk agen yang perbaikannya masih tertunda — Hermes Agent, Qwen Code, dan Grok Build pada saat penulisan — keputusan yang paling aman adalah menjalankannya hanya di dalam kontainer atau VM sekali pakai, dan hanya pada repositori hasil clone dari sumber yang dipercaya.
Langkah 6 — Jalankan agen di dalam sandbox, bukan di mesin utama
Karena eksekusi terjadi di luar sandbox internal agen, satu-satunya batas yang benar-benar dapat diandalkan adalah batas di lapisan bawahnya: kontainer, VM, atau devcontainer. Contoh minimal dengan Docker:
# Jalankan agen dalam kontainer tanpa akses ke kredensial host
docker run --rm -it \
--network none \
-v "$PWD/proyek-bersih:/work:ro" \
-w /work \
node:22-bookworm bash -lc "git config --global core.fsmonitor false && bash"
Perhatikan tiga hal pada perintah itu: --network none mencegah exfiltrasi data, :ro memasang direktori kerja sebagai hanya-baca untuk fase peninjauan awal, dan tidak ada direktori ~/.ssh atau ~/.aws yang di-mount. Prinsip ini sejalan dengan pemisahan lingkungan pengembangan yang disyaratkan kerangka kerja seperti ISO/IEC 27001 (kontrol pemisahan lingkungan) dan NIST SSDF (SP 800-218), yang menekankan perlindungan integritas lingkungan pembangunan perangkat lunak.
Konteks Hukum dan Kepatuhan di Indonesia
Bagi organisasi Indonesia, celah semacam ini bukan hanya urusan teknis. Laptop developer umumnya menyimpan kredensial produksi, kunci API, dan tak jarang salinan data pelanggan untuk keperluan pengujian. Jika eksekusi kode di mesin developer berujung pada kebocoran data pribadi, konsekuensinya masuk ke ranah UU No. 27 Tahun 2022 tentang Pelindungan Data Pribadi (UU PDP), yang mewajibkan pengendali data menerapkan langkah teknis pengamanan dan menyampaikan pemberitahuan kegagalan pelindungan data pribadi kepada subjek data dan lembaga berwenang dalam waktu 3x24 jam.
Dari sisi pelaku, penyusupan melalui repositori beracun berpotensi memenuhi unsur akses ilegal ke sistem elektronik sebagaimana diatur dalam UU ITE. Ini juga berarti satu hal yang harus ditegaskan: teknik yang dijelaskan di artikel ini disajikan untuk tujuan pertahanan. Membuat repositori berisi konfigurasi berbahaya lalu menyerahkannya kepada pihak lain tanpa izin tertulis yang jelas adalah tindakan melanggar hukum, bukan riset keamanan. Pengujian hanya sah dilakukan pada aset milik sendiri atau dengan mandat tertulis dari pemilik sistem.
Ringkasan Tindakan
Jika Anda hanya punya waktu lima belas menit hari ini, lakukan tiga hal ini:
- Jalankan
git config --global core.fsmonitor falsedi setiap mesin developer. - Perbarui semua AI coding agent ke rilis terbaru, dan catat versi minimum dalam kebijakan tim.
- Tetapkan aturan tim: repositori yang tiba sebagai arsip, folder sinkron, atau flash disk tidak pernah dibuka langsung dengan agen AI atau IDE — ia harus di-audit dan dinormalkan terlebih dahulu.
GitSpawn adalah pengingat bahwa gelombang risiko baru dari AI agentik seringkali tidak datang dari kecerdasan modelnya, melainkan dari otomatisasi yang kita tambahkan di sekelilingnya. Setiap perintah yang dijalankan sebuah agen secara otomatis, tanpa manusia melihatnya, adalah permukaan serangan baru. Prinsip lama tetap berlaku: perlakukan setiap masukan dari luar sebagai tidak dipercaya — termasuk file konfigurasi yang tampaknya tidak berbahaya di dalam folder proyek.
Siberindo membantu organisasi Indonesia melakukan penilaian keamanan rantai pasok perangkat lunak, pengerasan lingkungan pengembangan, dan kesiapan respons insiden. Hubungi tim kami untuk mendiskusikan postur keamanan tim pengembangan Anda.


