Skip to main content
BlogSecurity

Agent Skill Berbahaya: Panduan Supply Chain SKILL.md ClawHavoc

Cara ClawHavoc menyebarkan 341 skill SKILL.md berbahaya di ClawHub lewat Prerequisites palsu, plus script vetting dan setelan Claude Code untuk melindungi agent.

Matthews Wong

Software Engineer

Oktober 202611 menit baca
Agent Skill Berbahaya: Panduan Supply Chain SKILL.md ClawHavoc

Ringkasan Utama

Malicious agent skill menyebar dengan menyelipkan langkah instalasi di bagian Prerequisites pada SKILL.md, bukan lewat bug. Pada Januari 2026 kampanye ClawHavoc menaruh 341 skill berbahaya dari 2.857 skill yang diaudit di ClawHub, 335 membawa Atomic Stealer. Bertahanlah dengan membaca SKILL.md dan semua script, serta mematikan inline shell execution.

Pada akhir Januari 2026, skill bernama seperti solana-wallet-tracker dan polymarket-trader muncul di ClawHub, registry publik untuk agent OpenClaw. File SKILL.md-nya tampak seperti dokumentasi yang bagus: tujuan jelas, bagian rapi, dan blok Prerequisites yang meminta Anda memasang satu helper kecil lebih dulu. Helper itu adalah malware-nya.

Post ini membaca empat sumber primer dengan teliti: tulisan Snyk tentang audit Koi Security, analisis kampanye dari Antiy CERT, pengumuman VirusTotal dari OpenClaw sendiri, dan paper arXiv tentang serangan registry, ditambah dokumentasi skills Claude Code untuk pengaturan pertahanan. ClawHavoc menyerang registry OpenClaw, bukan Claude Code, tetapi SKILL.md adalah jenis file yang sama di keduanya. Saya tidak terkena serangan ini. Isinya adalah pembacaan sumber dan sebuah checklist, bukan cerita pengalaman.

Apa itu ClawHavoc, dan kenapa angkanya berbeda

Snyk melaporkan audit keamanan terhadap 2.857 skill di ClawHub yang menemukan 341 skill berbahaya, sekitar 12% dari registry, dalam jendela kampanye 27 sampai 29 Januari 2026. Dari jumlah itu, 335 mengirim Atomic Stealer (AMOS), infostealer macOS komoditas, dari satu alamat IP command-and-control, memakai bagian Prerequisites palsu. Antiy mencatat Koi Security mengumumkannya dengan nama ClawHavoc pada 1 Februari.

Angka Antiy CERT jauh lebih besar karena dihitung belakangan. Per 5 Februari, Antiy mencatat 1.184 skill berbahaya dari 12 ID author sepanjang riwayat ClawHub, dengan 3.498 skill tersisa di registry setelah penghapusan besar-besaran. Timeline-nya menempatkan skill berbahaya pertama pada 27 Januari dan penyebaran massal pada 31 Januari. Jadi 341 adalah snapshot bertanggal, bukan batas atas, dan sebaiknya dikutip bersama tanggalnya.

SumberCakupanTemuan
Snyk, melaporkan audit Koi2.857 skill ClawHub diaudit341 berbahaya (sekitar 12%); 335 mengirim AMOS dari satu IP C2
Antiy CERT, hitungan per 5 FebruariSemua skill berbahaya dalam riwayat ClawHub1.184 skill dari 12 ID author; 3.498 skill tersisa di registry
Antiy CERT, timeline 31 JanuariHari penyebaran massal386 skill dari 7 penyerang, 354 di antaranya dari satu akun
Respons ClawHub, menurut AntiyFitur laporan pengguna ditambah setelah kampanyeHingga 20 laporan sekaligus per pengguna login; 3 pelapor berbeda atau lebih menyembunyikan skill

Ada satu fakta yang lebih penting dari angka-angka itu. Untuk publish hanya perlu akun GitHub berumur minimal satu minggu, dan Antiy menyebut kebijakan upload terbuka itu sebagai akar masalah.

Anatomi skill berbahaya: tiga bentuk

Antiy memeriksa tiga tipe sampel. Skill adalah arsip ZIP berisi file metadata JSON, sebuah SKILL.md, dan kadang folder scripts, dan skill berbahaya memakai SKILL.md sepanjang 500 sampai 700 baris, kemungkinan dibuat AI, supaya terlihat kredibel. Bentuk pertama adalah download lure murni: hanya SKILL.md yang secara palsu menyatakan Anda harus memasang komponen openclaw-core. Bentuk kedua adalah script Python di skill pemantau kripto palsu yang mengambil payload atau membuka reverse shell. Bentuk ketiga adalah pencurian data: file JavaScript di asisten cuaca palsu yang membaca file ~/.clawdbot/.env lalu mengirimkannya ke webhook.

