Overview
Use this workflow to help someone report a malicious ClawHub skill and propose a ClawScan profile change that catches it. Keep sensitive details private and make the public PR contain only the candidate ClawScan config.
Safety Boundary
Separate private evidence from public contribution material:
- Put live malicious skill URLs/slugs, impact, exploit details, reproduction notes, and private ClawScan artifacts in GitHub private vulnerability reporting.
- Do not paste secrets, exploit payloads, private artifacts, or live bypass details into public issues, public PR text, README edits, or config comments.
- Do not ask the reporter to execute the suspicious skill. ClawScan should scan a local copy as data; it should not run the skill's behavior.
- If the reporter does not have a GHSA/private report id yet, have them open the private report first and wait for the identifier before opening the public proposal PR.
Workflow
-
Open a GitHub private vulnerability report.
Ask the reporter to include:
- affected ClawHub skill URLs or slugs
- why the current
clawhubprofile missed it - why the proposed ClawScan config catches it
- local ClawScan artifact paths or attached artifacts
- any private reproduction context maintainers need
-
Create a proposal-only branch and config.
The public PR should add only:
proposals/<GHSA-ID>/clawscan.ymlThe file must define a
clawhubprofile. Start from the current profile and change only what is needed to catch the reported case:version: 1 profiles: clawhub: scanners: - skillspector - clawscan-static judge: command: > # candidate judge command, if changedDo not edit the official bundled profile files in the proposal PR:
internal/profiles/clawhub/clawscan.ymlinternal/profiles/clawhub/prompt.mdinternal/profiles/clawhub/output.schema.json
-
Prove the candidate catches the reported skill locally.
Use a local copy of the suspicious skill:
clawscan /path/to/suspect-skill \ --config proposals/<GHSA-ID>/clawscan.yml \ --profile clawhub \ --output ./artifacts/reported-skill-candidate.jsonIf useful, compare against the built-in profile:
clawscan /path/to/suspect-skill \ --profile clawhub \ --output ./artifacts/reported-skill-current.jsonThe public PR should not include the private artifacts unless maintainers say the contents are safe to publish. Reference them in the private report.
-
Open the public PR.
Keep the PR text minimal:
- state that a private vulnerability report exists
- point to
proposals/<GHSA-ID>/clawscan.yml - do not include sensitive skill details
- say maintainers should run the official
SkillTrustBench Profile Gate
-
Explain maintainer validation.
Maintainers run the official gate against the proposal:
clawscan benchmark SkillTrustBench \ --ids https://huggingface.co/datasets/cuhk-zhuque/SkillTrustBench-results/resolve/main/data/evaluation_subset_10pct.jsonl \ --config proposals/<GHSA-ID>/clawscan.yml \ --profile clawhub \ --output ./artifacts/skilltrustbench-candidate.jsonThe proposal's
clawhubprofile shadows the built-in profile for that run. Maintainers review the private report, upload/preserve the benchmark artifact, add a dated baseline underbenchmarks/skilltrustbench-leaderboard-10pct/, and port accepted behavior into the bundledclawhubprofile. The latestYYYY-MM-DD.jsonbaseline is the current accepted baseline.
Output Shape
When walking someone through the process, end with:
- private report checklist
- exact proposal file path
- candidate config draft or edits needed
- local ClawScan commands to run
- public PR checklist
- clear note that maintainers own the official SkillTrustBench gate and final built-in profile port