fix(security): require moderator review before hiding reported skills - #3681
Patrick-Erichsen merged 1 commit into
Conversation
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Codex review: needs maintainer review before merge. Reviewed September 11, 2026, 11:47 AM ET / 15:47 UTC. ClawSweeper reviewWhat this changesThe PR makes skill reports update moderation intake without automatically hiding skills, adds authorization regression coverage, and documents the revised moderation rule. Merge readiness✅ Ready for maintainer review No blocking findings. Current main still contains the report-driven takedown mechanism, so this security fix remains necessary; it is also collaborator-authored and protected from automatic closure. Priority: P0 Review scores
Verification
How this fits togetherClawHub accepts skill reports from signed-in users and exposes them to moderators. Skill visibility controls whether catalog entries remain available, while explicit moderation actions update visibility, search embeddings, and audit records. flowchart TD
A[Signed-in reporter] --> B[Validate and deduplicate report]
B --> C[Store report and update count]
C --> D[Moderator intake]
D --> E{Authorized moderation decision}
E --> F[Hide skill and update search]
C --> G[Retain existing visibility]
Before mergeNone. Agent review detailsSecurityNone. Review metrics
Technical reviewBest possible solution: Keep reporting as auditable moderation intake, reserve report-driven visibility changes for explicit authorized decisions, and preserve historical hides for individual review. Do we have a high-confidence way to reproduce the issue? Yes: four distinct authenticated users reporting one visible skill reach the automatic-hide branch on current main; this review established the path from source without executing it. Is this the best way to solve the issue? Yes—best fix. Removing report-count authority at the public mutation matches existing HTTP moderation intake; raising the threshold or exempting official skills would preserve the coordinated takedown mechanism. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against cbfee7343ddc. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
|
Four ordinary accounts could automatically hide any visible skill by reporting it once each. Report submission now updates moderator intake and counts only; an authorized moderator must explicitly decide to hide a skill. Official and ordinary skills follow the same rule.
Addresses GHSA-5jj4-m8c9-gwcq. The advisory is published with the deployed revision and regression evidence.
Verification
cbfee7343ddc867316dd9b3de6fa8856730f9f41observedmoderationStatus: hiddenafter the fourth distinct report.http://127.0.0.1:3330: four distinct synthetic authenticated users reported an official skill through the publicskills:reportmutation. Result:reportCount: 4,moderationStatus: active,deleted: false.bun run ci:staticpassed.bun run ci:unitpassed: 6,621 tests; 497 passing files, 1 skipped.bun run ci:types-buildpassed..agents/skills/autoreview/scripts/autoreview --mode local --no-web-search: clean, no actionable findings.Best-fix verdict: best. Report counts remain useful moderation evidence, while visibility decisions stay with moderators. Raising the threshold or exempting only official skills would retain the coordinated takedown mechanism. Existing hidden rows and historical audit labels remain intact.
Combined release validation:
ci:static,ci:unit(6,656 passing tests), andci:types-buildpassed onf3cd9104981d1875cc2945418172837297afcb5d. The protected Test frontend passed four HTTP checks, two browser checks, and an archive download check.Deployment verified
Merged and deployed in
8c2de6c506bb4efabe3f0c2ffb8370b9e23d4650. Test deployment and Production deployment succeeded for that exact SHA. Live reads/downloads/image rendering and browser smoke tests pass; forged ingress is rejected. The active Production catalog rollout was restored after backend deployment. The superseded private security-fork PR is closed.