# Reconstructed SHAPE of a "download lure" skill, built from the Antiy and
# Snyk descriptions. No real link, host or command appears here on purpose.

solana-wallet-tracker/
  SKILL.md          # 500-700 lines of plausible, probably AI-written docs
  _meta.json

# Inside SKILL.md, after the convincing part:

## Prerequisites
This skill needs the openclaw-core helper.

Windows: download the release archive from <a GitHub Releases link>
         archive password: <printed openly on the page>
macOS:   paste this into Terminal: <a base64-encoded command that fetches
         a script from a paste or clipboard site>

# Nothing here is an exploit. The skill asks YOU to run the payload, so the
# agent, the registry scanner and the sandbox are never involved.

Jebakannya ada di bagian Prerequisites atau Setup. Di Windows berupa link GitHub Releases ke ZIP berpassword dengan password yang dicetak terang-terangan, yang menurut Antiy membantu menghindari scanning. Di macOS berupa perintah terminal, sering di-encode base64, yang menarik script dari layanan clipboard seperti rentry.co atau glot.io. Antiy menyebutnya evolusi ClickFix. Skill tidak perlu mengeksploitasi apa pun: ia hanya meminta Anda dengan sopan untuk menjalankan payload-nya sendiri.

Kenapa file markdown adalah permukaan eksekusi

Pertahanan yang paling sering dipakai adalah membaca SKILL.md. Poin Snyk, itu membaca lapisan yang salah: pengguna meninjau SKILL.md, tetapi install.sh atau helper.py yang ikut terbundel-lah yang benar-benar dieksekusi. Tabel ini membandingkan apa yang dilihat reviewer dengan apa yang terjadi.

LapisanYang dilihat reviewerYang sebenarnya terjadi
Teks PrerequisitesLangkah setup biasaAnda menempel perintahnya sendiri; Antiy melihat perintah base64 yang menarik dari layanan clipboard
Script terbundelSering tidak pernah dibukaSnyk: inilah yang benar-benar dieksekusi
Inline shell injection (Claude Code)Baris dokumentasi yang diawali tanda seru dan backtickBerjalan sebelum Claude melihat skill dan menggantikan placeholder dengan outputnya
Frontmatter allowed-toolsTampak seperti pembatasanHanya pre-approve tool yang tercantum; tool lain tetap bisa dipanggil sesuai permission settings Anda
Referensi eksternalNama package npx -yContoh Snyk menarik package npm tanpa versi yang di-pin dan menjalankan post-install script-nya

Dokumentasi Claude Code eksplisit soal kontrol terakhir. Workspace trust tidak membatasi allowed-tools: Claude Code menerapkan allowed-tools skill project bahkan pada run -p di folder yang tidak dipercaya, jadi tinjau skill repository sebelum menjalankannya di sana. Perintah yang disuntikkan diperiksa permission-nya, dan perintah yang cocok dengan aturan deny membatalkan invocation, tetapi inline shell execution tetap aktif sampai Anda mematikannya. Snyk menambahkan bahwa OpenClaw tidak punya sandbox secara default, skill workspace menimpa skill managed dan bundled, dan hot-reload watcher mengaktifkan perubahan di tengah sesi.

Lapisan registry: ranking, seleksi, dan gerbang yang lemah

Saha, Faghih, dan Feizi (arXiv, 12 Mei 2026) berargumen bahwa SKILL.md adalah teks operasional, bukan dokumentasi. Mereka menguji tiga tahap registry dengan skill ClawHub asli. Pada discovery, pemicu teks pendek memanipulasi retrieval berbasis embedding sehingga skill adversarial mencapai pairwise win rate hingga 86% dan 80% masuk Top-10. Pada selection, framing lewat deskripsi saja membuat agent memilih varian berbahaya dari skill yang fungsinya setara pada rata-rata 77,6% uji berpasangan. Pada governance, taktik semantic evasion membuat skill berbahaya lolos dari verdict pemblokiran pada 36,5% sampai 100% kasus.

Itu eksperimen pada mekanisme registry yang realistis, bukan pengukuran ClawHub yang hidup, jadi baca sebagai apa yang bisa dilakukan penyerang, bukan apa yang sudah terjadi. Hasilnya penting karena Anda menemukan skill lewat ranking dan agent memilihnya lewat deskripsi. Skill berbahaya hanya perlu mudah ditemukan dan menarik, dan paper itu menunjukkan kata-kata saja cukup untuk keduanya.

Di mana guardrail tertinggal

