Corpus sources

Provenance record for corpus/manifest.yaml. Surveyed 2026-10-27. Nothing below is redistributed by this repo: samples are cited by sha256 and public source, and corpus/loader.py refuses any fetched byte that does not match.

What the manifest uses

Benign, for the false-positive side: anthropics/skills at commit dbd4588f9e1033efb41dad4bef2f7947c8993d44 (2026-10-09). Three skills pinned file by file (internal-comms, mcp-builder, pdf). Most of that repo is Apache-2.0; docx/pdf/pptx/xlsx are source-available only. We fetch, we do not vendor.

Malicious, real-world: MaliciousSkillBench (arXiv:2608.19901, github.com/protectskills/MaliciousSkillBench at 893afd609be22a2dfac5a2b94bbebb4eeb99515e; data CC-BY-4.0, code Apache-2.0). It consolidates 13 upstream sources into 7,505 malicious package identities with per-source tarballs and a public packages/package_manifest.csv that lists every package's archive, path and hashes. The manifest takes its source SRC002 = MaliciousAgentSkillsBench (arXiv:2602.06547, USENIX Security 2026): 148 skills confirmed malicious in the wild on skills.rest and skillsmp.com, unsanitized, complete packages, all inside packages/SRC002_packages.tar.gz whose sha256 is printed in the repo's SHA256SUMS.txt. The dataset's own package_tree_sha256 is recorded per entry but its algorithm is undocumented, so the archive hash is the enforced pin.

Why this source first: the other large sources in that benchmark are mostly synthetic (SRC001 MalSkillBench 3,214 generated vs 703 wild, SRC010 SkillTrustBench 3,359 injected). SRC002 is the one block that is entirely real-world and openly licensed.

Malicious + benign, source-disjoint: MaliciousSkillBench Source-Disjoint split (corpus/manifest-msb-source-disjoint.yaml). The same benchmark's held-out protocol — sources SRC009 / SRC011 / SRC012, 839 malicious + 545 benign identities that the SRC002-era rules were not built on; we use 839 + 541 (four benign rows excluded, below). This is the out-of-distribution slice; SRC002 above is in-distribution (home-ground). It is expanded at load time from the pinned metadata/benchmark_manifest.csv (sha256 ac297ba6…, ref 893afd60…), which carries each identity's label, exact_hash, and frozen split membership. The skill text for these sources is not in the GitHub packages/ tree; it is fetched from the Hugging Face dataset ProtectSkills/MaliciousSkillBench (config primary) and written to the cache only if its sha256 matches exact_hash. Per-source upstream terms apply (e.g. SRC009 = osunlp/SkillHarm, SRC011 = Agent-Threat-Rule/atr-skill-benchmark); we reference, verify, never redistribute. Needs pip install datasets. The manifest pins the dataset at revision d4b42ce5… (2026-08-22). Verified 2026-10-29 at that revision: exact_hash == sha256(skill_text.encode("utf-8")) as-is for 1,380 of 1,384 rows. The other four (ASB04_007508, ASB04_009166, ASB04_009222, ASB04_009590, all benign, all SRC011) are marked text_redacted with no public_text_sha256, so the text the dataset publishes has no hash to verify against; they are listed under exclude: in the manifest and the loader never writes them.

Why this slice matters: the benchmark's own source-disjoint operating points are SkillSpector-static 0.0% recall and Cisco-local-behavioral 2.5%, against the high numbers both show in-distribution. Measuring that gap — not a single home-ground ranking — is the point.

Surveyed and not used (yet)

Source What it gives Why not
HKUST "Cloak and Detonate", arXiv:2607.02357 1,613 wild malicious skills mined from github.com/openclaw/skills No release, no hashes; the mined repo is now 404 (Wayback only). Cite only.
CSA notes SkillCloak (2026-07-06), Poisoned Skills (2026-06-24) Narrative No IoCs. Cite only.
Koi Security "ClawHavoc" (2026-02-01) Original IoC list koi.ai now redirects to Palo Alto; hashes survive on mirrors (OffSeq, PolySwarm, Antiy). Mostly payload binaries, not skills.
Palo Alto Unit 42 (2026-06-23) 6 sha256 of skill files, slugs Skills deleted from ClawHub; nothing to fetch against the hash.
Snyk skills report (2026-02-05) + blogs Slugs, publishers, 8 ClawHub URLs No hashes.
Tencent "We Scanned 50,000 Skills" (2026-04-24) Narrative No sample list. SkillTrustBench (HF cuhk-zhuque/SkillTrustBench) is CC-BY-NC-SA-4.0, mostly synthetic.
MalSkillBench, github.com/lxyeternal/MalSkillBench 703 wild + 3,214 generated malicious, 4,000 benign, full packages No license declared. Reachable via MaliciousSkillBench SRC001 if wanted.
yoonholee/agent-skill-malware (HF, MIT) 127 ClawHavoc-era SKILL.md texts Single files in a jsonl; 30 are in MaliciousSkillBench SRC005 as native single files. Next candidate.
OpenClaw/clawhub-security-signals (HF, MIT) 67,453 skill versions with registry verdicts Redacted text, silver-standard labels.
cochaviz/skill-issues, philskents/clawhub-blocklist, adibirzu/openclaw-security-monitor Slug lists, a zip, aggregated IoCs No license / aggregator with visibly synthetic rows. Cite primaries instead.
OpenSkillRisk (HF Miaow-Lab/OpenSkillRisk, arXiv:2607.20121; MIT) 139 "obviously malicious" + 124 "contextually risky" skills+tasks Gated (access request); no benign class → no FPR; a task-execution safety benchmark, not a labelled scanner corpus.
HarmfulSkillBench (github.com/TrustAIRLab/HarmfulSkillBench, arXiv:2604.15415) 200 harmful skills across 20 categories Agent-refusal benchmark; no benign class; labels not cleanly released (marked label-contaminated). Wrong shape for recall/FPR.

Rules of use

An independent, rerunnable benchmark. Every in-house number regenerates with python -m score.report. · Back to the explorer