Unauthenticated action can rewrite catalog plugin scanStatus
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.
Source: openclaw/clawhub