Repository navigation
fix(security): instance-wide budget and retention for anonymous bug-report screenshots - #708
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The state-cleanup job now purges reports files (row and blob) older than app.feedback_retention_days (default 90, SP_APP_FEEDBACK_RETENTION_DAYS, 0 keeps them). Adds db.ListFilesByGroup and the app.feedback_anon_screenshots_per_hour config (default 20, SP_APP_FEEDBACK_ANON_SCREENSHOTS_PER_HOUR). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Anonymous bug reports with a screenshot now spend an instance-wide hourly budget (db.BumpGlobalCounter, key feedback_report_anon) and need a free GitHub issue dispatch slot, reserved before the file is written; otherwise POST /api/mgmt/report answers 429 RATE_LIMITED and stores nothing. The per-org quota check is serialized with the insert and re-checked after it. Authenticated members keep the per-org quota only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pped per org, not per instance Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #708 +/- ##
==========================================
- Coverage 89.77% 89.75% -0.02%
==========================================
Files 1296 1296
Lines 132089 132195 +106
==========================================
+ Hits 118580 118650 +70
- Misses 13500 13536 +36
Partials 9 9
🚀 New features to boost your workflow:
|
… tolerates Freebox 502 (batch gate) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
A redialed websocket kept its handler blocked on read, which goleak reported after the checkworker package passed. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This was referenced Oct 29, 2026
Merged
fclairamb
added a commit
that referenced
this pull request
Oct 30, 2026
🤖 I have created a release *beep* *boop* --- ## [0.42.1](v0.42.0...v0.42.1) (2026-10-30) ### Bug Fixes * **checkicmp:** socket-open failure is an infrastructure error ([#712](#712)) ([208ff0a](208ff0a)) * **dash0:** explain chart Full range switch and status page visibility hint ([#702](#702)) ([9c6141b](9c6141b)) * **deps:** update github.com/dop251/goja digest to 5f913d1 ([#697](#697)) ([146cb22](146cb22)) * **deps:** update github.com/dop251/goja digest to 85be141 ([#706](#706)) ([c6abd8e](c6abd8e)) * **deps:** update github.com/dop251/goja digest to d535508 ([#696](#696)) ([7529c15](7529c15)) * **deps:** update github.com/dop251/goja digest to f818168 ([#709](#709)) ([7d03f42](7d03f42)) * **deps:** update go dependencies (non-major) ([#690](#690)) ([6de8ac7](6de8ac7)) * **deps:** update go dependencies (non-major) ([#694](#694)) ([0838916](0838916)) * **deps:** update go dependencies (non-major) ([#698](#698)) ([ea540e8](ea540e8)) * **deps:** update go dependencies (non-major) to v0.37.2 ([#704](#704)) ([67da7f7](67da7f7)) * **deps:** update module github.com/posthog/posthog-go to v1.39.0 ([#711](#711)) ([b2a7f2c](b2a7f2c)) * **deps:** update module github.com/prometheus/common to v0.73.0 ([#703](#703)) ([1ac4dc8](1ac4dc8)) * **deps:** update module github.com/slack-go/slack to v0.32.0 ([#707](#707)) ([74db3d2](74db3d2)) * ICMP capability for workers, escalation targets on events, login bug report and degraded incident fixes ([#701](#701)) ([9613f98](9613f98)) * **security:** device consent phishing guard and 2FA disable throttle ([#693](#693)) ([822186f](822186f)) * **security:** instance-wide budget and retention for anonymous bug-report screenshots ([#708](#708)) ([2be7787](2be7787)) * **security:** PAT org binding, subscribe throttle, invite lookup, SNMP secret ([#699](#699)) ([cdf59bb](cdf59bb)) * **security:** scope on-call override deletion to its schedule and org ([#714](#714)) ([6708f03](6708f03)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes the findings of the daily security scans. Each spec is the tracker for its finding.
Fixed by this PR
specs/done/2026/10/2026-10-29-01-bug-report-upload-instance-budget.md. Anonymous bug-report screenshots are capped at 100 MB per org, but the caller picks the org, so the instance-wide total is 100 MB times the number of orgs. Screenshots are also stored past the issue-dispatch cap and never deleted. The fix adds an instance-wide budget for anonymous screenshots, reserves the dispatch slot before storing, makes the quota atomic and adds a retention.Earlier scan specs (implemented, in
specs/done/2026/10/)2026-10-28-01-pat-cannot-mint-sessions-or-sign-in-factors.md. A PAT could open sessions in its owner's other orgs and add sign-in factors. Fixed in fix(security): PAT org binding, subscribe throttle, invite lookup, SNMP secret #699.2026-10-28-02-status-subscribe-throttle-and-keep-confirmed.md. Unthrottled subscribe confirm emails, and re-subscribing un-confirmed a subscriber. Fixed in fix(security): PAT org binding, subscribe throttle, invite lookup, SNMP secret #699.2026-10-28-03-invite-lookup-without-org-scan.md. Invite lookup scanned every org. Fixed in fix(security): PAT org binding, subscribe throttle, invite lookup, SNMP secret #699.2026-10-28-04-snmp-community-secret-field.md. The SNMP community was not a secret field. Fixed in fix(security): PAT org binding, subscribe throttle, invite lookup, SNMP secret #699.2026-10-27-01-device-consent-phishing-guard.md. Device-flow consent phishing. Fixed in fix(security): device consent phishing guard and 2FA disable throttle #693.2026-10-27-02-disable-2fa-attempt-throttle.md.DELETE /auth/2fahad no attempt budget. Fixed in fix(security): device consent phishing guard and 2FA disable throttle #693.2026-10-26-02-ai-repair-hold-skips-param-only-secrets.md. Therepair: autohold applied only when the check'ssecretsmap had a value. Fixed in fix(ai): hold every scheduled repair-auto run to its granted hosts #683.2026-10-25-01-ai-repair-grant-dropped-by-reference-resolution.md. The repair grant was compared after${…}references were resolved. Fixed in fix(ai): hold the repair: auto host grant when the script or env holds a reference #678; U1 closed the remaining gap.2026-10-24-01-ai-repair-auto-apply-partial-runtime-host.md.repair: autoapplied a candidate that kept a literal host and added one built at runtime. Fixed in feat(ai): hold auto-applied repairs to the previous version's hosts (+ scan specs) #663.2026-10-23-02-ai-loop-secret-relay-through-model.md. AI loops relayed an encoded secret through the model.2026-10-22-01-ai-script-secret-host-guard-runtime.md. AI runs with real secrets were only host-checked by regex.2026-10-20-01-sender-response-body-caps.md. Notification senders and RabbitMQ read responses uncapped.2026-10-19-01-a2a-response-size-cap.md. A2A responses were read uncapped.2026-10-18-01-plugin-schema-file-ref.md. Plugin schema$refcould load local files.2026-10-17-01-postgres-check-connection-config.md. Postgres conninfo escaping and fallback to the worker'sPG*env.2026-10-16-15-pat-cache-revocation.md. The PAT cache outlived revocation.2026-10-16-14-totp-on-federated-sign-in.md. No TOTP on federated sign-in.2026-10-16-13-atomic-auth-attempt-counters.md. Auth attempt counters were not atomic.2026-10-16-12-mcp-tokens-rejected-on-rest.md. MCP OAuth tokens worked on REST.2026-10-16-11-slack-signature-fail-closed.md. Slack signature check failed open.2026-10-16-10-discovery-scans-egress-guard.md. Discovery scans were outside the egress policy.2026-10-16-09-js-check-nested-docker-guard.md. A JSdockersub-check bypassed the gate.2026-10-16-08-status-page-components-cross-org.md. Status-page components could be edited across orgs.2026-10-16-07-guard-status-subscriber-and-publication-webhooks.md. Subscriber and publication webhooks were not guarded.2026-10-16-06-accept-invite-existing-account.md. Accepting an invite logged in as an existing account.2026-10-16-05-kubeconfig-exec-and-incluster.md. KubeconfigexecandinClusterwere allowed.2026-10-16-04-mysql-dsn-injection.md. MySQL DSN injection.2026-10-16-03-env-secret-reference-allowlist.md. No allowlist for${env:}references.2026-10-16-02-token-purpose-separation.md. Purpose tokens were accepted as access tokens.2026-10-16-01-microsoft-signin-unverified-email-linking.md. Microsoft nOAuth email linking.🤖 Generated with Claude Code