- Prompt injection yang disisipkan di judul menyuntikkan perintah melalui bot triase issue berbasis AI milik Cline
- Dengan mencuri token npm, pelaku menyebarkan Cline berbahaya sambil memasang agen AI OpenClaw tanpa izin
- Pelaku membangun rantai 5 tahap: prompt injection → eksekusi kode arbitrer oleh bot AI → cache poisoning → pencurian kredensial → distribusi paket berbahaya
- Kontrol keamanan yang ada (code review, npm audit, provenance attestations) gagal mendeteksi serangan ini
- Seorang peneliti keamanan menemukan dan melaporkan kerentanan ini pada akhir Desember 2025, tetapi tidak ada respons selama 5 minggu, dan setelah dipublikasikan pun serangan tetap berjalan akibat kesalahan rotasi kredensial
- Muncul pola ancaman rantai pasok baru di mana agen AI memasang agen AI lain, yang menegaskan risiko otomasi AI di lingkungan CI/CD
Ringkasan serangan
- Pada 17 Februari 2026,
cline@2.3.0 dipublikasikan ke npm. Binernya sama dengan versi sebelumnya, tetapi satu baris ditambahkan ke package.json: "postinstall": "npm install -g openclaw@latest"
- Akibatnya, OpenClaw otomatis terpasang pada sekitar 4.000 sistem pengembang yang memasang atau memperbarui Cline selama 8 jam tersebut
- OpenClaw adalah agen AI terpisah dengan akses penuh ke sistem, dan dipasang secara global tanpa persetujuan pengguna
Rantai serangan (Clinejection)
- Tahap 1: Prompt injection
- Cline menggunakan workflow triase issue AI berbasis
claude-code-action dari Anthropic
- Karena konfigurasi
allowed_non_write_users: "*", siapa pun bisa membuka issue dan memicu bot
- Pada 28 Januari, pelaku membuat Issue #8904 dengan judul yang tampak seperti laporan performa, tetapi menyembunyikan perintah untuk “memasang paket tertentu”
- Tahap 2: Eksekusi perintah oleh bot AI
- Claude menganggap perintah itu sebagai instruksi yang sah lalu menjalankan
npm install dari fork pelaku (glthub-actions/cline)
package.json di fork tersebut berisi skrip preinstall yang mengeksekusi skrip shell jarak jauh
- Tahap 3: Cache poisoning
- Skrip itu menyebarkan Cacheract untuk meracuni cache GitHub Actions
- Dengan menyuntikkan lebih dari 10GB data, cache yang sah terdorong keluar, lalu kunci cache yang digunakan workflow rilis nightly milik Cline dipalsukan
- Tahap 4: Pencurian kredensial
- Saat workflow rilis memulihkan
node_modules dari cache yang sudah terkontaminasi, NPM_RELEASE_TOKEN, VSCE_PAT, dan OVSX_PAT dicuri
- Tahap 5: Distribusi paket berbahaya
- Pelaku lalu memublikasikan
cline@2.3.0 menggunakan token npm yang dicuri
- Monitoring StepSecurity mendeteksi anomali 14 menit kemudian, dan paket itu dihapus 8 jam setelahnya
Kegagalan respons dan tindak lanjut
- Peneliti keamanan Adnan Khan menemukan kerentanan ini pada Desember 2025 dan melaporkannya melalui GitHub Security Advisory pada 1 Januari 2026, tetapi tidak mendapat respons selama 5 minggu
- Setelah Khan melakukan pengungkapan publik pada 9 Februari, Cline menghapus workflow triase AI dan menambal masalah dalam 30 menit
- Keesokan harinya mereka mulai melakukan rotasi kredensial, tetapi menghapus token yang salah, sementara token yang terekspos tetap aktif
- Pada 11 Februari, kesalahan itu ditemukan dan rotasi ulang dilakukan, tetapi saat itu pelaku sudah mencuri kredensial
- Token npm tetap cukup lama valid sehingga 6 hari kemudian masih bisa dipakai untuk menyebarkan paket berbahaya
- Khan bukan pelakunya — aktor lain yang tidak diketahui menemukan PoC dari repositori uji Khan dan mempersenjatainya langsung terhadap Cline
Pola baru: AI memasang AI
- Insiden ini menunjukkan bentuk baru di mana alat AI memasang agen AI lain, sehingga memunculkan masalah kepercayaan rekursif dalam rantai pasok
- Pengembang mempercayai Tool A (Cline) → Tool A disusupi lalu memasang Tool B (OpenClaw)
→ Tool B punya kemampuan sendiri yang terpisah dari Tool A (eksekusi shell, akses kredensial, pemasangan daemon persisten), dan tidak terlihat dalam keputusan kepercayaan awal pengembang
- OpenClaw dapat membaca kredensial dari
~/.openclaw/, menjalankan perintah shell melalui Gateway API, dan memasang dirinya sebagai daemon sistem persisten yang tetap bertahan setelah reboot
- Endor Labs menilai ini sebagai payload setingkat proof of concept, tetapi yang penting adalah mekanismenya; payload berikutnya mungkin bukan lagi PoC
- Ini adalah versi rantai pasok dari masalah Confused Deputy, di mana otoritas yang diberikan pengembang didelegasikan ke agen pihak ketiga
- Pengembang memberi kuasa delegasi kepada Cline, lalu Cline (karena disusupi) mendelegasikan kuasa itu ke agen yang sepenuhnya berbeda dan tidak pernah dievaluasi, dikonfigurasi, atau disetujui oleh pengembang
Mengapa kontrol keamanan lama gagal
- npm audit: paket yang dipasang oleh skrip
postinstall adalah paket yang sah dan tidak berbahaya (OpenClaw), jadi tidak ada malware yang bisa dideteksi
- Code review: biner CLI identik byte per byte dengan versi sebelumnya, dan hanya satu baris di
package.json yang berubah, sehingga pemeriksaan diff otomatis yang fokus pada perubahan biner tidak mendeteksinya
- Provenance attestation: saat itu Cline belum menggunakan npm provenance berbasis OIDC, sehingga token yang sudah disusupi bisa dipakai untuk distribusi tanpa metadata provenance
- StepSecurity menandainya sebagai anomali
- Prompt izin: pemasangan terjadi di hook postinstall saat
npm install, dan tidak ada alat coding AI yang meminta konfirmasi pengguna sebelum menjalankan skrip lifecycle dari dependensi, sehingga manipulasi tidak terlihat
- Serangan ini mengeksploitasi kesenjangan antara apa yang diyakini pengembang sedang dipasang (versi tertentu dari Cline) dan apa yang benar-benar dijalankan (skrip lifecycle arbitrer dalam paket dan instalasi transitif)
Respons pascainsiden Cline
- Langkah perbaikan yang diumumkan dalam Post Mortem
- Menghapus penggunaan cache GitHub Actions dari workflow yang menangani kredensial
- Mengadopsi OIDC provenance attestation untuk distribusi npm, dan menghapus token jangka panjang
- Menambahkan persyaratan verifikasi untuk rotasi kredensial
- Memulai pembangunan proses pengungkapan kerentanan resmi dengan SLA
- Menugaskan audit keamanan pihak ketiga untuk infrastruktur CI/CD
- Migrasi ke OIDC saja sebenarnya sudah cukup untuk mencegah serangan ini
- Token yang dicuri tidak akan bisa dipakai untuk menerbitkan paket dalam skema provenance yang memerlukan bukti kriptografis dari workflow GitHub Actions tertentu
Masalah struktural dan pelajarannya
- Clinejection adalah serangan rantai pasok sekaligus masalah keamanan agen
- Titik masuk serangan adalah input bahasa alami di judul issue GitHub, lalu bot AI mengeksekusinya sebagai perintah
- Strukturnya sama dengan kontaminasi alat MCP atau serangan pada registri skill agen
- Input tak tepercaya mencapai agen → agen bertindak → tidak ada pihak yang mengevaluasi tugas hasilnya sebelum dieksekusi
- Dalam kasus ini, agennya bukan asisten coding lokal milik pengembang, melainkan workflow CI otomatis yang berjalan pada setiap issue baru dan memiliki akses shell serta kredensial yang di-cache
- Radius ledaknya bukan satu mesin pengembang, melainkan seluruh pipeline distribusi proyek
- Semua tim yang men-deploy agen AI ke CI/CD (triase issue, code review, pengujian otomatis, dll.) memiliki paparan yang sama
- Mereka harus menyadari risiko gabungan antara input tak tepercaya dan akses ke rahasia
- Agen dapat memproses input tak tepercaya (issue, PR, komentar) sambil tetap punya akses ke secret (token, key, kredensial)
- Intersepsi tingkat syscall dapat menangkap jenis serangan ini pada lapisan operasional:
- Saat bot triase AI mencoba menjalankan
npm install dari repositori yang tak terduga, evaluasi dapat dilakukan berdasarkan kebijakan terlepas dari isi judul issue, dan egress dapat diblokir ketika skrip lifecycle mencoba mengekfiltrasi kredensial ke host eksternal
3 komentar
Kalau sudah dihajar sampai segini, mestinya setidaknya muncul kesadaran bahwa saat memakai LLM atau agen, aspek keamanan harus lebih diperhatikan..
Untuk sementara ini, sepertinya bakal banyak insiden meledak gara-gara prompt injection
Belakangan ini hal serupa terus terjadi di package npm.
Komentar Hacker News
Workflow triase issue milik Cline berjalan pada event
issuesdan disetel denganallowed_non_write_users: "*"Artinya, siapa pun cukup dengan membuka issue bisa memicu GitHub Actions, dan berkat opsi
--allowedTools "Bash,Read,Write,Edit,Glob,Grep,WebFetch,WebSearch", Claude mendapat hak eksekusi kode arbitrer di dalam workflow branch defaultMenjalankan agen AI dengan konfigurasi seperti ini terlihat seperti tindakan yang gila
Bahkan ada upaya untuk membuatnya otomatis membaca mention media sosial perusahaan dan membuat bug report
Saya membantu membuat kebijakan AI di perusahaan, dan saat kami menguji Claude dengan email yang bernada mengancam, ia mencoba mengeluarkan seluruh informasi tiket keamanan apa adanya
Untungnya fitur pengiriman email dinonaktifkan, jadi tidak benar-benar terkirim
Otomatisasi AI yang tanpa pertahanan seperti ini mengingatkan pada kekacauan SQL injection dulu. Rasanya banyak orang harus kena dulu baru pengaman yang layak akan muncul
Artikel seharusnya lebih menekankan bahwa trigger
issuesdi GitHub sama berbahayanya denganpull_request_targetyang terkenal buruk ituBegitu input pengguna masuk ke dalam workflow, itu harus dianggap sebagai kode serangan potensial
Dulu CI dipisah di Travis dan otomasi di Zapier, tetapi GitHub Actions menyatukan semuanya dan memberi hak yang terlalu besar
Zapier tidak menjalankan binary arbitrer, jadi risiko komprominya jauh lebih rendah
Sampai sekarang belum ada metode validasi input yang benar-benar aman
Ada juga kasus LLM mengeksekusi perintah yang di-encode dalam base64 (contoh tautan)
Pada akhirnya semua input harus diperlakukan sebagai data yang bersifat adversarial. Karena LLM juga bisa “berhalusinasi” menciptakan tindakan sendiri, akses ke sistem produksi benar-benar tidak boleh diberikan
Secara default, workflow apa pun seharusnya tidak membawa kredensial, dan hanya dibatasi pada event dari pengguna berprivilegi seperti maintainer
Bedanya, Zapier diperlakukan sebagai layanan black-box sehingga tanggung jawab keamanannya sepenuhnya ada di pihak mereka
Sementara GHA punya struktur tanggung jawab bersama antara GitHub dan pengguna, jadi lebih rumit
Meski begitu, GHA jauh lebih fleksibel daripada Zapier, dan kebanyakan pengguna pada akhirnya tetap mengeksekusi kode arbitrer lewat Lambda atau webhook
Judul issue yang jadi masalah adalah sebagai berikut
Namun
github:cline/cline#b181e0ternyata sebenarnya menunjuk ke repositori fork yang berisi skrip postinstall berbahayaTautan commit bermasalah
Sampai barusan saya juga mengira
github:cline/clineberarti repositori yang samaSaya penasaran apakah npm bisa melakukan mitigasi lewat integrasi GitHub
Judul issue
${{ github.event.issue.title }}dimasukkan mentah-mentah ke prompt Claude tanpa sanitasi input, dan itulah masalahnyaNamun karena Claude cenderung “dengan ramah memahami” permintaan di dalam prompt, sanitasi sederhana sepertinya juga tidak akan efektif
Semua perintah npm harus dijalankan di lingkungan sandbox
Karena melihat vektor serangan seperti ini makin bertambah, saya sampai membuat sendiri amazing-sandbox
Semua developer yang memasang atau memperbarui Cline dalam rentang 8 jam ikut memasang agen AI terpisah bernama OpenClaw ke seluruh sistem mereka
Namun, mereka yang memakai pengaturan npm
ignore-scripts=truemenjadi pengecualianPostmortem pasca-insiden dari Cline merangkum fakta-fakta terkait dengan baik
Hanya saja, apakah OpenClaw dianggap sebagai “payload yang tidak berbahaya” atau sebagai trojan horse bergantung pada sudut pandang
Tidak ada orang yang akan sepenuhnya mempercayai AI atau alat AI
Insiden seperti ini sekali lagi mengingatkan hal itu dengan sangat keras
Saat saya cari, ada juga artikel yang menyebut OpenClaw sebagai “agen AI viral”
Dulu, perangkat lunak seperti ini akan langsung dianggap sebagai kompromi sistem sejak dipasang
Struktur di mana kode dengan hak arbitrer menjalankan input yang tidak tepercaya adalah masalah utamanya, dan dalam kasus ini justru hal itu dijual sebagai nilai inti produk
Mengejutkan bahwa perusahaan AI masih belum memahami kemiripan antara SQL injection dan prompt injection
Prompt juga memerlukan perlindungan yang sama