Compare commits

...
Author SHA1 Message Date
claude-botandClaude Opus 5.5 e855921b39 fix(crowdsec): drop crawl-non_statics alerts for successful bursts
ci/woodpecker/pr/ci-scripts-test Pipeline was successful
ci/woodpecker/pr/ci-manifests-test Pipeline was successful
Replaces the per-service Music Assistant/Immich parser whitelists with
one postoverflow whitelist: http-crawl-non_statics overflows are dropped
unless at least half of the requests in the alert are 4xx.

Every self-ban in the alert history (MA 350/368/477, Immich 149/150) was
a burst of 200s from a signed-in UI. Every scanner ban on this scenario
was 404s (/.env, /.git/...). The per-service rules only covered apps
that had already failed and muted all scenarios on their paths; this
covers any image-heavy UI and touches only this scenario.

Verified in a crowdsecurity/crowdsec:v1.8.1 replay: a 60x200 burst is
whitelisted, a 60x404 burst with distinct paths still overflows and is
not whitelisted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 14:23:43 +01:00
claude-botandClaude Opus 5.5 16ca2f69b7 fix(crowdsec): whitelist Immich timeline/asset loads
ci/woodpecker/pr/ci-scripts-test Pipeline was successful
ci/woodpecker/pr/ci-manifests-test Pipeline was successful
Scrolling the Immich timeline fetches a /api/timeline/bucket and then
every /api/assets/<uuid> in it; 46-54 requests in 3-9s fired
crowdsecurity/http-crawl-non_statics against a residential Telekom IPv6
(alerts 149/150, 2026-10-23).

Same parser-stage pattern as the Music Assistant whitelist, scoped to
the Immich Traefik router and those two path prefixes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 13:55:40 +01:00
claude-botandClaude Opus 5.5 cb4cabeca7 fix(crowdsec): whitelist Music Assistant imageproxy cover-art loads
ci/woodpecker/pr/ci-scripts-test Pipeline was successful
ci/woodpecker/pr/ci-manifests-test Pipeline was canceled
The MA UI loads every cover through /imageproxy/<hash>?size=512 in one
burst; a library view (47 requests in 3s) fired
crowdsecurity/http-crawl-non_statics and banned a residential Telekom
IPv6 (alert 477, 2026-10-27).

Parser-stage whitelist scoped to the MA Traefik router and the
/imageproxy/ path. The Traefik parser sets no target_fqdn, so the
router name is used as host scope.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 13:54:34 +01:00
@@ -80,6 +80,25 @@ spec:
# community blocklists.
- 162.55.50.97/32
- 2a01:4f8:c2c:4579::1/128
postoverflows:
s01-whitelist:
# http-crawl-non_statics counts requests regardless of outcome, so a
# signed-in user of any image-heavy UI (Immich timeline, Music
# Assistant covers) trips it with a burst of 200s. Scanners trip it
# with 404s for paths that do not exist. Drop the overflow unless at
# least half of its requests were client errors (the alert carries
# the scenario's last 5 events, cache_size: 5). Only this scenario
# is affected; probing/sensitive-files/cve still fire on their own.
crawl-non-statics-success-whitelist.yaml: |
name: krenner/crawl-non-statics-success-whitelist
description: "Ignore http-crawl-non_statics bursts that mostly succeeded"
whitelist:
reason: "crawl burst of successful requests is a UI, not a scanner"
expression:
- >-
evt.Overflow.Alert.GetScenario() == 'crowdsecurity/http-crawl-non_statics' &&
count(evt.Overflow.Alert.Events, {.GetMeta('http_status') startsWith '4'}) * 2
< len(evt.Overflow.Alert.Events)
# mTLS between agents and the LAPI. Do not switch back to password auth:
# the LAPI runs without persistence, so its machine-registration DB is