#3772·clawhub

Unauthenticated action can rewrite catalog plugin scanStatus

Author: SebTardifCreated Sep 16, 2026Updated Sep 16, 2026
Labelsclawsweeper:source-reproclawsweeper:no-new-fix-prclawsweeper:needs-security-reviewimpact:securityissue-rating: 🦞 diamond lobsterP0clawsweeper:bulk-filed

What happens

packages.backfillLatestPackageScanStatus is a public Convex action with no requireUserFromAction / assertAdmin. It runs backfillLatestPackageScanStatusInternal, which paginates every package, patches scanStatus and verification on the package and latest release, upserts search digests, and reschedules itself.

Anyone who can reach the public Convex deployment can rewrite catalog security badges. A digest can move off malicious. Sibling backfillSkillStaticScans and normalizeOfficialPublisherPackages already require an admin.

How to see it

From the code: convex/packages.ts backfillLatestPackageScanStatus. The handler calls runMutationRef on the internal mutation with no session check.

Expected

Unauthenticated callers get Unauthorized. Non-admins get Forbidden. Admins can still run the backfill. The internal mutation stays available for the self-schedule path.