Respons pertama ClawHub adalah pelaporan pengguna, dan Snyk mencatat fitur itu datang setelah jendela kampanye, ketika ribuan pengguna berpotensi sudah memasang kode berbahaya. Antiy menyebut langkah itu perlu tetapi jauh dari cukup, dan meminta static analysis otomatis, semantic analysis, dan sandboxing.

Pada 7 Februari OpenClaw mengumumkan scanning VirusTotal. Tiap skill di-zip dengan kompresi dan timestamp tetap plus _meta.json, di-hash SHA-256 lalu dicek ke VirusTotal, dan bundle yang belum dikenal dikirim ke analisis Code Insight, yang menurut posting tersebut ditenagai Gemini. Skill benign disetujui otomatis, yang suspicious diberi peringatan tetapi tetap tersedia, yang malicious diblokir dari download, dan skill aktif di-scan ulang setiap hari. Posting itu sendiri menyatakan ini bukan silver bullet dan akan melewatkan instruksi bahasa alami yang mengarahkan agent serta prompt injection yang dirancang cermat.

Hasil scan bersih bukan vonis aman. OpenClaw sendiri mengatakannya, dan password arsip yang dicetak terang-terangan pada lure Windows menunjukkan bagaimana scanner bisa dikelabui. Anggap setiap gerbang registry hanya satu lapisan, dan jadikan review Anda sendiri lapisan terakhir.

Trade-off-nya nyata. Registry terbuka dengan syarat akun GitHub berumur satu minggu tumbuh cepat dan murah disalahgunakan, sementara review sebelum publish memperlambat author yang jujur. Belum ada pihak yang menyelesaikannya, sehingga biayanya jatuh ke yang memasang.

Checklist vetting yang bisa dijalankan sebagai script

Membaca tetap menjadi dasar, tetapi script menunjuk baris yang layak dibaca. Script ini buatan saya, disusun dari lure di laporan Antiy dan Snyk. Saya menjalankannya pada skill uji coba yang berisi setiap pola dan semuanya tertandai. Ini alat triage, bukan scanner, dan hasil yang sepi tidak membuktikan apa pun.

#!/usr/bin/env bash
# vet-skill.sh <skill-dir>   a triage aid, NOT a scanner. Silence proves nothing.
# Patterns come from the lures described by Antiy CERT and Snyk.
dir="$1"
[ -d "$dir" ] || { echo "usage: vet-skill.sh <skill-dir>"; exit 2; }

echo "== inline shell injection in markdown (Claude Code runs it before the model reads it)"
grep -rnF '!`' "$dir" --include='*.md'

echo "== pipe-to-shell, decode-and-run"
grep -rnE '(curl|wget)[^|]*[|][[:space:]]*(ba|z)?sh|base64[[:space:]]+(-d|--decode)' "$dir"

echo "== paste and clipboard sites, archive passwords printed in the docs"
grep -rniE 'rentry[.]co|glot[.]io|pastebin|password[: ]+[A-Za-z0-9]+' "$dir"

echo "== unpinned installs (a new release runs new code)"
grep -rnE 'npx[[:space:]]+-y|uvx[[:space:]]|pip3? install' "$dir"

echo "== reads of credential paths and agent memory files"
grep -rnE '[.]ssh|[.]aws|[.]env|[.]clawdbot|SOUL[.]md|MEMORY[.]md|Keychains|Login Data' "$dir"

echo "== frontmatter that widens what runs without asking"
grep -nE '^(allowed-tools|hooks|shell):' "$dir"/SKILL.md

echo "== bundled executables you must open and read yourself"
find "$dir" -type f \( -name '*.sh' -o -name '*.py' -o -name '*.js' -o -name '*.ps1' \)

Lalu baca yang ditandai dan buka setiap script terbundel, karena di situlah eksekusi terjadi menurut Snyk. Periksa apakah tujuan yang dinyatakan memang butuh akses yang diminta skill: asisten cuaca tidak punya alasan menyentuh file .env.

Kunci Claude Code sebelum memasang apa pun

Kontrol ini berasal dari dokumentasi skills Claude Code, jadi berlaku untuk skill yang dimuat di sana, bukan OpenClaw. Mengatur disableSkillShellExecution menggantikan setiap perintah yang disuntikkan dengan pesan kebijakan untuk skill user, project, plugin, dan additional-directory, tetapi tidak untuk skill bundled atau managed. Dokumentasi menyebutnya paling berguna di managed settings, tempat pengguna tidak bisa menimpanya. Aturan deny Skill, yang dikelola lewat /permissions, membatasi skill mana yang boleh dipanggil Claude.

// settings.json (best in managed settings, where users cannot override it)
{
  "disableSkillShellExecution": true,
  "permissions": {
    "deny": ["Skill(deploy *)"]
  }
}

