Files
felhom.eu/documentation/audits/security-watch-2026-10-26/SPIKE.md
T

5.8 KiB
Raw Blame History

SPIKE — which security-notice sources work (security watch, R-1303), 2026-10-26 evening

Measured from DooPlex (the CI runner is a k3s pod on DooPlex with the same egress; its own reach is proven by the live run, LIVE.md). Raw answers: raw/.

The controls

Control What it is Our pin
P1 cloudflared Cloudflare's eMudhra notice, 2026-10-20: fixed in 2026.10.2 (image trust store) was 2026.9.3 (R-1300)
P2 traefik GHSA-fh26-gfpp-7xxx (and 11 more, Oct 2026), fixed v3.7.14–v3.7.16; and the older set, e.g. 81 advisories for v3.1.2 v3.7.13
P3 vaultwarden GHSA-wc45-m6pv-rrf9 and five more (2026-10-03), fixed 1.37.0 1.37.4
P4 immich GHSA-q89f-h332-8q2h (2026-09-28, high: SVG upload → RCE), fixed v3.2.4 v3.2.4
P5 nextcloud advisories published in nextcloud/security-advisories (not in nextcloud/server) 34.0.4
P6 Go builder GO-2026-6809 (R-972), fixed in Go 1.27.3 golang 1.27.3
N negative vaultwarden 1.37.4 vs its advisories; traefik v3.7.16 vs GHSA-hrpp (≤ v3.7.15); Go 1.27.3 —

The table

Source P1 cloudflared P2 traefik P3 vaultwarden P4 immich P5 nextcloud P6 Go Negative Cost per night Key
GitHub per-repo security advisories (/repos/O/R/security-advisories) no (only 2 old Windows advisories) yes — 12 affect v3.7.13 yes (6, range ≤ 1.36.0) yes yes, from nextcloud/security-advisories (100+, paged) n/a correct (1.37.4 and v3.7.16 not affected) 1 request per repo (+1 per 100 more) ≈ 85–90 60/hour without a key, shared by every DooPlex client; a 304 still counts (measured: 51 → 50). 5000/hour with a key
OSV.dev query no (github.com/cloudflare/cloudflared at 2026.9.3: 0) old only (v3.1.2: 81; v3.7.13: 0 — none of October's) no (not a package) no no (Packagist nextcloud/server: 0) yes (Go 1.27.2 → GO-2026-6809) correct (Go 1.27.3: 0) 1 POST per Go builder none
GitHub global advisories (/advisories?affects=) no no (reviewed only; October's are not) no no no — — 1 per item same as above
GitHub release feed (/O/R/releases.atom, newest 10, full notes) no (cloudflared's release body is checksums only) — yes (1.37.0, 1.37.4 name GHSA ids) partly (v3.3.5 says „security"; v3.2.4 is older than the 10 in the feed) — — — 1 per repo, no API quota (measured: core count unchanged) none
cloudflared RELEASE_NOTES (raw file) no for 2026.10.2 (no marker) — but Cloudflare marks security fixes VULN- (12 so far, e.g. 2026.10.4 VULN-176088) — — — — — — 1 none
Cloudflare blog feed (blog.cloudflare.com/rss/, full text, ~2 weeks) YES — „8 eMudhra certificates are compromised" (2026-10-20) names cloudflared — — — — — — 1 none
Registry tags (Docker Hub, ghcr.io anonymous token, lscr.io = Docker Hub linuxserver/*) BEHIND only (2026.10.2 existed) BEHIND only — — — — — 1–3 per image none

The choice (the smallest set that catches every positive control)

  1. GitHub per-repo security advisories — catches P2, P3, P4, P5. The primary source.
  2. Cloudflare blog feed + cloudflared RELEASE_NOTES VULN- markers — the only automated way to P1 (the blog); VULN- catches Cloudflare's other security releases (2026.10.0, 2026.10.4).
  3. OSV, Go stdlib only — P6, for the Go builder pins of the controller and the hub.
  4. GitHub release feeds — no quota; catches apps that write „security"/CVE/GHSA in their notes but publish no advisories (a second net, not a primary).
  5. Registry tags — BEHIND, as check-infra-pins.py does, for every pin.

Dropped: OSV for apps (it found nothing the per-repo advisories did not, and nothing from October), GitHub's global advisory search (reviewed advisories only).

What the watch CANNOT see

  • A fix announced only by mail, or on a blog we do not read. P1 is caught only because Cloudflare's blog names cloudflared in full text; a vendor that announces in a mail or a forum is invisible.
  • A security fix nobody calls one (a base-image or trust-store bump with plain release notes, like cloudflared 2026.10.2's „bump distroless image"). It shows only as BEHIND (weekly).
  • Packages inside our own images: the Alpine/Debian packages in the controller, hub and Samba images (Samba's version is whatever Alpine 3.24 ships; Debian's and Alpine's security trackers are not read). BEHIND on the base image's point release is the only signal.
  • Floating tags (redis:7-alpine, postgres:16-…, mariadb:12.3): there is no exact version to match a range against; they are listed as FLOATING, and a pull at install takes the line's newest.
  • Apps with no GitHub home or no notice practice (PostgreSQL, MariaDB, Plex, Emby, OnlyOffice's server, the linuxserver wrappers): only BEHIND, plus release-feed words where a feed exists.
  • Without a key: the advisory lists of the apps are read every second night (about 40 a night), the box programs every night. The operator said yes to a key (2026-10-26); until it exists the watch runs in this mode and says so.

Facts measured on the way

  • Our traefik pin v3.7.13 is inside 12 advisories of October 2026 (fixed v3.7.14–v3.7.16). Our config uses the docker and file providers, no Kubernetes ingress, no FastProxy, no NTLM/Negotiate backend; ForwardAuth goes to the controller. None of the 12 seem to apply → FILED: R-1304 (raise in the next controller release).
  • A Gitea Actions secret cannot be named GITHUB_… (Gitea reserves the GITHUB_ and GITEA_ prefixes), so the CI secret is GH_ADVISORY_TOKEN, and the same name in CC's store.