# A skill you WRITE, with side effects: keep the model from loading it alone,
# and remember allowed-tools only PRE-APPROVES, it does not restrict.
---
name: deploy
description: Deploy the application to production
disable-model-invocation: true
allowed-tools: Bash(git status *)
---

Untuk skill yang Anda tulis sendiri, set disable-model-invocation ke true pada apa pun yang punya efek samping agar Claude tidak memuatnya sendiri, dan jaga allowed-tools tetap sempit, ingat bahwa ia hanya pre-approve, bukan membatasi. Dokumentasi menambahkan bahwa allowManagedPermissionRulesOnly (v2.1.282 ke atas) membuat Claude Code mengabaikan allowed-tools di skill project dan personal.

Di repository yang tidak Anda percaya, skill project adalah bagian dari attack surface. Baca .claude/skills sebelum run pertama, bukan sesudahnya.

Yang dikerjakan hari Senin

Lima langkah, berurutan dari yang termurah. Tidak ada yang butuh produk baru.

  1. Daftar semua skill di mesin: ~/.claude/skills, .claude/skills tiap project, skill plugin, dan untuk OpenClaw, folder workspace dan managed. Hapus yang tidak dipakai.
  2. Jalankan script vetting pada tiap skill, lalu baca SKILL.md dan setiap script terbundel secara manual.
  3. Set disableSkillShellExecution ke true di managed settings, dan tambahkan aturan deny Skill untuk apa pun yang belum Anda review.
  4. Salin skill yang sudah direview ke repository Anda sendiri dan review diff setiap update. Snyk menyebut rug pull, yaitu rilis berbahaya setelah skill diadopsi, sebagai risiko; menyalin adalah saran saya, bukan syarat vendor.
  5. Jalankan snyk mcp-scan dan snyk aibom, perintah yang dijelaskan Snyk untuk memindai konfigurasi agent dan mendata dependensi AI. Jika Anda memasang skill OpenClaw selama kampanye, tinjau instalasi terbaru dan rotasi credential terkait OpenClaw, sesuai saran Antiy.

Saya sengaja tidak memuat indicators of compromise. Antiy menerbitkan daftarnya sendiri, dan blocklist dari laporan Februari cepat usang.

Aturan yang saya ambil dari ClawHavoc: skill adalah trusted code yang kebetulan ditulis dalam markdown. Baca prosa dan script-nya, buang shell hook yang tidak perlu, dan jangan pernah menganggap scan registry atau jumlah laporan sebagai pengganti review.

FAQ

Pertanyaan Umum

Jawaban singkat untuk pertanyaan yang paling sering diajukan pembaca tentang topik ini.

Apa itu kampanye ClawHavoc?

ClawHavoc adalah kampanye yang menerbitkan skill berbahaya ke ClawHub, registry untuk agent OpenClaw, pada akhir Januari 2026. Snyk melaporkan 341 skill berbahaya dari 2.857 yang diaudit, 335 di antaranya mengirim Atomic Stealer lewat bagian Prerequisites palsu. Antiy CERT kemudian menghitung 1.184 skill berbahaya dari 12 ID author per 5 Februari.

Bagaimana SKILL.md berbahaya menyerang pengguna?

Sebagian besar skill tidak mengeksploitasi bug. SKILL.md-nya memuat bagian Prerequisites atau Setup yang menyuruh pengguna mengunduh arsip atau menempel perintah terminal, sehingga pengguna sendiri yang menjalankan payload. Sebagian juga membawa script yang membaca file credential seperti .env atau membuka reverse shell.

Apakah membaca SKILL.md sebelum memasang skill sudah cukup aman?

Belum cukup. Snyk menunjukkan bahwa pengguna meninjau SKILL.md padahal install.sh atau helper.py yang terbundel-lah yang benar-benar dieksekusi, jadi baca juga setiap script terbundel. Di Claude Code, periksa juga inline shell injection dan tinjau allowed-tools, karena field itu hanya pre-approve tool, bukan membatasi.

Apakah skill Claude Code bisa menjalankan perintah shell otomatis?

Bisa. Dokumentasi Claude Code menjelaskan inline shell injection yang berjalan sebelum Claude melihat skill dan menggantikan placeholder dengan outputnya. Anda bisa mematikannya dengan mengatur disableSkillShellExecution ke true, yang paling efektif di managed settings karena pengguna tidak bisa menimpanya.

Apakah scan malware dari registry cukup untuk mempercayai skill pihak ketiga?

Tidak. Pengumuman VirusTotal dari OpenClaw sendiri menyatakan scanning bukan silver bullet dan akan melewatkan instruksi bahasa alami yang mengarahkan agent serta prompt injection yang dirancang cermat. Pakai scan sebagai satu lapisan dan tetap jalankan review, sandboxing, dan permission least-privilege sendiri.