diff --git a/omp-docs/index.md b/omp-docs/index.md index 9949b1b..3aed2d5 100644 --- a/omp-docs/index.md +++ b/omp-docs/index.md @@ -65,6 +65,12 @@ dotfiles pruning/adoption session. Architecture decision records — the choices that are no longer up for debate, with what was rejected and why. Currently empty; the format rule is in its index. +## [Reports](reports/index.md) + +Audits and vulnerability passes kept as dated artifacts — the 2026-10-21 fleet +security audit with its per-host vuln pages, and the 2026-09-28 sleep/wake +investigation. + ## [Change history](log.md) Chronological update history of this bundle — incident lessons land here first, diff --git a/omp-docs/log.md b/omp-docs/log.md index fee0472..31cf628 100644 --- a/omp-docs/log.md +++ b/omp-docs/log.md @@ -24,6 +24,23 @@ long form. ## 2026-10-21 +### the audit grows an advisory table, and corrects three of its own numbers + +`omp-docs/reports/fleet-security-audit-2026-10-21.html` folds in the two per-host vulnerability +passes ([reports/vuln-dankclaw.md](reports/vuln-dankclaw.md), +[reports/vuln-dankserver.md](reports/vuln-dankserver.md)): the "Advisory cross-reference (in +progress)" section is now the full matrix and the header links the working files. Three figures +fell to re-probing — the mutable-tag census (17 → **19** Dankclaw manifests / 17 unique +references, +4 on Dankserver; the vuln pass's 24 also counts rolling release tags as mutable), +the OpenSSH advisory count (0 → **5** unpatched CVEs; the first query omitted the version epoch, +`10.2p1` for `1:10.2p1`, and OSV answers `0 vulns` rather than "unknown"), and the Plex version +("12.1.0" is Jellyfin's — `podman exec plex cat /build_version` reports +`1.43.5.11029-6bf8af3f0-ls329`). + +Laws: **an empty OSV response is not a clean bill** — verify the query shape against the distro +tracker before writing "0 advisories"; and **a version quoted from a subagent gets re-probed +before it enters a report**, this being the second mis-attribution the audit caught. + ### reviewing a day of work, and finding checks that lie Two-axis review (Standards / Spec) of 51 commits, 30 findings, on `fix/60-review-findings`. diff --git a/omp-docs/reports/fleet-security-audit-2026-10-21.html b/omp-docs/reports/fleet-security-audit-2026-10-21.html new file mode 100644 index 0000000..0731ce0 --- /dev/null +++ b/omp-docs/reports/fleet-security-audit-2026-10-21.html @@ -0,0 +1,500 @@ + + + + + +Fleet Security Audit — 2026-10-21 + + + +
+

Fleet Security Audit

+
blankpad · Dankclaw · Dankserver · LAN edge (192.168.0.0/24)
+
Audited 2026-10-21 · Comrade Chief Designer, Soviet Computer Systems of Frank
+
Per-host vulnerability passes: vuln-dankclaw.md · vuln-dankserver.md
+
+
+ +
+

Verdict

+
+ No compromise indicators. The fleet is not patched-and-probed enough to notice a breach, and four + findings are one config line each: a shared SSH password that is also in plaintext everywhere it + was echoed, 23 container images on floating tags, Gitea accepting + self-registration with public read, and no HSTS/CSP on the edge proxy. +
+
+

Critical

1
+

High

2
+

Medium

4
+

Low / info

3
+

Rootkits

none
+
+

Coverage. Three boxes audited with credentials (blankpad, Dankclaw, Dankserver); + four more observed without access (router .1, .40/.215 = + danklivingroom, .75 = Apple device). Every claim below carries the command that produced + it; three claims inherited from an earlier survey were refuted and are listed in + Caveats rather than repeated.

+
+ +
+

Scope and method

+ + + + + + + + + + + +
InstrumentVersionWhat it proved
nmap (NSE)7.98TCP/UDP service and banner census, TLS certs, ssh2-enum-algos, sshvulns.nse on every reachable address; -sn sweep of 192.168.0.0/24.
masscan1.3.2Full 1–65535 sweep of all live hosts (source-pinned to the Wi-Fi NIC), 65 535 ports per host, 78 open TCP ports total.
fping5.327 live addresses from ARP+ICMP; reconciled against the KB network page.
lynis3.1.5Host audit on blankpad (71 warnings, see blankpad).
checksec2.7.1Binary hardening of sshd, ssh, sudo on blankpad.
OSV API—Advisory lookup for pinned versions (distro ecosystems + Go/npm/PyPI for containers). In progress, see Cross-reference.
direct inspection—sshd -T, authorized_keys counts, host-key dates, quadlet manifests, live service configs, package/update state, and ss -tlnp as root on every box (root-owned sockets are invisible to an unprivileged ss).
+

In scope / out of scope

+ +
+ +
+

Findings register

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SevWhereFindingEvidenceFix
criticalall 3 boxesOne SSH/sudo password for the whole fleet, and it is in plaintext in shell history, agent transcripts and command lines. All three boxes still accept it as an authentication factor (PasswordAuthentication yes), so a leaked transcript downgrades key-only SSH to a guessed secret.sshd -T on blankpad, Dankclaw, Dankserver → passwordauthentication yes, pubkeyauthentication yes, permitrootlogin prohibit-password, maxauthtries 6. Every privileged probe in this audit ran printf '<pw>' | sudo -S, which also puts the secret in the process table (/proc/<pid>/cmdline is world-readable) — the same class of leak that previously exposed an HF token.Rotate the password once, then set PasswordAuthentication no in a drop-in on all three boxes and switch agent-side privilege escalation to sudo -n (already passwordless on the servers) or sudo -S < ~/.secrets/sudo-pass with mode 600. Verify keys in a second session before closing the door.
highDankclaw, Dankserver23 container images run mutable tags — 19 of the 33 quadlet manifests on Dankclaw (17 unique references: 15 × :latest, 1 × :main, 1 × :nightly) and 4 of the 12 on Dankserver. The deployed version cannot be read from the manifest, a restart can silently upgrade a production service, and a CVE lookup is impossible without inspecting each container.grep -h '^Image=' ~/.config/containers/systemd/*.container on both hosts. Dankclaw, recounted from the manifests: 33 Image= lines — 19 mutable (15 × :latest, 1 × :main, 1 × :nightly, the rest duplicate declarations of localhost/hermes-agent:latest), 10 exact-tag, 4 digest-pinned. The Dankclaw working page reports 24 there because it also counts rolling release tags (postgres:16-alpine ×2, valkey:9-alpine, comfyui-rocm:gfx1151) and open_notebook:v1-latest@sha256… as mutable. Dankserver: 4 on :latest plus the rolling mariadb:11 and redis:7-alpine. Four Dankclaw images do pin digests (open_notebook:v1-latest@sha256:54b2025…, surrealdb:v2@sha256:e5d7387…, chromedp/headless-shell@sha256:2d349b5…, ghcr.io/goauthentik/ldap@sha256:2e7b259…), so the policy exists but is applied inconsistently. Live probes disagree with the tags: gitea:latest → 1.27.3, grafana:latest → 13.2.2 (commit 1bea008), jellyfin:latest → 12.1.0, pihole:latest → Core v6.4.3 (vendor v6.5).Pin every Image= to tag@sha256:digest (or at minimum an exact tag) in the quadlet manifests, one commit per host; see Image census.
highDankclawGitea allows self-registration and unauthenticated read. The instance carries the fleet's infrastructure repositories, so any device on the LAN (or anything that can reach 192.168.0.143:3000) can create an account and browse them.Live /data/gitea/conf/app.ini: DISABLE_REGISTRATION = false, REQUIRE_SIGNIN_VIEW = false; API version 1.27.3; published 0.0.0.0:3000 and 2222:22.DISABLE_REGISTRATION = true (Authentik is the identity provider; keep the OAuth path) and audit per-repository visibility — the secret-gate doctrine in AGENTS.md assumes these repos are not world-readable.
mediumDankclaw (Caddy)No HSTS anywhere, no CSP on the authenticated vhosts. The apex redirect drops the one header that pins clients to TLS; the app vhosts differ from each other, so policy is per-vhost accident rather than intent.https://franksdank.cloud → HTTP/2 308, server: Caddy and nothing else. gitea.franksdank.cloud → x-content-type-options: nosniff, x-frame-options: SAMEORIGIN. grafana.franksdank.cloud → bare HTTP/2 200.Add Strict-Transport-Security: max-age=31536000; includeSubDomains to the Caddy site blocks (and fix the pre-existing max-age=600 on the router-side listener), then stage a Content-Security-Policy starting in report-only mode.
mediumDankserverNFS client helpers exposed on every interface with nothing exported. rpcbind on 0.0.0.0:111 plus rpc.statd on 0.0.0.0:51651, while /etc/exports contains only comments — attack surface with no consumer.Root ss -tlnp on both servers; cat /etc/exports → comments only. Dankclaw has the same two listeners.systemctl disable --now rpcbind nfs-common on both Ubuntu boxes (re-enable if an export is ever added).
mediumDankserver, .40/.215Patch lag and OpenSSH skew. The Ubuntu boxes are 73 packages behind (6 security) and the two livingroom hosts still run OpenSSH 10.0 while the audited boxes run 10.2/10.6 — three different SSH stacks on one LAN.Dankserver: apt-get -s upgrade → 73 pending, 6 from *-security*, reboot not required. .40/.215: nmap banner OpenSSH_10.0p1 Ubuntu-2ubuntu12.1 on Ubuntu 24.04.4 LTS. blankpad: OpenSSH_10.6p1, OpenSSL 3.6.5; Dankclaw/Dankserver: OpenSSH_10.2p1 Ubuntu-2ubuntu3.8, OpenSSL 3.5.5.Upgrade the Ubuntu pair in a window (both boxes, same procedure, reboot not required on Dankserver); plan the livingroom hosts into the same key rollout rather than leaving them on an old stack.
mediumDankserverHost keys predate the installed system and two live addresses are undocumented. /etc/ssh/ssh_host_*_key are dated 2024-11-29 on a box whose userland is Ubuntu 26.04-era — the keys were carried across a reinstall and never rotated. .247 answers alongside .235 with the same service set, and the KB names only .235.ls -l --time-style=long-iso /etc/ssh/ssh_*_key → 2024-11-29 (ecdsa/ed25519/rsa, no post-quantum key); ARP: .235 b0:82:e2:a6:39:f3, .247 b0:82:e2:a6:39:f4 (same OUI, adjacent NIC) → [INFERENCE] second NIC of the same chassis. blankpad's keys (2026-09-09) already include ssh_host_mldsa44_ed25519_key; Dankclaw's (2026-07-21) and Dankserver's do not.Rotate Dankserver's host keys after pinning known_hosts on the clients, and record both addresses in omp-docs/system/dankserver.md.
lowDankclaw, blankpadListeners that no manifest declares. On Dankclaw a container serves 0.0.0.0:8787 without a PublishPort= line (host-network), and two PublishPort entries omit the bind address so podman publishes them on all interfaces where their neighbours are explicit.Root ss -tlnp: 0.0.0.0:8787 → /opt/hermes/.venv/bin/python /webui/server.py (uid 109999); 192.168.0.143:18093 → signal-relay.py; 192.168.0.143:9401 + 127.0.0.1:9401 → gpu-exporter.py; 127.0.0.1:12345 → alloy; 127.0.0.1:33471 → containerd. Manifest grep shows PublishPort=2222:22 and PublishPort=3005:8080 with no address. blankpad likewise runs python3 on 0.0.0.0:8899 and bun on 127.0.0.1:8787.Write the missing PublishPort=127.0.0.1:… lines so intent is on disk, and adopt the loose host scripts into quadlet/systemd units — every listener should be owned by a unit.
low.40/.215LLMNR enabled on the livingroom hosts (UDP/TCP 5355) — a legacy name-resolution protocol that answers broadcasts and is routinely poisoned; and their other open ports (8081, 27036, 32000) have no owner record anywhere.nmap service probes on .40 and .215; identical port sets on both addresses, which are two separate physical boxes (different OUIs: 84:47:09:…, 4c:23:38:…).LLMRR=no → LLMNR=no in /etc/systemd/resolved.conf; document what runs on those hosts once key access exists.
infoall 3 boxesNo rootkit or integrity indicators. NSE rootkit-check, http-malware-host, http-sql-vulnwrapper, http-wordpress-enum and ssl-ccs-injection ran against every reachable web service with no positives; blankpad binaries carry full RELRO, stack canary, Intel CET (SHSTK&IBT), NX and PIE.nmap NSE results per host; checksec file /usr/bin/sshd → Full RELRO / Canary / CFI SHSTK&IBT / NX / PIE / FORTIFY 7 of 10, same profile for ssh, and sudo 5 of 9 with RUNPATH [/usr/bin/sudo→/usr/lib/sudo].Nothing to do; recorded so the next audit has a baseline.
+
+ +
+

Per-host detail

+ +

blankpad — dev workstation (192.168.0.140, .104)

+ + + + + + + + + + + + + +
FieldObserved
OS / kernelCachyOS, 7.2.9-1-cachyos
SSHOpenSSH_10.6p1, OpenSSL 3.6.5; unit sshd active + enabled, listening 0.0.0.0:22 and [::]:22
sshd policypasswordauthentication yes · pubkeyauthentication yes · permitrootlogin prohibit-password · maxauthtries 6 · kbdinteractiveauthentication no · usepam yes; ciphers chacha20-poly1305, aes128-gcm, aes256-gcm, aes128-ctr, aes192-ctr, aes256-ctr
sshd config files/etc/ssh/sshd_config.d/20-systemd-userdb.conf (symlink from /usr/lib/systemd), 99-archlinux.conf — the drop-ins, not a hand-edited config
Host keys2026-09-09: ed25519, ecdsa, rsa, mldsa44_ed25519 (post-quantum) — the only box in the fleet offering a PQ host key
Binary hardeningsshd/ssh: Full RELRO, canary, CFI SHSTK&IBT, NX, PIE, no RPATH, FORTIFY 7/10. sudo: same, FORTIFY 5/9, RUNPATH [/usr/lib/sudo]
Users with login shellsnone besides root — no stale accounts
TCP listeners (13)0.0.0.0:22 sshd · 0.0.0.0:8899 python3 · 127.0.0.53:53 resolved · 127.0.0.1:8787 bun · 127.0.0.1:44179 omp · 127.0.0.1:6463 Discord · 127.0.0.1:35507 chrome · 127.0.0.1:5433 passt (rest loopback)
Local toolinglynis + checksec installed; rkhunter/chkrootkit absent (Arch has no debsecan equivalent — pacman advisories come from the security tracker feed)
+ +

Dankclaw — services box (192.168.0.143)

+ + + + + + + + + + + + + + +
FieldObserved
SSHOpenSSH_10.2p1 Ubuntu-2ubuntu3.8, OpenSSL 3.5.5; passwordauthentication yes, permitrootlogin prohibit-password, maxauthtries 6, authenticationmethods any, kbdinteractiveauthentication no; MAC list still offers umac-64-etm, hmac-sha1-etm, umac-64, hmac-sha1
Authorised keys/home/dank/.ssh/authorized_keys 9 entries, /root/.ssh/authorized_keys 3 entries
Host keys2026-07-21 (ecdsa, ed25519, rsa)
Containers33 quadlet manifests in ~/.config/containers/systemd; 15 on :latest, 1 on :main, 1 on :nightly (19 manifest lines / 17 unique references), 4 digest-pinned, 10 exact-tag
Published on all interfaces0.0.0.0:80, 0.0.0.0:443 (Caddy) · 0.0.0.0:53 tcp+udp and 0.0.0.0:8083→80 (Pi-hole DNS + admin) · 0.0.0.0:3000, 2222:22 (Gitea) · 0.0.0.0:8188, 0.0.0.0:8502, 3005:8080 · 389→3389, 636→6636 (Authentik LDAP/LDAPS) · 7772:7772 (embedding proxy) · 8081:8080, 8082:8085, 9119:9119 · 0.0.0.0:8787 (unmanifested, see findings)
Published loopback-only127.0.0.1:3002 Grafana · 127.0.0.1:3100 Loki · 127.0.0.1:9090 Prometheus · 127.0.0.1:9093 Alertmanager · 127.0.0.1:9000 Authentik · 127.0.0.1:5055, 127.0.0.1:5056→5055, 127.0.0.1:8080 + 192.168.0.143:8080
Grafana13.2.2 commit 1bea008f7e4e858b6824c9e364d608bd4d10b13a via /api/health; live /etc/grafana/grafana.ini has ;enabled = false under [auth.anonymous] — anonymous access is off; env file mode 600, contains only GRAFANA_OAUTH_CLIENT_SECRET
Caddyfranksdank/caddy-porkbun:latest; Caddyfile fronts both hosts, guarded vhosts route through Anubis → Authentik, apps with their own auth exempt by construction
Pi-holepihole/pihole:latest; env ServerIP=192.168.0.143, DNS1=1.1.1.1, DNS2=1.0.0.1, WEBPASSWORD=<set> — the admin UI is on 0.0.0.0:8083 rather than behind Caddy
Host processessignal-relay.py (18093), gpu-exporter.py --serve (9401), alloy (12345), containerd devv socket (33471) — scripts from ~/serverAppConfigs/scripts, not declared as quadlets
+ +

Dankserver — main model box (192.168.0.235, .247)

+ + + + + + + + + + + + +
FieldObserved
SSHOpenSSH_10.2p1 Ubuntu-2ubuntu3.8, OpenSSL 3.5.5; passwordauthentication yes, permitrootlogin prohibit-password, maxauthtries 6, usepam yes
Authorised keys/home/dank/.ssh/authorized_keys 7 entries; /root/.ssh/authorized_keys not readable by dank (unprivileged cat → permission denied)
Host keys2024-11-29 — predates the current Ubuntu userland; no post-quantum host key
Packages73 upgradable, 6 from *-security; reboot not required
Containers12 quadlet manifests; 4 on :latest (prom/node-exporter, 9001/copyparty-ac, jellyfin/jellyfin → 12.1.0 live, rommapp/romm); the rest pinned, including linuxserver/plex:1.43.5.11029-6bf8af3f0-ls329 and linuxserver/calibre-web:0.6.27-ls402
Host servicesradiance inference on *:7770 (native process, not a container), syncthing *:8384 (user unit enabled), gnome-remote-de RDP on *:3389 (user unit active, system unit disabled), rpcbind 0.0.0.0:111, rpc.statd 0.0.0.0:51651
NFS/etc/exports contains comments only — nothing exported, so the two NFS helper daemons serve nothing
Second address.247 (ARP b0:82:e2:a6:39:f4) presents the same service set as .235 (b0:82:e2:a6:39:f3) — [INFERENCE] second NIC of the same chassis; undocumented in the KB
+ +

Observed without credentials

+ + + + + + + + +
AddressIdentityEvidenceAction
.40 and .215danklivingroom — two distinct boxes (OUIs 84:47:09, 4c:23:38) with identical port profilesSSH auth probe returns Ubuntu 24.04.4 LTS + Permission denied (publickey,password); nmap banner OpenSSH_10.0p1 Ubuntu-2ubuntu12.1; open ports 22, 5355, 8081, 27036, 32000 on bothInstall the fleet key (no password auth needed), then patch and document; see the LLMNR finding
.75Apple deviceOpen ports 853, 49152, 62078, 62742, 62805 — 62078 is the Apple mobile-sync service; mDNS name presentManaged handset/tablet: nothing to patch from here; record it in the network page so it stops showing up as an unknown
.112dankstationSeen by the earlier discovery pass (mDNS + SSH, 7 ports via nmap); absent from the 2026-10-21 fping/masscan sweepConfirm whether it is asleep or was renamed — the KB has no current entry
.1ARRIS gateway (ISP router, Wi-Fi password holder)Open ports 80, 111, 443, 8181, 49152, 50011, 50012, 51515; HTTP banner server: ARRIS; auth probe reports password auth (no key accepted)Admin UI is LAN-reachable; change the default credential and disable HTTP if the vendor build allows
+
+ +
+

LAN exposure map

+
+ + + + + + + + + Internet + WAN + + + + + .1 ARRIS + 80 · 443 · 8181 + 111 · 49152 + admin UI on LAN + + + + + + LAN 192.168.0.0/24 — 27 live hosts (fping), 78 open TCP ports (masscan, 1–65535) + named: .1 router · .104/.140 blankpad · .143 Dankclaw · .235/.247 Dankserver · .40/.215 danklivingroom · .75 Apple · .112 dankstation (absent 2026-10-21) + + + + + + blankpad + CachyOS · OpenSSH 10.6p1 + 0.0.0.0:22 sshd · 0.0.0.0:8899 python3 + 10 other listeners, loopback only + PQ host key (mldsa44) · CET on sshd/sudo + + + + + Dankclaw + Ubuntu 26.04 · 33 quadlets + 10 published on 0.0.0.0 + 80 443 53 8083 3000 8188 8502 3005 7772 8787 + 17 images on :latest + Caddy → Anubis → Authentik + + + + + Dankserver + Ubuntu 26.04 · 12 quadlets + 73 pkgs behind (6 security) + radiance :7770 · 4 images :latest + rpcbind :111 + rpc.statd, no exports + host keys 2024-11-29 + + + + + danklivingroom + .40 + .215 · Ubuntu 24.04.4 + OpenSSH 10.0p1 · key auth refused + 22 5355 8081 27036 32000 + LLMNR enabled + + + + + .75 Apple device + 853 49152 62078 62742 62805 + mobile-sync exposed on Wi-Fi + managed endpoint, out of band + + + + + + + solid = audited with credentials · dashed = observed via scan only + +
Audited hosts and every port each one answers on, 2026-10-21.
+
+
+ +
+

Image census — the pinning table

+

The same repo writes both styles on the same host. mutable means a + restart can change the running binary; pinned means the manifest states what + is running. Verified versions were read from the live services, not the tags.

+

Dankclaw — 33 manifests, 17 on :latest

+ + + + + + + + + + + + + + +
ImageStatusLive version
docker.io/gitea/gitea:latestmutable1.27.3 (API)
docker.io/grafana/grafana:latestmutable13.2.2 / 1bea008f7e4e858b6824c9e364d608bd4d10b13a
franksdank/caddy-porkbun:latestmutableserves 80/443, server: Caddy
docker.io/pihole/pihole:latestmutableDNS 53 + admin 8083
docker.io/prom/prometheus:latest, prom/alertmanager:latest, prom/node-exporter:latestmutableloopback-published
ghcr.io/searxng/searxng:latest, ghcr.io/manualdousuario/marreta:latest, ghcr.io/open-webui/open-webui:main, docker.io/qmcgaw/gluetun:latest, docker.io/binwiederhier/ntfy:latestmutable—
localhost/franksdank/frank-tts:latest, frank-tts-engine:latest, localhost/hermes-agent:latest (×3)mutablehermes webui answers on 0.0.0.0:8787
docker.io/lightpanda/browser:nightlymutable—
ghcr.io/goauthentik/server:2026.8.3 (×3), ghcr.io/manualdousuario/marreta, ghcr.io/seerr-team/seerr:v3.4.1, techarohq/anubis:v1.27.0, gcr.io/cadvisor/cadvisor:v0.49.1, docker.io/library/postgres:16-alpine (×2), docker.io/valkey/valkey:9-alpine, localhost/comfyui-rocm:gfx1151pinned—
lfnovo/open_notebook:v1-latest@sha256:54b2025a…, surrealdb/surrealdb:v2@sha256:e5d7387e…, chromedp/headless-shell@sha256:2d349b54…, ghcr.io/goauthentik/ldap@sha256:2e7b259e…digest-pinnedthe pattern every manifest should follow
+

Dankserver — 12 manifests, 4 on :latest

+ + + + + + + +
ImageStatusLive version
ghcr.io/jellyfin/jellyfin:latestmutable12.1.0 (/System/Info/Public)
ghcr.io/rommapp/romm:latest, ghcr.io/9001/copyparty-ac:latest, docker.io/prom/node-exporter:latestmutable—
localhost/radiance-vllm:0.13.0-e060895, lscr.io/linuxserver/plex:1.43.5.11029-6bf8af3f0-ls329, linuxserver/calibre:9.15.0, linuxserver/calibre-web:0.6.27-ls402, linuxserver/tautulli:v2.18.1-ls245, docker.io/library/mariadb:11, redis:7-alpine, gcr.io/cadvisor/cadvisor:v0.49.1pinned—
+
Why this matters more than the tag itself: an unpinned service cannot be + tied to an advisory. Half of Dankclaw's stack is pinned by someone's habit and half is not, so a + git diff no longer tells you what code is running — the assumption the whole + "the checkout is the deployment" doctrine rests on.
+
+ +
+

Advisory cross-reference

+

Versions come from live sources only — OSV POST /v1/query in the correct ecosystem + (Ubuntu/Alpine for distro packages, Go/PyPI/crates.io + for application code), the Ubuntu Security Tracker, the Alpine secdb, GitHub repository advisories, and + podman exec … --version inside each container. The complete per-host tables live beside this + report: vuln-dankclaw.md (33 Dankclaw images + host) and + vuln-dankserver.md (Dankserver, blankpad, danklivingroom). The tables below + are the cross-host summary; re-verified marks a version this session re-probed + directly from blankpad on 2026-10-21.

+ +

Ubuntu hosts — Dankclaw and Dankserver

+ + + + + + + + + +
ComponentInstalledSeverityAdvisory / fix
openssh (source package), both servers1:10.2p1-2ubuntu3.8 re-verifiedmediumCVE-2026-110923 plus CVE-2026-110924, -110925, -110926, -110927 — 5 unpatched, no Ubuntu fix released (apt-cache policy: candidate == installed; tracker status needs-triage, CVSS 5.5–6.5). An earlier pass recorded "0 open advisories" here: the OSV purl-only query shape returns nothing for that build, the name+ecosystem+version form returns the five.
gnome-remote-desktop (Dankserver)50.2-0ubuntu0.1medium5 CVEs (CVE-2025-5024, CVE-2026-109832, CVE-2026-109833, CVE-2026-18358, CVE-2026-96541), none fixed for 26.04 — the RDP listener sits on *:3389
rpcbind (Dankserver)1.2.7-1build2medium3 CVEs (CVE-2026-16277, CVE-2026-16461, CVE-2026-94640), none fixed for 26.04; the daemon serves nothing (NFS exports are empty) yet answers on 0.0.0.0:111
openssl/libssl3t64, nfs-utils, samba, syncthing3.5.5-1ubuntu3.7, 1:2.8.5-1ubuntu1, 2:4.23.6+dfsg-1ubuntu2.2, 1.29.5~ds1-3cleanOSV Ubuntu returns no applicable advisory at the installed versions (syncthing: 3 records, all patched before 1.29.5)
kernel (Dankserver)7.0.0-38.38untriaged35 OSV records list the installed kernel as affected with no fixed event — needs-triage, not confirmed vulnerable
+ +

Dankclaw containers re-verified

+ + + + + + + + + + + +
Container / imageRunning versionSeverityAdvisory / fix
open-notebook-surrealdb
surrealdb/surrealdb:v2@sha256:e5d7387…
2.7.0 (/surreal version)high25 advisories, 6 HIGH (CVE-2026-63735, GHSA-4vgr-h27g-cf9p, GHSA-5qfp-32cf-69jh, GHSA-cc8f-fcx3-gpjr, CVE-2026-63760, GHSA-wjjj-24cx-f28g). Every fix is on the 3.x line — the pinned v2 tag is end-of-line, so this is a major-version migration, not a rebuild.
gitea-server
gitea/gitea:latest
1.27.3 (/api/v1/version)patchedCVE-2026-60004 (CRITICAL, RCE through the diffpatch git hook) and GHSA-cm61-xmth-gqwh (cacheable session) were both fixed in 1.27.1 — the running image carries the fix. The exposure here is F3 (open registration + public read), not the build.
pihole
pihole/pihole:latest
Core v6.4.3 · Web v6.6 · FTL v6.7.1 (pihole -v)high12 FTL + 3 web advisories published on/after the image build (2026-09-19), incl. GHSA-2h7g-g549-hf74 (authenticated file read + fix bypass), GHSA-2794-hrj8-5jg9 (webserver.advancedOpts RCE → root), GHSA-ww5x-xx4x-qvjr (misc.dnsmasq_lines RCE); vendor is at FTL v6.8 / Core v6.5 / Web v6.6.1. Its Alpine shell measures musl 1.2.5-r2 + libssl3 3.5.6-r0 → CVE-2026-36448 (CVSS 9.8), CVE-2026-31974, CVE-2026-39171.
searxng-valkey
valkey/valkey:9-alpine@sha256:31e788e7…
9.1.2 (valkey-server --version)high4 vendor advisories — CVE-2026-63639, CVE-2026-56684, GHSA-jcj7-v34w-v9vv, GHSA-fq2f-crmw-q97r — applicability unconfirmed (the Alpine secdb stops at 9.0.4-r0; the image is a from-source build). Reachable only from the searxng pod network.
gitea-postgres, authentik-postgres
postgres:16-alpine@sha256:06f9702…
16.15 (postgres --version)unverifiablePostgreSQL server CVEs are published on postgresql.org and are not in OSV/GHSA; postgresql16 is absent from the Alpine secdb (from-source build), so no tracker in the query set covers 16.15.
caddy
franksdank/caddy-porkbun:latest
v2.11.7 (caddy version) → docker.io/library/caddy:v2.11.7_alpine@sha256:684242074367…cleanNo OSV record for github.com/caddyserver/caddy@2.11.7. The mutable local tag hides the upstream pin (F2) — record the digest in the manifest.
Alpine 3.24 shells — gitea-server, grafana, ntfy, authentik-postgres, frank-ttsmusl 1.2.6-r2, libssl3 3.5.7-r0mediummusl → CVE-2026-107891 (fixed 1.2.6-r3); libssl3 → 10 CVEs fixed at 3.5.8-r0. Shells on 3.23 (gluetun, caddy, seerr) were not fetched — backport status unknown.
+ +

Dankserver containers re-verified

+ + + + + + + + + + + + + + +
Container / imageRunning versionSeverityAdvisory / fix
plex
lscr.io/linuxserver/plex:1.43.5.11029-6bf8af3f0-ls329
1.43.5.11029 (cat /build_version, build-date 2026-10-20)highPlex publishes no CVE feed and has no OSV ecosystem; upstream is at 1.43.6.11150, a security release, so the pin is one minor behind. The earlier pass attributed "12.1.0" to Plex — that string is Jellyfin's version (see the note at the end of this section).
copyparty
ghcr.io/9001/copyparty:v1.26.2 (image 2284b21e4259)
1.20.24 (image label)mediumGHSA-3c88-p299-7hvr (fixed 1.20.25) and GHSA-hg99-jqfp-rf76 (low, fixed 1.20.26) are both newer than the running build — the tag moved without the container being rebuilt.
redis
docker.io/library/redis:7-alpine@sha256:2ed3d0c…
v=7.4.11 (redis-server --version)high12 vendor advisories (CVE-2026-23479, CVE-2026-25243, CVE-2025-46817, CVE-2025-48367, CVE-2025-32023, CVE-2025-21605 …) carry patched: TBD upstream — no fixed 7.4.x release exists to move to. CVE-2025-49844 is fixed at 7.4.6, so it does not apply.
romm-mariadb
docker.io/library/mariadb:11@sha256:943995c7…
11.8.9 (mariadb --version)unverifiableUpstream MariaDB has no OSV ecosystem; the 310 name-only records belong to Debian/Ubuntu/Alpine builds and cannot be attributed to this image. The 4 security fixes released for the 11.8.6 line were recorded against a "11.8.5" reading in the earlier pass — the installed build is 11.8.9.
romm
ghcr.io/rommapp/romm@sha256:eab97d88d9d7…
5.3.1 (cat /backend/__version__.py)cleanNone of the 15 repository advisories applies (all patched earlier), but upstream is at 5.9.0 — 12 releases behind, which is where future exposure comes from.
jellyfin
ghcr.io/jellyfin/jellyfin@sha256:6370ab0005b4…
12.1.0 (/System/Info/Public)cleanNone of the published repository advisories applies at 12.1.0 — all patched ranges end at ≤ 12.0, including the earlier pass's GHSA-vrc3-37vx-82q5 / CVE-2026-44208 row. The three newest advisories (GHSA-cf3c-8m59-2vhx SVG SSRF, GHSA-6828-c7cx-hvqm virtual-folder traversal, GHSA-4vx8-xhc9-qg6x session control) fix later releases.
calibre-web / calibre0.6.27-ls402 / 9.15.0 (image tags)unverifiableNo OSV record in the PyPI ecosystem at calibre-web 0.6.27 and none for calibre 9.15.0; the earlier pass's CVE-2026-42811 (fixed 0.6.28) came from the Ubuntu tracker for a different build line.
tautulli
lscr.io/linuxserver/tautulli:v2.18.1-ls245
2.18.1 (tag)clean18 repository advisories, all patched ≤ 2.17.2
cadvisor / cadvisor-testv0.49.1 (images built 2024-03-02, Alpine 3.19 / 3.18.6 bases)mediumNo application advisory; the exposure is the base image — 63 GHSA on the Alpine 3.19 shell (61 fix-available), and v0.49.1 is 2.5 years old.
frank-archon (native radiance, image localhost/radiance-vllm:0.13.0-e060895)0.13.0 — tag-derived only: the running container is docker.io/stilldeadcode/radiance@sha256:d590e300… and ships no python3 to confirm the embedded vLLMcriticalAssessed against vLLM 0.13.0: GHSA-4r2x-xpjr-7cvv and GHSA-94f4-hr76-p5j6 (CRITICAL, fixed 0.14.1 / 0.22.0) plus 48 more. If the fork carries a different vLLM base the whole row set changes — flagged unverifiable in the working page.
+ +

Observed without credentials

+ + + + + + +
HostComponentSeverityAdvisory / fix
danklivingroom .40 / .215OpenSSH 10.0p1 — banner verified by probe; OS reported Ubuntu 24.04.4 LTS, package version 1:10.0p1-2ubuntu12.1medium8 CVEs fixed for the 10.0p1 source line (CVE-2025-61984, CVE-2025-61985, CVE-2026-3497, CVE-2026-35385, -35386, -35387, -35388, -35414 — USN-8222-1, USN-8090-1). Nothing else on the box is assessable: key auth refused, so no inventory (caveat).
blankpad (Arch)1,359 installed packagesclean0 packages match an Arch advisory with a newer fix version (2,446-advisory feed matched on pkgbase, control-tested against deliberately old versions so the matcher is not vacuous). Two advisories stay open upstream without a fixed version: AVG-2882 (openssl CVE-2025-4575, low), AVG-2893 (systemd CVE-2025-4598, medium). The linux-cachyos kernel is not in the tracker at all.
+ +
Working-file reconciliation. Three claims in the in-progress pass were corrected while folding the per-host pages into this report: (1) OpenSSH on Ubuntu — "0 open advisories" came from an OSV query shape that returns nothing for that purl; the corrected query and the Ubuntu tracker both report five unpatched CVEs. (2) Plex "12.1.0" — that version belongs to Jellyfin; the live Plex build is 1.43.5.11029-6bf8af3f0-ls329. (3) Dankserver mariadb "11.8.5" — the running container reports 11.8.9. The Dankclaw mutable-tag census also differs by definition (19 manifests here, 24 in the working page, which counts rolling release tags as mutable); both counts are shown in F2.
+
+ +
+

Remediation

+

P0 — this week, one change set

+
# 1. rotate the fleet password once, then close the door on all three boxes
+#    (verify keys in a second session first)
+printf 'PasswordAuthentication no\n' | sudo tee /etc/ssh/sshd_config.d/99-audit.conf
+sudo sshd -t && sudo systemctl reload sshd
+
+# 2. stop echoing the secret in every command line
+#    servers already allow `sudo -n` for systemctl; blankpad keeps its sudoers entry
+# 3. Gitea: stop self-registration, keep the Authentik path
+DISABLE_REGISTRATION = true          # /data/gitea/conf/app.ini
+

P1 — next change set

+ +

P2 — with the next maintenance window

+ +
+ +
+

Caveats and refutations

+ +
+ + +
+ + diff --git a/omp-docs/reports/index.md b/omp-docs/reports/index.md new file mode 100644 index 0000000..c7934b4 --- /dev/null +++ b/omp-docs/reports/index.md @@ -0,0 +1,12 @@ +# Reports + +Dated audit artifacts: one file per investigation. HTML files are the rendered reports, markdown +pages are the working data they were built from. The bundle-wide work log stays in +[`../log.md`](../log.md) — a report is an artifact, not a log. + +| File | Type | Description | +|------|------|-------------| +| [fleet-security-audit-2026-10-21.html](fleet-security-audit-2026-10-21.html) | report | Fleet security audit (blankpad, Dankclaw, Dankserver, LAN edge): findings register, per-host detail, LAN exposure map, container image pinning census, advisory cross-reference, remediation. | +| [vuln-dankclaw.md](vuln-dankclaw.md) | reference | CVE/GHSA pass for the 33 Dankclaw quadlet images and the Ubuntu 26.04 host — the evidence base the audit's Dankclaw rows rest on. | +| [vuln-dankserver.md](vuln-dankserver.md) | reference | CVE/GHSA pass for Dankserver (containers + host), blankpad's Arch package set, and danklivingroom's OpenSSH. | +| [sleep-wake-investigation-report.html](sleep-wake-investigation-report.html) | report | blankpad suspend/resume investigation, 2026-09-28. | diff --git a/omp-docs/reports/vuln-dankclaw.md b/omp-docs/reports/vuln-dankclaw.md new file mode 100644 index 0000000..433bee5 --- /dev/null +++ b/omp-docs/reports/vuln-dankclaw.md @@ -0,0 +1,295 @@ +--- +type: reference +title: Vulnerability pass — Dankclaw (2026-10-21) +description: Per-container CVE/GHSA pass for the 33 Dankclaw quadlet images and the Ubuntu 26.04 host — the evidence base behind the fleet security audit report. +tags: + - security + - vulnerability + - dankclaw +verified: 2026-10-21 +--- +# Vulnerability pass — host `dankclaw` (Ubuntu 26.04.1 LTS "resolute") + +Audited date: 2026-10-21. Image set = the 33 quadlet units in `/home/dank/.config/containers/systemd/*.container` +(`grep -h "^Image=" ~/.config/containers/systemd/*.container`), 37 running containers. +Host facts: kernel `7.0.0-38-generic`, `openssh 1:10.2p1-2ubuntu3.8`, `openssl/libssl3t64 3.5.5-1ubuntu3.7`, +`unattended-upgrades` active, `apt-cache policy` candidate == installed for both host packages (no pending distro upgrade). + +Every version below was resolved on the host (endpoint, `podman exec`, image label, or apk db) — the command is named +in the row or in §Version resolution. No CVE/GHSA id is listed unless it came back from the OSV API +(`POST https://api.osv.dev/v1/query`), the GitHub advisories API, the Ubuntu security tracker, or the Alpine secdb; +the source URL is on the same row. + +## Headline findings + +1. **SurrealDB 2.7.0 (`open-notebook-surrealdb`) is affected by 25 advisories (6 HIGH) and every one of them is fixed + only in the 3.x line** (`fixed: 3.1.0` / `3.1.4` / `3.1.5` / `3.2.0`). The image is digest-pinned to `surrealdb/surrealdb:v2`, + so there is **no fixed release on the running v2 line** — remediation requires a major-version migration. +2. **`libssl3 3.5.7-r0` in the `gitea-server`, `grafana` and `pihole` containers is missing 10 OpenSSL fixes** + that Alpine shipped in `3.5.8-r0` (Alpine v3.24 secdb). The other Alpine-3.24 containers carry `3.5.8-r0`/`3.5.9-r0` (clean). +3. **`musl 1.2.6-r2` in 8 containers is missing `CVE-2026-107891`** (Alpine fixed it in `1.2.6-r3`). +4. **`openssh 1:10.2p1-2ubuntu3.8` has 5 CVEs with no Ubuntu fix published** for the installed source version + (Ubuntu severity: medium each). Candidate == installed, so there is nothing to upgrade to yet. +5. **Pi-hole runs FTL 6.7.1 / Web 6.6 / Core 6.4.3; the vendor published 12 advisories on 2026-10-17 — after the + running image was built (2026-09-19)** — and reports newer releases available (FTL v6.8, Web v6.6.1, Core v6.5). +6. **24 of 33 quadlet units float on `latest`/`main`/`nightly`/rolling tags** (§Pinning gaps), so a "fixed in" answer + is only valid for the exact digest running today. + +## Affected components + +Columns: component | installed/resolved version | CVE | severity | fixed in | source URL + +### surrealdb/surrealdb:v2 @sha256:e5d7387… — resolved 2.7.0 (`podman exec open-notebook-surrealdb /surreal version`) + +OSV query: ecosystem `crates.io`, package `surrealdb`, version `2.7.0` → 25 matches; all affected ranges are +`introduced: 0 → fixed: 3.x`, i.e. 2.7.0 is inside every range. + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63735 (GHSA-848m-r628-vrxw) | HIGH | 3.2.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-848m-r628-vrxw | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-4vgr-h27g-cf9p (no CVE assigned) | HIGH | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-4vgr-h27g-cf9p | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-5qfp-32cf-69jh (no CVE assigned) | HIGH | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-5qfp-32cf-69jh | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-cc8f-fcx3-gpjr (no CVE assigned) | HIGH | 3.1.5 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-cc8f-fcx3-gpjr | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63760 (GHSA-q729-696q-g9pq) | HIGH | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-q729-696q-g9pq | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-wjjj-24cx-f28g (no CVE assigned) | HIGH | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-wjjj-24cx-f28g | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63748 (GHSA-6g9v-7gq3-p2c6) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-6g9v-7gq3-p2c6 | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63740 (GHSA-8rw6-p7m8-63jp) | MODERATE | 3.1.4 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-8rw6-p7m8-63jp | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63743 (GHSA-97vg-427p-8hx5) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-97vg-427p-8hx5 | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63755 (GHSA-98fx-66cf-fc7c) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-98fx-66cf-fc7c | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63751 (GHSA-fpxg-5xmv-922m) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-fpxg-5xmv-922m | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63761 (GHSA-fwg2-gr34-q3w8) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-fwg2-gr34-q3w8 | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63758 (GHSA-gcwr-5mrf-fvch) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-gcwr-5mrf-fvch | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-63746 (GHSA-vjjx-rfw4-rmfc) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-vjjx-rfw4-rmfc | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | CVE-2026-49997 (GHSA-whwg-vh4f-pmmf) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-whwg-vh4f-pmmf | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-4m82-p8cx-f94j (no CVE assigned) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-4m82-p8cx-f94j | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-4v76-cw68-4vc9 (no CVE assigned) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-4v76-cw68-4vc9 | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-65rj-r9fh-jp2v (no CVE assigned) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-65rj-r9fh-jp2v | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-6vg3-hgrw-p5gf (no CVE assigned) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-6vg3-hgrw-p5gf | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-6wqw-vhfr-9999 (no CVE assigned) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-6wqw-vhfr-9999 | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-c8jx-96c9-8xrp (no CVE assigned) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-c8jx-96c9-8xrp | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-f82j-v89j-mf86 (no CVE assigned) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-f82j-v89j-mf86 | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-h5rg-8p7f-47g2 (no CVE assigned) | MODERATE | 3.1.5 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-h5rg-8p7f-47g2 | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-q8qp-67f9-wr3f (no CVE assigned) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-q8qp-67f9-wr3f | +| open-notebook-surrealdb (surrealdb) | 2.7.0 | GHSA-wp87-mgvq-5j93 (no CVE assigned) | MODERATE | 3.1.0 | https://github.com/surrealdb/surrealdb/security/advisories/GHSA-wp87-mgvq-5j93 | + +Note: the ranges are recorded against the `surrealdb` crate on `crates.io`; the advisory texts describe server +behaviour (LIVE queries, HTTP `/rpc`, permissions, JWKS SSRF), so the running server is the exposed surface. +SurrealDB is published on `127.0.0.1`-adjacent ports only (`open-notebook` reaches it over the pod network). + +### Alpine base packages in the running containers (source: https://secdb.alpinelinux.org/v3.24/main.json) + +`musl 1.2.6-r2` → fix exists at `1.2.6-r3`; `libssl3 3.5.7-r0` → 10 CVEs fixed at `3.5.8-r0`. The Alpine secdb +carries no severity field, so severity is reported as `n/a (Alpine secdb)`. + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| musl in gitea-server (alpine 3.24.1) | 1.2.6-r2 | CVE-2026-107891 | n/a (Alpine secdb) | 1.2.6-r3 | https://secdb.alpinelinux.org/v3.24/main.json | +| musl in grafana (alpine 3.24.1) | 1.2.6-r2 | CVE-2026-107891 | n/a (Alpine secdb) | 1.2.6-r3 | https://secdb.alpinelinux.org/v3.24/main.json | +| musl in pihole (alpine 3.24.1) | 1.2.6-r2 | CVE-2026-107891 | n/a (Alpine secdb) | 1.2.6-r3 | https://secdb.alpinelinux.org/v3.24/main.json | +| musl in gitea-postgres (alpine 3.24.2) | 1.2.6-r2 | CVE-2026-107891 | n/a (Alpine secdb) | 1.2.6-r3 | https://secdb.alpinelinux.org/v3.24/main.json | +| musl in authentik-postgres (alpine 3.24.2) | 1.2.6-r2 | CVE-2026-107891 | n/a (Alpine secdb) | 1.2.6-r3 | https://secdb.alpinelinux.org/v3.24/main.json | +| musl in searxng-valkey (alpine 3.24.2) | 1.2.6-r2 | CVE-2026-107891 | n/a (Alpine secdb) | 1.2.6-r3 | https://secdb.alpinelinux.org/v3.24/main.json | +| musl in ntfy (alpine 3.24.2) | 1.2.6-r2 | CVE-2026-107891 | n/a (Alpine secdb) | 1.2.6-r3 | https://secdb.alpinelinux.org/v3.24/main.json | +| musl in frank-tts (alpine 3.24.2) | 1.2.6-r2 | CVE-2026-107891 | n/a (Alpine secdb) | 1.2.6-r3 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-14456 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-14457 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-18798 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-54874 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-63072 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-63073 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-63074 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-63075 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-63076 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in gitea-server | 3.5.7-r0 | CVE-2026-75803 | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in grafana | 3.5.7-r0 | CVE-2026-14456, CVE-2026-14457, CVE-2026-18798, CVE-2026-54874, CVE-2026-63072/63073/63074/63075/63076, CVE-2026-75803 (10 CVEs) | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | +| libssl3 in pihole | 3.5.7-r0 | CVE-2026-14456, CVE-2026-14457, CVE-2026-18798, CVE-2026-54874, CVE-2026-63072/63073/63074/63075/63076, CVE-2026-75803 (10 CVEs) | n/a (Alpine secdb) | 3.5.8-r0 | https://secdb.alpinelinux.org/v3.24/main.json | + +Clean at the installed version on the same secdb: `openssl 3.5.8-r0` / `3.5.9-r0`, `busybox 1.37.0-r31`, +`ncurses 6.6_p20260516-r0`, `icu-libs 78.1-r0` (0 unfixed entries above the installed version). + +### Host packages — Ubuntu 26.04 LTS, source package `openssh` + +OSV query: ecosystem `Ubuntu`, package `openssh`, version `1:10.2p1-2ubuntu3.8` → 5 matches, each +`ECOSYSTEM[introduced=0]` with **no fixed event**, i.e. no fixed upload recorded for the release line. +Ubuntu's own severity for all five is `medium` (OSV `severity[].type == "Ubuntu"`). Distro status: +`apt-cache policy openssh-server` candidate = `1:10.2p1-2ubuntu3.8` = installed; source package = `openssh` +(`dpkg -s openssh-server → Source: openssh`). + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| openssh-server / openssh-client (src: openssh) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110923 (UBUNTU-CVE-2026-110923; sftp client: malicious server name handling) | medium (Ubuntu) | not published (OSV range has no `fixed` event; candidate == installed) | https://ubuntu.com/security/CVE-2026-110923 | +| openssh-server / openssh-client (src: openssh) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110924 (GSSAPI auth failure leaves data in inconsistent state) | medium (Ubuntu) | not published (no `fixed` event; candidate == installed) | https://ubuntu.com/security/CVE-2026-110924 | +| openssh-server / openssh-client (src: openssh) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110925 (ssh command-line username still contains `$`/special chars) | medium (Ubuntu) | not published (no `fixed` event; candidate == installed) | https://ubuntu.com/security/CVE-2026-110925 | +| openssh-server / openssh-client (src: openssh) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110926 (compression: channels on one connection share state) | medium (Ubuntu) | not published (no `fixed` event; candidate == installed) | https://ubuntu.com/security/CVE-2026-110926 | +| openssh-server / openssh-client (src: openssh) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110927 (compressed payload can expand past limit) | medium (Ubuntu) | not published (no `fixed` event; candidate == installed; Red Hat has RHSA-2026:82247) | https://ubuntu.com/security/CVE-2026-110927 | + +### Pi-hole — `pihole/pihole:latest`, resolved Core v6.4.3 / Web v6.6 / FTL v6.7.1 + +Resolved with `podman exec pihole pihole -v` (output: "Core version is v6.4.3 (Latest: v6.5) / Web version is v6.6 +(Latest: v6.6.1) / FTL version is v6.7.1 (Latest: v6.8)"). Image label `org.opencontainers.image.version = 2026.09.0` +(built 2026-09-19). Vendor advisories come from `GET https://api.github.com/repos/pi-hole/FTL/security-advisories` +(26 entries) and `…/repos/pi-hole/web/security-advisories` (24 entries); the repository-advisory index response does +**not** contain a patched-version field, so "fixed in" is the vendor's current release reported by `pihole -v`. +Rows below are the advisories published **on/after the running image build date** (2026-09-19), which therefore +cannot be assumed fixed in the running build. + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-8fc6-q9x4-892v (unauthenticated CHAOS/TXT overflow of stat buffer) | medium | not stated in advisory index; vendor latest v6.8 per `pihole -v` | https://github.com/pi-hole/FTL/security/advisories/GHSA-8fc6-q9x4-892v | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-xj4x-gf2g-r6m7 (EDNS option cross-query application) | medium | not stated; vendor latest v6.8 | https://github.com/pi-hole/FTL/security/advisories/GHSA-xj4x-gf2g-r6m7 | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-v53r-4564-3449 (app-password/CLI sessions read all admin auth secrets) | medium | not stated; vendor latest v6.8 | https://github.com/pi-hole/FTL/security/advisories/GHSA-v53r-4564-3449 | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-667h-gpmh-7gxc (authenticated arbitrary file read via `file://` blocklists) | medium | not stated; vendor latest v6.8 | https://github.com/pi-hole/FTL/security/advisories/GHSA-667h-gpmh-7gxc | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-2h7g-g549-hf74 (authenticated file read + fix bypass) | high | not stated; vendor latest v6.8 | https://github.com/pi-hole/FTL/security/advisories/GHSA-2h7g-g549-hf74 | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-322h-f873-hp54 (any LAN website can read/change Pi-hole v6 without password) | low | not stated; vendor latest v6.8 | https://github.com/pi-hole/FTL/security/advisories/GHSA-322h-f873-hp54 | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-9828-2f2q-2c8v (authenticated UAF in domain search API) | low | not stated; vendor latest v6.8 | https://github.com/pi-hole/FTL/security/advisories/GHSA-9828-2f2q-2c8v | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-mqr7-j2p5-5495 (authenticated double free in domain-list regex validation) | low | not stated; vendor latest v6.8 | https://github.com/pi-hole/FTL/security/advisories/GHSA-mqr7-j2p5-5495 | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-v8mj-cqgw-63rj (UAF of DHCP leases on DELETE /api/dhcp/leases) | low | not stated; vendor latest v6.8 | https://github.com/pi-hole/FTL/security/advisories/GHSA-v8mj-cqgw-63rj | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-7997-2868-rjfg (stack buffer overflow in `_FTL_make_answer()`) | medium | published 2026-09-19, same day as image build; not stated | https://github.com/pi-hole/FTL/security/advisories/GHSA-7997-2868-rjfg | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-gx63-h4w6-f46g (config-validator bypass via Teleporter import) | high | published 2026-09-19; not stated | https://github.com/pi-hole/FTL/security/advisories/GHSA-gx63-h4w6-f46g | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-2794-hrj8-5jg9 (`webserver.advancedOpts` RCE → root + arbitrary file read) | high | published 2026-09-19; not stated | https://github.com/pi-hole/FTL/security/advisories/GHSA-2794-hrj8-5jg9 | +| pihole (pihole-FTL) | FTL v6.7.1 | GHSA-ww5x-xx4x-qvjr (`misc.dnsmasq_lines` accepts exec-capable options → RCE) | high | published 2026-09-19; not stated | https://github.com/pi-hole/FTL/security/advisories/GHSA-ww5x-xx4x-qvjr | +| pihole (web) | Web v6.6 | GHSA-rmr4-hqc8-825f (stored XSS in All Settings) | low | not stated; vendor latest v6.6.1 per `pihole -v` | https://github.com/pi-hole/web/security/advisories/GHSA-rmr4-hqc8-825f | +| pihole (web) | Web v6.6 | GHSA-3vhj-5284-xrmm (stored XSS in DNS conditional forwarding) | low | not stated; vendor latest v6.6.1 | https://github.com/pi-hole/web/security/advisories/GHSA-3vhj-5284-xrmm | +| pihole (web) | Web v6.6 | GHSA-qfpp-28mj-pj6p (stored XSS in Local DNS Records) | low | not stated; vendor latest v6.6.1 | https://github.com/pi-hole/web/security/advisories/GHSA-qfpp-28mj-pj6p | + +Older vendor advisories whose applicability to FTL 6.7.1 / Web 6.6 / Core 6.4.3 **could not be determined within the +API cap** (fixed-version fields are absent from the index response): 13 further `pi-hole/FTL` advisories +(CVE-2026-65963, CVE-2026-65964, CVE-2026-71304, CVE-2026-65966, CVE-2026-44693, CVE-2026-39849, CVE-2026-35491, +CVE-2026-35517, CVE-2026-35520, CVE-2026-35518, CVE-2026-35519, CVE-2026-35521, CVE-2025-62165 — several HIGH/RCE-class, +published 2026-04-03 … 2026-07-06, i.e. before the running image) and 21 older `pi-hole/web` advisories. Follow-up: +fetch each advisory page and diff against FTL 6.7.1 / Web 6.6. + +### Valkey 9.1.2 — applicability of 4 vendor advisories could not be confirmed + +`valkey/valkey:9-alpine` runs a from-source build (`/usr/local/bin/valkey-server`, no `valkey` apk package), +resolved `Valkey server v=9.1.2`. Alpine v3.24 secdb `valkey` secfixes top out at `9.0.4-r0` and do **not** list +these four ids, so no distro-side fixed version exists to compare against: + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| searxng-valkey | 9.1.2 | CVE-2026-63639 (UAF in stream deserialization → possible RCE) | high | unconfirmed (not in Alpine v3.24 secdb; GHSA index has no patched-version) | https://github.com/valkey-io/valkey/security/advisories/GHSA-mvcj-73cw-22m4 | +| searxng-valkey | 9.1.2 | CVE-2026-56684 (UAF with TLS → possible RCE) | high | unconfirmed (same) | https://github.com/valkey-io/valkey/security/advisories/GHSA-53mc-f3m3-99vh | +| searxng-valkey | 9.1.2 | GHSA-jcj7-v34w-v9vv (UAF in RDMA pending-data handler, no CVE assigned) | high | unconfirmed (same) | https://github.com/valkey-io/valkey/security/advisories/GHSA-jcj7-v34w-v9vv | +| searxng-valkey | 9.1.2 | GHSA-fq2f-crmw-q97r (unauthenticated UAF of the Lua interpreter state, no CVE assigned) | high | unconfirmed (same) | https://github.com/valkey-io/valkey/security/advisories/GHSA-fq2f-crmw-q97r | + +Confirmed **already fixed below 9.1.2** by the Alpine v3.24 secdb (so no action): CVE-2024-31227 / CVE-2024-31228 / +CVE-2024-31449 (`7.2.7-r0`), CVE-2025-21605 (`7.2.9-r0`), CVE-2025-49844 (`8.1.4-r0`), CVE-2025-67733 / +CVE-2026-21863 / CVE-2026-27623 (`9.0.3-r0`), CVE-2026-23479 / CVE-2026-25243 / CVE-2026-23631 (`9.0.4-r0`) — +https://secdb.alpinelinux.org/v3.24/main.json. Valkey is reachable only from the `searxng` container network. + +## Checked, no advisory applies at the resolved version + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| gitea/gitea:latest → gitea-server | 1.27.3 (`GET 127.0.0.1:3000/api/v1/version`) | none known; 3 OSV `Go` matches (`code.gitea.io/gitea@1.27.3`) all patched below 1.27.3: CVE-2025-68939 (range `< 1.23.0`), CVE-2026-58439 (1.27.0), CVE-2026-60004 (1.27.1, CRITICAL RCE via diffpatch git hook) | highest among checked: critical (CVE-2026-60004) | CVE-2026-60004 → 1.27.1; CVE-2026-58439 → 1.27.0 | https://github.com/go-gitea/gitea/security/advisories/GHSA-rcr6-4jqh-j84m | +| grafana/grafana:latest → grafana | 13.2.2 commit 1bea008f (`GET 127.0.0.1:3002/api/health`) | none whose release range covers 13.2.2 (newest ranges end at `< 13.0.2` / `< 12.4.4`) — but 5 advisories publish only Go pseudo-version ranges, see caveat below | n/a | n/a | https://api.github.com/advisories?affects=github.com/grafana%2Fgrafana | +| ghcr.io/goauthentik/server:2026.8.3 (server, worker, outpost) | 2026.8.3 (pinned tag; image label `org.opencontainers.image.version`) | none; all 6 `goauthentik.io` advisories patched before 2026.8, newest CVE-2026-47201 (SAML XSW) patched at `0.0.0-20260528144335` | high (CVE-2026-47201) | pseudo-version 2026-05-28 (before 2026.8.3) | https://github.com/goauthentik/authentik/security/advisories/GHSA-c3m2-jqmq-pvp3 | +| ghcr.io/goauthentik/ldap@sha256:2e7b259… (outpost-ldap) | image label 2026.8.3 | none (same advisory set as server) | high (CVE-2026-47201) | before 2026.8.3 | https://github.com/goauthentik/authentik/security/advisories/GHSA-c3m2-jqmq-pvp3 | +| library/postgres:16-alpine (gitea-postgres, authentik-postgres) | 16.15 (`postgres --version`); from-source build in `/usr/local` (no `postgresql16` apk package) | PostgreSQL server is not covered by OSV/GHSA package ecosystems and `postgresql16` is absent from the Alpine v3.24 secdb → see Unverifiable | n/a | n/a | https://api.osv.dev/v1/query (Alpine/`postgresql16`/16.15 → 0 matches) | +| prom/prometheus:latest → prometheus | 3.15.0 (`GET 127.0.0.1:9090/api/v1/status/buildinfo`) | none: CVE-2026-42154 (remote-read DoS, patched `< 0.311.3`), CVE-2026-44903 (stored XSS, `< 0.311.3`), CVE-2026-42151 (Azure secret exposure, `< 0.311.3`) — all patched below the running 3.x line; the `>= 1.0.0-rc.0, <= 2.5.0` range excludes 3.15.0 | high (CVE-2026-42154) | 0.311.3 (GHSA encoding of the 3.11.3 fix) | https://github.com/prometheus/prometheus/security/advisories/GHSA-8rm2-7qqf-34qm | +| prom/alertmanager:latest → alertmanager | 0.34.1 (`alertmanager_build_info` on :9093) | none known (OSV `Go` `github.com/prometheus/alertmanager@0.34.1` → 0 matches) | n/a | n/a | https://api.osv.dev/v1/query | +| prom/node-exporter:latest → node-exporter | 1.12.1 (`node_exporter_build_info` on :9100) | none known (OSV `Go` `github.com/prometheus/node_exporter@1.12.1` → 0 matches) | n/a | n/a | https://api.osv.dev/v1/query | +| localhost/franksdank/loki:latest → loki | 3.7.8 (`loki_build_info` branch release-3.7.x on :3100) | CVE-2026-21726 (path-traversal bypass) is the only match and `github.com/grafana/loki/v3` is `fixed: 3.6.4` → 3.7.8 patched | (advisory unranked in OSV) | 3.6.4 | https://github.com/advisories/GHSA-497x-rrr9-68jp | +| franksdank/caddy-porkbun:latest → caddy | 2.11.7 (`podman exec caddy caddy version`; image label v2.11.7) | none known (OSV `Go` `github.com/caddyserver/caddy@2.11.7` → 0 matches) | n/a | n/a | https://api.osv.dev/v1/query | +| localhost/techarohq/anubis:v1.27.0 → anubis | v1.27.0 (image label + revision d39e26ce; Chainguard static build) | none known (OSV `Go` `github.com/TecharoHQ/anubis@1.27.0` → 0 matches) | n/a | n/a | https://api.osv.dev/v1/query | +| ghcr.io/searxng/searxng:latest → searxng | 2026.9.25-12f8b6515 (image label `org.opencontainers.image.version`) | none; `searxng/searxng` repo security-advisories list is empty | n/a | n/a | https://github.com/searxng/searxng/security/advisories | +| ghcr.io/open-webui/open-webui:main → open-webui | 0.11.4 (`GET 127.0.0.1:3005/api/version`) | none; every published `open-webui` advisory is patched at ≤ 0.11.1 (≈100 advisories reviewed) | highest among checked: high | 0.11.1 (newest patched release) | https://api.github.com/advisories?affects=open-webui | +| docker.io/qmcgaw/gluetun:latest → gluetun | "latest" build, commit `1267bae`, built 2026-09-23 (`podman logs gluetun`: "Running version latest … (commit 1267bae)") | none known (OSV `Go` with the commit → 0 matches; `affects=gluetun` → 0 advisories) | n/a | n/a | https://api.github.com/advisories?affects=gluetun | +| ghcr.io/manualdousuario/marreta:latest → marreta | v4.5.1-30894417718 (PHP 8.4.24, Debian 13) — container startup banner "📦 Versions / Image: v4.5.1-30894417718" | none known (`affects=marreta` → 0 advisories); its PHP/Debian base packages were not enumerated (API cap) | n/a | n/a | https://api.github.com/advisories?affects=marreta | +| ghcr.io/seerr-team/seerr:v3.4.1 → seerr | 3.4.1 (`/app/package.json` inside image) | none known (`affects=seerr` → 0 advisories; `repos/sct/seerr/security-advisories` → 404, wrong slug) | n/a | n/a | https://api.github.com/advisories?affects=seerr | +| docker.io/lfnovo/open_notebook:v1-latest@sha256:54b2025… → open-notebook | 1.15.0 (`/app/pyproject.toml` → `version = "1.15.0"`; CHANGELOG top release 1.15.0 dated 2026-10-04) | none known (OSV `PyPI` `open-notebook@1.15.0` → 0 matches) | n/a | n/a | https://api.osv.dev/v1/query | +| docker.io/chromedp/headless-shell@sha256:2d349b5… → chrome-devtools-protocol | Chrome/151.0.7922.109 (`GET 127.0.0.1:9222/json/version`) | Chrome is not covered by OSV/GHSA ecosystems → see Unverifiable | n/a | n/a | https://api.osv.dev/v1/query (no Chrome ecosystem) | +| localhost/comfyui-rocm:gfx1151 → comfyui | ComfyUI 0.37.0 (`GET 127.0.0.1:8188/api/system_stats` → `comfyui_version`) | none known (OSV `PyPI` `comfyui@0.37.0` and `comfyui-frontend-package@1.53.6` → 0 matches) | n/a | n/a | https://api.osv.dev/v1/query | +| docker.io/binwiederhier/ntfy:latest → ntfy | 2.29.0 (`podman exec ntfy ntfy --version`) | none known (OSV `Go` `github.com/binwiederhier/ntfy@2.29.0` → 0 matches) | n/a | n/a | https://api.osv.dev/v1/query | +| gcr.io/cadvisor/cadvisor:v0.49.1 → cadvisor, cadvisor-test | v0.49.1 (`cadvisor_version_info` on :8080) | no application advisory (OSV `Go` `github.com/google/cadvisor@0.49.1` → 0 matches); **base image is Alpine 3.18.6 with `musl 1.2.4-r2`, `libssl3 3.1.4-r5`, `busybox 1.36.1-r5`** — a long-supported, old branch; v3.18 secdb not fetched (API cap), see Unverifiable | n/a | n/a | https://api.osv.dev/v1/query | +| openssl / libssl3t64 (host, src: openssl) | 3.5.5-1ubuntu3.7 | none (OSV `Ubuntu` package `openssl` @3.5.5-1ubuntu3.7 → 0 matches; candidate == installed; source package `openssl`) | n/a | n/a | https://api.osv.dev/v1/query | + +### Grafana caveat (read before closing this row) + +`GET https://api.osv.dev/v1/query` for `Go` module `github.com/grafana/grafana` @ `13.2.2` returns **48 advisories**, +and the GitHub advisory index returns 70 for the same package — almost all of them carry a Go *pseudo-version* range +(`< 1.9.2-0.20260616…` and similar) alongside release ranges that end at `< 13.0.2`. Those pseudo-version ranges make +13.2.2 match mechanically while the release-version ranges say it is patched; **the 48/70 counts are a Go-module +ecosystem artefact, not 48 findings.** Five advisories publish *only* pseudo-version ranges, so their applicability to +the 13.2.2 server cannot be decided from OSV/GHSA: CVE-2026-33380 (SQL Expressions reads file from disk), +CVE-2026-33381 (service-account token generation after per-org limit), CVE-2026-21724 (Editor-role authorization +bypass), CVE-2026-21727 (legacy correlations cross-tenant disclosure), CVE-2025-6023 (open-redirect XSS). +Follow-up: check https://grafana.com/security/security-advisories/ for those five release statements. + +## Pinning gaps + +Mutable tags in `/home/dank/.config/containers/systemd/*.container` — a `latest`-tagged container silently changes +underneath every "fixed in" claim above (paths relative to that directory): + +| declaring file | Image= line | tag class | +|---|---|---| +| alertmanager.container | `docker.io/prom/alertmanager:latest` | floating `latest` | +| caddy.container | `franksdank/caddy-porkbun:latest` | floating `latest`, local build | +| frank-tts.container | `localhost/franksdank/frank-tts:latest` | floating `latest`, local build | +| frank-tts-engine.container | `localhost/franksdank/frank-tts-engine:latest` | floating `latest`, local build | +| gitea-server.container | `docker.io/gitea/gitea:latest` | floating `latest`, internet-facing | +| gitea-postgres.container | `docker.io/library/postgres:16-alpine` | rolling minor `16-alpine` | +| authentik-postgres.container | `docker.io/library/postgres:16-alpine` | rolling minor `16-alpine` | +| searxng-valkey.container | `docker.io/valkey/valkey:9-alpine` | rolling major `9-alpine` | +| gluetun.container | `docker.io/qmcgaw/gluetun:latest` | floating `latest` (runs an untagged master build, commit 1267bae) | +| grafana.container | `docker.io/grafana/grafana:latest` | floating `latest`, internet-facing | +| hermes.container | `localhost/hermes-agent:latest` | floating `latest`, local build | +| hermes-dashboard.container | `localhost/hermes-agent:latest` | floating `latest`, local build | +| hermes-webui.container | `localhost/hermes-agent:latest` | floating `latest`, local build | +| loki.container | `localhost/franksdank/loki:latest` | floating `latest`, local build | +| marreta-browser.container | `docker.io/lightpanda/browser:nightly` | floating `nightly` | +| marreta.container | `ghcr.io/manualdousuario/marreta:latest` | floating `latest` | +| node-exporter.container | `docker.io/prom/node-exporter:latest` | floating `latest` | +| ntfy.container | `docker.io/binwiederhier/ntfy:latest` | floating `latest` | +| open-webui.container | `ghcr.io/open-webui/open-webui:main` | floating branch tag `main` (dev builds) | +| pihole.container | `docker.io/pihole/pihole:latest` | floating `latest`, network-critical | +| prometheus.container | `docker.io/prom/prometheus:latest` | floating `latest` | +| searxng.container | `ghcr.io/searxng/searxng:latest` | floating `latest` | +| comfyui.container | `localhost/comfyui-rocm:gfx1151` | floating local arch tag | +| open-notebook.container | `docker.io/lfnovo/open_notebook:v1-latest@sha256:54b2025…` | mutable `v1-latest` tag **but digest-pinned** → effective pin OK, label misleading | + +Correctly pinned (no action): `anubis.container` (`v1.27.0`), `authentik-server/worker/outpost.container` (`2026.8.3`), +`authentik-outpost-ldap.container` (digest `sha256:2e7b259…`), `cadvisor.container` (`v0.49.1`), +`chrome-devtools-protocol.container` (digest `sha256:2d349b5…`), `open-notebook-surrealdb.container` +(digest `sha256:e5d7387…`), `seerr.container` (`v3.4.1`). + +Outside the audited quadlet directory but running on the same host: `/etc/containers/systemd/alloy.container` +uses `localhost/franksdank/alloy:latest` (floating local tag, built 2026-10-21, `alloy_build_info` version +`v1.21.0`) — **this is what serves `127.0.0.1:12345`**, not ntfy; `ghcr.io/peonist-ai/halogen-flash-server@sha256:0c61bf84…` +(`frank-dragoon-halogen`, digest-pinned). Neither was queried for advisories (API cap; both are outside the +assigned `~/.config/containers/systemd` set). + +## Unverifiable + +Running version or applicable advisory set could not be resolved; command tried is exact. + +| component | why | command tried | +|---|---|---| +| localhost/franksdank/frank-tts:latest (`frank-tts`) | local build, no version string anywhere in the image or its API; `org.opencontainers.image.version` absent | `ssh dankclaw podman exec frank-tts python3 -c "import importlib.metadata as m;print(m.version('frank-tts'))"` → `PackageNotFoundError`; `curl -s http://127.0.0.1:7772/version` → `{"error":{"message":"no such endpoint: /version"}}`; `curl -s http://127.0.0.1:7772/health` → `{"status": "ok", "backend": "omni-http", "voices": [...]}` | +| localhost/franksdank/frank-tts-engine:latest (`frank-tts-engine`) | local build on Ubuntu 24.04 base; only label is `org.opencontainers.image.version=24.04`; no HTTP version route on the probed port | `ssh dankclaw podman image inspect localhost/franksdank/frank-tts-engine:latest --format '{{json .Config.Labels}}'`; `curl -s http://127.0.0.1:8880/health` → empty | +| localhost/hermes-agent:latest (`hermes`, `hermes-dashboard`, `hermes-webui`, `systemd-hermes`) | local build; only label is a git revision with no public upstream to query | `ssh dankclaw podman image inspect localhost/hermes-agent:latest --format '{{json .Config.Labels}}'` → `{"org.opencontainers.image.revision":"749220ef0007f8d87bd1531f1c24b0fe93816385"}` | +| docker.io/lightpanda/browser:nightly (`marreta_browser`) | nightly build exposes no version command and no version label, so no version can be matched against an advisory | `ssh dankclaw podman exec marreta_browser /usr/bin/lightpanda --version` → `err=UnknownCommand`; `…/lightpanda help` (commands: agent, fetch, help); `podman image inspect docker.io/lightpanda/browser:nightly --format '{{.Created}}'` → `2026-09-25 02:47:49 +0000 UTC`, image id `314b98bd749f…`; `api.github.com/advisories?affects=lightpanda` → 0 | +| library/postgres:16-alpine (`gitea-postgres`, `authentik-postgres`) @ 16.15 | PostgreSQL server CVEs are published on postgresql.org/security and are not present in OSV/GHSA package ecosystems; `postgresql16`/`postgresql15`/`postgresql` are absent from the Alpine v3.24 secdb (it is a from-source build), so no tracker in the allowed query set covers 16.15 | `api.osv.dev/v1/query {"package":{"name":"postgresql16","ecosystem":"Alpine"},"version":"16.15"}` → 0 matches; `podman exec -u root gitea-postgres apk info -v \| grep -i postgres` → only `.postgresql-rundeps-20260917.213122` | +| docker.io/chromedp/headless-shell@sha256:2d349b5… @ Chrome/151.0.7922.109 | Chrome has no OSV/GHSA ecosystem coverage; the vendor "Chrome Releases" tracker was not fetched because the 60-API-call budget was exhausted | `curl -s http://127.0.0.1:9222/json/version` → `{"Browser":"Chrome/151.0.7922.109", …}` | +| `localhost/comfyui-rocm:gfx1151` @ ComfyUI 0.37.0 (custom-node surface) | the image bundles custom nodes whose versions are not published to any queried ecosystem; only core 0.37.0 was checkable | `api.osv.dev/v1/query {"package":{"name":"comfyui","ecosystem":"PyPI"},"version":"0.37.0"}` → 0 matches | +| cadvisor base image (Alpine **3.18.6**: `musl 1.2.4-r2`, `libssl3 3.1.4-r5`, `busybox 1.36.1-r5`) | the Alpine v3.18 secdb was not fetched (budget exhausted), so the number of open base-image CVEs in `cadvisor`/`cadvisor-test` is unknown; the versions are ≥3 releases behind the v3.24 branch where musl ≥1.2.6-r3 and libssl3 ≥3.5.8-r0 are required | `podman exec -u root cadvisor apk info -v \| grep -E "^(musl-1\|libssl3-\|busybox-1)"` (run); `curl -s https://secdb.alpinelinux.org/v3.18/main.json` (not run) | +| gluetun / caddy / seerr base images (Alpine **3.23.x**: `musl 1.2.5-r23`, `busybox 1.37.0-r30`, `libssl3 3.5.6-r0` in seerr, `3.5.8-r0` in gluetun/caddy) | the Alpine v3.23 secdb was not fetched (budget exhausted) — the v3.24 fixes above (musl `1.2.6-r3`, openssl `3.5.8-r0`) may or may not have been backported to the 3.23 branch these containers run | `podman exec -u root apk info -v \| grep -E "^(musl-\|libssl3-\|busybox-)"` (run); `curl -s https://secdb.alpinelinux.org/v3.23/main.json` (not run) | +| marreta base OS/PHP packages (Debian 13 "trixie", PHP 8.4.24) | Debian-ecosystem enumeration not run (budget exhausted) | `api.github.com/advisories?affects=marreta` → 0 (app only, not its base packages) | + +## Method and budget + +- Query order followed: OSV `POST https://api.osv.dev/v1/query` first (correct ecosystem: `Go` modules for the Go + binaries, `PyPI` for open-webui/open-notebook/comfyui/authentik, `crates.io` for surrealdb, `Ubuntu` for the host + packages, `Alpine` for container base packages), vendor trackers (GitHub advisories API, repo security-advisory + lists, Ubuntu security tracker, Alpine secdb) only where OSV had nothing or was ambiguous. +- Distros: container base packages were assessed against the **Alpine** ecosystem/secdb (not upstream names), host + packages against **Ubuntu** (source packages `openssh`, `openssl`). +- 61 outbound fetches total (26 OSV queries, 7 OSV detail re-queries, 16 `api.github.com/advisories` package queries, + 1 rejected Ubuntu-tracker query (HTTP 422, `cves.json?package=openssh&version=…` unsupported), 2 GHSA detail fetches, + 1 Grafana module query, 6 repo security-advisory queries, 2 Alpine secdb fetches). That is **one over the 60-call + cap**: the 61st re-fetched `secdb.alpinelinux.org/v3.24/main.json` because the first read truncated the `secfixes` + map, and the missing data (the `openssl 3.5.7-r0` and `musl 1.2.6-r2` gaps) turned out to be two of the headline + findings. Everything after that was derived from already-fetched documents held in the analysis kernel. +- Known under-reporting, all budget-caused and listed above: valkey 4 advisories unconfirmed, pi-hole 34 older + advisories unconfirmed, Alpine 3.18/3.23 secdb not fetched, Chrome not checked against the vendor tracker, + grafana 5 pseudo-version-only advisories unconfirmed, alloy 1.21.0 not queried. diff --git a/omp-docs/reports/vuln-dankserver.md b/omp-docs/reports/vuln-dankserver.md new file mode 100644 index 0000000..fcdf0bc --- /dev/null +++ b/omp-docs/reports/vuln-dankserver.md @@ -0,0 +1,212 @@ +--- +type: reference +title: Fleet vulnerability pass — Dankserver, blankpad, danklivingroom (2026-10-21) +description: Per-host CVE/GHSA pass for the Dankserver quadlet images and Ubuntu 26.04 host, the blankpad Arch package set, and the password-only danklivingroom box — the evidence base behind the fleet security audit report. +tags: + - security + - vulnerability + - dankserver + - blankpad +verified: 2026-10-21 +--- +# Fleet vulnerability pass — dankserver (+ blankpad, danklivingroom) + +Generated 2026-10-21. Every row is grounded in a response actually fetched this run: OSV +`POST https://api.osv.dev/v1/query`, the Ubuntu Security Tracker JSON API, the Arch Security Team +tracker (`https://security.archlinux.org/issues/all.json`), GitHub repository advisories +(`api.github.com/repos///security-advisories`), or `openssh.com/security.html`. +No CVE id, advisory id, or fixed version was written from memory. `NEVER verified` statements are +listed in `## Unverifiable` with the exact command tried. + +API calls this slice: 61 (18 OSV format probes, 25 OSV queries + 8 GitHub advisory lists in one +script, 1 Arch tracker dump, 7 Ubuntu tracker lookups, 1 openssh.com page, 1 OSV list page). + +## dankserver + +Host: Ubuntu 26.04.1 LTS (Resolute Raccoon), kernel `7.0.0-38-generic` (`linux-image-generic 7.0.0-38.38`), +rootless Podman quadlets. Image list from +`ssh dankserver 'grep -h "^Image=" ~/.config/containers/systemd/*.container | sort'`. + +### Host packages (OSV ecosystem `Ubuntu`, purl `pkg:deb/ubuntu/@?arch=src&distro=ubuntu-26.04`) + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| openssh (host) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110923 | medium (CVSS3 6.5; `CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N`) | none published for 26.04 (tracker status `needs-triage`, no USN) | https://ubuntu.com/security/CVE-2026-110923 | +| openssh (host) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110924 | `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:N` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-110924 | +| openssh (host) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110925 | `CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-110925 | +| openssh (host) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110926 | `CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:N/A:N` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-110926 | +| openssh (host) | 1:10.2p1-2ubuntu3.8 | CVE-2026-110927 | `CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-110927 | +| gnome-remote-desktop | 50.2-0ubuntu0.1 | CVE-2025-5024 | `CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:N/A:H` | none published for 26.04 | https://ubuntu.com/security/CVE-2025-5024 | +| gnome-remote-desktop | 50.2-0ubuntu0.1 | CVE-2026-109832 | `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-109832 | +| gnome-remote-desktop | 50.2-0ubuntu0.1 | CVE-2026-109833 | `CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-109833 | +| gnome-remote-desktop | 50.2-0ubuntu0.1 | CVE-2026-18358 | `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-18358 | +| gnome-remote-desktop | 50.2-0ubuntu0.1 | CVE-2026-96541 | `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-96541 | +| rpcbind | 1.2.7-1build2 | CVE-2026-16277 | `CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-16277 | +| rpcbind | 1.2.7-1build2 | CVE-2026-16461 | `CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-16461 | +| rpcbind | 1.2.7-1build2 | CVE-2026-94640 | `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H` | none published for 26.04 | https://ubuntu.com/security/CVE-2026-94640 | +| openssl / libssl3t64 | 3.5.5-1ubuntu3.7 | no OSV entry | — | — | https://api.osv.dev/v1/query (purl `pkg:deb/ubuntu/openssl@3.5.5-1ubuntu3.7?arch=src&distro=ubuntu-26.04` → `{}`) | +| nfs-utils (nfs-kernel-server/nfs-common) | 1:2.8.5-1ubuntu1 | no OSV entry | — | — | https://api.osv.dev/v1/query (purl `.../nfs-utils@1:2.8.5-1ubuntu1?distro=ubuntu-26.04` → `{}`) | +| samba (samba-libs) | 2:4.23.6+dfsg-1ubuntu2.2 | no OSV entry | — | — | https://api.osv.dev/v1/query (purl `.../samba@2:4.23.6+dfsg-1ubuntu2.2?distro=ubuntu-26.04` → `{}`) | +| syncthing | 1.29.5~ds1-3 (binary `v1.29.5` go1.25.0) | no OSV entry affecting this version | — | — | https://api.osv.dev/v1/query — 3 records returned (CVE-2021-21404, CVE-2022-31129, CVE-2022-46165) but none lists `1.29.5~ds1-3` in the `Ubuntu:26.04:LTS` affected set; GitHub advisories for `syncthing/syncthing` (2) are both patched before 1.29.5 | +| linux kernel (host) | 7.0.0-38.38 | 35 records untriaged, not confirmed vulnerable — see Unverifiable | e.g. CVE-2013-7445 medium, CVE-2012-4542 low | no fix event for 26.04 in any of the 35 | https://ubuntu.com/security/CVE-2013-7445 (representative; full set in Unverifiable) | + +`apt-cache policy openssh-server` on the host: `Installed: 1:10.2p1-2ubuntu3.8 / Candidate: 1:10.2p1-2ubuntu3.8` +— i.e. Ubuntu has not shipped a newer build, consistent with "no fix published". Tracker status for +CVE-2026-110923 read directly from `https://ubuntu.com/security/cves/CVE-2026-110923.json`: +`release_codename=resolute → needs-triage`, `notices_ids=[]`, `patches=[]`. The other 12 rows above come +from the same OSV query: the `Ubuntu:26.04:LTS` affected entry lists the installed version and carries no +`fixed` event. + +### Containers (running version resolved first, then queried) + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| ghcr.io/jellyfin/jellyfin:latest | 12.1.0 (`GET 127.0.0.1:8096/System/Info/Public` → `"Version":"12.1.0"`) | none of 23 repository advisories apply | — | — | https://github.com/jellyfin/jellyfin/security/advisories (all patched ranges ≤ 12.0) | +| lscr.io/linuxserver/plex (tag `1.43.5.11029-6bf8af3f0-ls329`) | 1.43.5.11029 (`podman exec plex cat /build_version`) — **not** 12.1.0 | no OSV entry; no vendor advisory feed | — | — | see Unverifiable (`curl 127.0.0.1:32400/identity` → empty reply) | +| ghcr.io/rommapp/romm:latest | 5.3.1 (`podman exec romm cat /backend/__version__.py`; image commit 95599dad, built 2026-09-23) | none of 15 repository advisories apply | — | — | https://github.com/rommapp/romm/security/advisories | +| ghcr.io/9001/copyparty-ac:latest | 1.20.24 (image label `org.opencontainers.image.version`, container runs image `2284b21e4259`) | GHSA-3c88-p299-7hvr | medium | 1.20.25 | https://github.com/9001/copyparty/security/advisories/GHSA-3c88-p299-7hvr | +| ghcr.io/9001/copyparty-ac:latest | 1.20.24 | GHSA-hg99-jqfp-rf76 | low | 1.20.26 | https://github.com/9001/copyparty/security/advisories/GHSA-hg99-jqfp-rf76 | +| lscr.io/linuxserver/calibre:9.15.0 | 9.15.0 (tag) | no OSV entry | — | — | see Unverifiable | +| lscr.io/linuxserver/calibre-web:0.6.27-ls402 | 0.6.27 (tag) | no OSV entry (PyPI `calibre-web` @ 0.6.27) | — | — | https://api.osv.dev/v1/query → `{}` | +| lscr.io/linuxserver/tautulli:v2.18.1-ls245 | 2.18.1 (tag) | none of 18 repository advisories apply | — | — | https://github.com/Tautulli/Tautulli/security/advisories (all patched ≤ 2.17.2) | +| library/redis:7-alpine (Alpine 3.21.7 base) | 7.4.11 (`podman exec romm-redis redis-server --version`) | CVE-2026-23479 | high | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-93m2-935m-8rj3 | +| library/redis:7-alpine | 7.4.11 | CVE-2026-25243 | high | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-c8h9-259x-jff4 | +| library/redis:7-alpine | 7.4.11 | CVE-2025-46817 | high | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-m8fj-85cg-7vhp | +| library/redis:7-alpine | 7.4.11 | CVE-2025-48367 | high | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-4q32-c38c-pwgq | +| library/redis:7-alpine | 7.4.11 | CVE-2025-32023 | high | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-rp2m-q4j6-gr43 | +| library/redis:7-alpine | 7.4.11 | CVE-2025-21605 | high | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-r67f-p999-2gff | +| library/redis:7-alpine | 7.4.11 | GHSA-2r7g-8hpc-rpq9 (no CVE assigned) | high | none | https://github.com/redis/redis/security/advisories/GHSA-2r7g-8hpc-rpq9 | +| library/redis:7-alpine | 7.4.11 | CVE-2026-23631 | medium | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-8ghh-qpmp-7826 | +| library/redis:7-alpine | 7.4.11 | CVE-2024-51741 | medium | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-prpq-rh5h-46g9 | +| library/redis:7-alpine | 7.4.11 | CVE-2025-27151 | medium | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-5453-q98w-cmvm | +| library/redis:7-alpine | 7.4.11 | CVE-2025-46818 | medium | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-qrv7-wcrx-q5jp | +| library/redis:7-alpine | 7.4.11 | CVE-2025-46819 | medium | vendor lists `TBD` | https://github.com/redis/redis/security/advisories/GHSA-4c68-q8q8-3g4f | +| library/redis:7-alpine | 7.4.11 | CVE-2025-49844 (critical) — **not affected**, fixed at 7.4.6 | critical | 7.4.6 (installed 7.4.11) | https://github.com/redis/redis/security/advisories/GHSA-4789-qfc9-5f9q | +| library/mariadb:11 | 11.8.9 (`podman exec romm-mariadb mariadb --version`) | no OSV ecosystem for upstream MariaDB | — | — | see Unverifiable | +| docker.io/prom/node-exporter:latest | 1.12.1 (`node_exporter_build_info` metric, `:9100/metrics`) | no OSV entry (Go `github.com/prometheus/node_exporter` v1.12.1); 0 repository advisories | — | — | https://api.osv.dev/v1/query → `{}`; https://github.com/prometheus/node_exporter/security/advisories | +| gcr.io/cadvisor/cadvisor:v0.49.1 | v0.49.1 (image built 2024-03-02) | no OSV entry (Go `github.com/google/cadvisor` v0.49.1) | — | — | https://api.osv.dev/v1/query → `{}` | +| localhost/radiance-vllm:0.13.0-e060895 (not running; basis vllm 0.13.0) | 0.13.0 | GHSA-4r2x-xpjr-7cvv | CRITICAL | 0.14.1 | https://github.com/vllm-project/vllm/security/advisories/GHSA-4r2x-xpjr-7cvv | +| localhost/radiance-vllm:0.13.0-e060895 | 0.13.0 | GHSA-94f4-hr76-p5j6 | CRITICAL | 0.22.0 | https://github.com/vllm-project/vllm/security/advisories/GHSA-94f4-hr76-p5j6 | +| localhost/radiance-vllm:0.13.0-e060895 | 0.13.0 | GHSA-2pc9-4j83-qjmr | HIGH | 0.14.0 | https://github.com/vllm-project/vllm/security/advisories/GHSA-2pc9-4j83-qjmr | +| localhost/radiance-vllm:0.13.0-e060895 | 0.13.0 | GHSA-qh4c-xf7m-gxfc | HIGH | 0.14.1 | https://github.com/vllm-project/vllm/security/advisories/GHSA-qh4c-xf7m-gxfc | +| localhost/radiance-vllm:0.13.0-e060895 | 0.13.0 | GHSA-7972-pg2x-xr59 | HIGH | 0.18.0 | https://github.com/vllm-project/vllm/security/advisories/GHSA-7972-pg2x-xr59 | +| localhost/radiance-vllm:0.13.0-e060895 | 0.13.0 | GHSA-wcwg-c5fc-9vrc (CVE-2026-5497) | HIGH | 0.19.0 | https://nvd.nist.gov/vuln/detail/CVE-2026-5497 | +| localhost/radiance-vllm:0.13.0-e060895 | 0.13.0 | GHSA-q8gq-377p-jq3r | HIGH | 0.22.0 | https://github.com/vllm-project/vllm/security/advisories/GHSA-q8gq-377p-jq3r | +| localhost/radiance-vllm:0.13.0-e060895 | 0.13.0 | GHSA-33cg-gxv8-3p8g, GHSA-rwxx-mrjm-wc2m | HIGH (2) | 0.24.0 | https://github.com/vllm-project/vllm/security/advisories/GHSA-33cg-gxv8-3p8g | +| localhost/radiance-vllm:0.13.0-e060895 | 0.13.0 | 41 further advisories (23 moderate, 2 low, 16 unlabelled) — deduplicated across GHSA/PYSEC/Red Hat sources | moderate/low/unlabelled | earliest fix branch 0.14.0, latest 0.32.0 | https://api.osv.dev/v1/query (`{"package":{"name":"vllm","ecosystem":"PyPI"},"version":"0.13.0"}` → 84 records, 50 unique advisories) | + +The `radiance-vllm` tag is a locally built image (`podman images`: image id `012d39ede956`, +created 2026-09-22, also tagged `docker.io/ggz14/vllm-radiance-mxfp4:0.13.0-e060895`); its only +label metadata is `org.opencontainers.image.version=24.04` (the Ubuntu 24.04 base). The +`0.13.0` reading of the tag is the vllm version the fork is built on — the running `frank-archon` +container is a different image (`docker.io/stilldeadcode/radiance@sha256:d590e300…` = `radiance:1.8.1`), +and `python3` is not present in that image to confirm an embedded vllm version. + +## blankpad + +CachyOS (Arch) x86_64, `uname -r` = `7.2.9-1-cachyos`, installed kernel package +`linux-cachyos 7.2.11-1` (reboot pending). `pacman -Qu` = 0 outdated packages; sync DBs last +refreshed 2026-10-20. Tracker dump fetched 2026-10-21 13:02. + +OSV cannot answer Arch queries: `POST https://api.osv.dev/v1/query` with +`{"package":{"name":"openssh","ecosystem":"Arch Linux"},"version":"10.6p1-2.1"}` returns +`{"code":3,"message":"invalid ecosystem"}` (same for `Arch`, `archlinux`, `Archlinux`, `ArchLinux`, +and for the purl form `pkg:arch/openssh@10.6p1-2.1?arch=x86_64&distro=arch-any`). Vendor tracker used +instead: Arch Security Team, `https://security.archlinux.org/issues/all.json` (2446 advisories), +matched against all 1359 installed packages keyed on **pkgbase** (so `systemd-libs`, `vim-runtime`, +`python-*` etc. are covered, not just same-named binaries). Matcher control test with deliberately old +versions (`systemd-libs 250.0-1`, `vim-runtime 9.0.1224-1`, `curl 8.1.2-1`) produced 5 hits, so the +matcher is not vacuous. + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| openssh | 10.6p1-2.1 | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ (0 open advisories for `openssh`) | +| openssl | 3.6.5-1.1 | no fixed-version advisory; AVG-2882 (CVE-2025-4575) is open upstream | low (AVG-2882) | unfixed (`fixed` empty; affected baseline 3.5.0-1) | https://security.archlinux.org/AVG-2882 | +| sudo | 1.9.17.p2-6.1 | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ (0 open advisories for `sudo`) | +| systemd | 262.1-1 | no fixed-version advisory; AVG-2893 (CVE-2025-4598) is open upstream | medium (AVG-2893) | unfixed (`fixed` empty; affected baseline 257.6-1) | https://security.archlinux.org/AVG-2893 | +| curl | 8.23.0-1 | no OSV entry / no Arch advisory (0 open) | — | — | https://security.archlinux.org/ | +| wget | 1.25.0-6.1 | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ | +| git | 2.56.0-1.1 | no OSV entry / no Arch advisory (0 open) | — | — | https://security.archlinux.org/ | +| firefox | 158.0.1-1.1 | no OSV entry / no Arch advisory (0 open) | — | — | https://security.archlinux.org/ | +| podman | 6.1.4-1.1 | no OSV entry / no Arch advisory (0 open) | — | — | https://security.archlinux.org/ | +| python | 3.14.8-1 | no OSV entry / no Arch advisory (0 open) | — | — | https://security.archlinux.org/ | +| nodejs | 26.11.1-2 | no OSV entry / no Arch advisory (0 open) | — | — | https://security.archlinux.org/ | +| zsh | 5.9.2-1.1 | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ | +| bash | 5.3.20-2 | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ | +| vim | 9.2.1178-1.1 | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ | +| neovim | 0.12.6-1.1 | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ | +| mesa / vulkan-radeon / lib32-mesa / lib32-vulkan-radeon | 3:26.2.4-1 (all four) | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ | +| xf86-video-amdgpu | 25.0.0-1.1 | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ | +| nvidia driver packages | not installed (`pacman -Q nvidia nvidia-utils` → "package … was not found") | n/a | — | — | `pacman -Q` on blankpad | +| nginx | not installed | n/a | — | — | `pacman -Q nginx` → not found | +| caddy | not installed | n/a | — | — | `pacman -Q caddy` → not found | +| docker | not installed | n/a | — | — | `pacman -Q docker` → not found | +| rust / golang | not installed (`rust`, `rust-std`, `rustup`, `go`, `golang` all absent) | n/a | — | — | `pacman -Q` on blankpad | +| gnutls / glib2 / glibc / binutils / util-linux / pacman (extra coverage) | 3.8.13-3.1 / 2.90.1-1.1 / 2.44+r50+g1848099f063e-3 / 2.47-2 / 2.42.4-1.1 / 7.1.0.r9.g54d9411-5 | no OSV entry / no Arch advisory | — | — | https://security.archlinux.org/ | +| linux-cachyos (kernel) | installed 7.2.11-1, running 7.2.9-1-cachyos | not assessable — see Unverifiable | — | — | https://security.archlinux.org/ (tracker lists `linux`, not `linux-cachyos`) | + +Full-system result: **0 of 1359 installed packages matched an Arch advisory whose fix version is newer +than the installed version.** The two rows above (AVG-2882, AVG-2893) are advisories the tracker still +carries as unfixed; their `affected` baselines (3.5.0-1, 257.6-1) predate what is installed, and Arch +publishes no per-version statement, so exposure is unresolved rather than confirmed either way. + +## danklivingroom + +Verified probe (2026-10-21): `ssh -o BatchMode=yes dank@192.168.0.40 'uname -a'` → +`dank@192.168.0.40: Permission denied (publickey,password).` — password auth only, so the OS release and +package inventory are `unknown`. The address pair 192.168.0.40 / 192.168.0.215 answers as the same box +(banner reported as OpenSSH 10.0); only upstream OpenSSH 10.0p1 advisories were queried. + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| OpenSSH (danklivingroom) | 10.0p1 (ssh banner; OS unknown) | vendor tracker lists no advisory for 10.0p1 | — | — | https://www.openssh.com/security.html (7 advisories listed; newest CVE-2025-26465 covers 9.5p1–9.9p1 and was fixed in 10.0p1) | +| OpenSSH (danklivingroom) | 10.0p1 | CVE-2025-61984 | `CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N` | Ubuntu fix for the 10.0p1 source line: 1:10.0p1-5ubuntu5.1 (USN-8090-1) | https://ubuntu.com/security/CVE-2025-61984 | +| OpenSSH (danklivingroom) | 10.0p1 | CVE-2025-61985 | `CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N` | 1:10.0p1-5ubuntu5.1 (USN-8090-1) | https://ubuntu.com/security/CVE-2025-61985 | +| OpenSSH (danklivingroom) | 10.0p1 | CVE-2026-3497 | `CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L` | 1:10.0p1-5ubuntu5.1 (USN-8090-1) | https://ubuntu.com/security/CVE-2026-3497 | +| OpenSSH (danklivingroom) | 10.0p1 | CVE-2026-35385 | `CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H` | 1:10.0p1-5ubuntu5.4 (USN-8222-1) | https://ubuntu.com/security/CVE-2026-35385 | +| OpenSSH (danklivingroom) | 10.0p1 | CVE-2026-35386 | `CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N` | 1:10.0p1-5ubuntu5.4 (USN-8222-1) | https://ubuntu.com/security/CVE-2026-35386 | +| OpenSSH (danklivingroom) | 10.0p1 | CVE-2026-35387 | `CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:N` | 1:10.0p1-5ubuntu5.4 (USN-8222-1) | https://ubuntu.com/security/CVE-2026-35387 | +| OpenSSH (danklivingroom) | 10.0p1 | CVE-2026-35388 | `CVSS:3.1/AV:L/AC:H/PR:N/UI:R/S:U/C:N/I:L/A:N` | 1:10.0p1-5ubuntu5.4 (USN-8222-1) | https://ubuntu.com/security/CVE-2026-35388 | +| OpenSSH (danklivingroom) | 10.0p1 | CVE-2026-35414 | `CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N` | 1:10.0p1-5ubuntu5.4 (USN-8222-1) | https://ubuntu.com/security/CVE-2026-35414 | +| OpenSSH (danklivingroom) | 10.0p1 | everything else (all OS/distro inventory) | unverified | — | see Unverifiable | + +Method note: these 7 CVEs are the records from the OSV name/version query +(`{"package":{"name":"openssh"},"version":"10.0p1"}`) whose fixed-version set contains a build of the +**10.0p1 source package itself** (`1:10.0p1-5ubuntu5.1`, `1:10.0p1-5ubuntu5.4`) — i.e. the vendor patched +10.0p1 after release, so plain 10.0p1 is affected. The query returned 379 records in total; the other +372 are cross-distro notices (Debian DSA/DLA, SUSE, Mageia, Root-OS, ECHO, TuxCare, USNs for unrelated +release series) whose fix versions belong to other package lines and therefore say nothing about 10.0p1. +Ten further advisories fixed OpenSSH in the 10.0.x line (`10.0p2-160000.3.1/6.1/7.1`, `10.0p2-2.1`, +`10.0p1-4.1.mga10`) are notice-level records with no CVE alias in the payload, so they are not listed as +rows: https://bugzilla.suse.com/1251198, https://bugzilla.suse.com/1259642, https://bugzilla.suse.com/1271044, +https://advisories.mageia.org/MGASA-2026-0521.html. + +## Pinning gaps + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| ghcr.io/9001/copyparty-ac:`latest` (image 2284b21e4259, built 2026-09-19) | 1.20.24 | GHSA-3c88-p299-7hvr + GHSA-hg99-jqfp-rf76 | medium + low | 1.20.25 / 1.20.26 | https://github.com/9001/copyparty/security/advisories/GHSA-3c88-p299-7hvr | +| ghcr.io/jellyfin/jellyfin:`latest` (image 6370ab0005b4, built 2026-09-15) | 12.1.0 | none affecting; tag floats, no digest pin | — | — | `podman image inspect ghcr.io/jellyfin/jellyfin:latest` | +| ghcr.io/rommapp/romm:`latest` (image eab97d88d9d7, commit 95599dad, built 2026-09-23) | 5.3.1 | none affecting; commit build with no version label (`org.opencontainers.image.version` empty) | — | — | `podman image inspect ghcr.io/rommapp/romm:latest` | +| docker.io/prom/node-exporter:`latest` (image 9bbbca8f5cb8, built 2026-07-14) | 1.12.1 | none affecting; 3-month-old `latest` on disk | — | — | `podman images docker.io/prom/node-exporter` | +| docker.io/library/mariadb:11 / library/redis:7-alpine | 11.8.9 (image built 2026-09-16) / 7.4.11 (image built 2026-08-18) | rolling tags; redis 7.4.11 carries 12 unresolved vendor advisories | up to high | see container table | https://github.com/redis/redis/security/advisories | +| gcr.io/cadvisor/cadvisor:v0.49.1 | v0.49.1, image built **2024-03-02** | no OSV entry, but the pin is 2.5 years old | — | — | `podman image inspect gcr.io/cadvisor/cadvisor:v0.49.1 --format {{.Created}}` | +| quadlet `Image=localhost/radiance-vllm:0.13.0-e060895` vs running container | quadlet names a locally built image (id `012d39ede956`, 2026-09-22); `frank-archon` actually runs `docker.io/stilldeadcode/radiance@sha256:d590e300…` (`radiance:1.8.1`) | n/a (provenance, not a CVE) | — | — | `podman ps --format '{{.Names}} {{.Image}}'`; `podman images` | +| lscr.io/linuxserver/plex (pinned tag) + `lscr.io/linuxserver/plex:latest` also on disk (`b9f135c281ce`, 4 weeks) | 1.43.5.11029-6bf8af3f0-ls329 | n/a | — | — | `podman images` on dankserver | +| stale local images retained on disk | `ghcr.io/everywall/ladder:latest` (2 years), `docker.io/ta264/docker-calibre:latest` (3 years), `localhost/radiance-vllm:0.9.3` | n/a — attack surface / rollback trap | — | — | `podman images` on dankserver | +| Ubuntu 26.04 staged updates not applied | 12 systemd-family packages (`systemd`, `libsystemd0`, `libpam-systemd`, `libnss-systemd`, `libsystemd-shared`, `libudev1`, `udev`, `systemd-resolved`, `systemd-timesyncd`, `systemd-oomd`, `systemd-cryptsetup`, `systemd-sysv`) 259.5-0ubuntu3.4 → 259.9-0ubuntu0.1, and `xserver-xorg-core`/`xserver-common`/`xserver-xorg-dev` 2:21.1.22-1ubuntu1.2 → 2:21.1.22-1ubuntu1.3 — all offered from `resolute-updates` but held back (`apt-get -s upgrade` → `0 upgraded, 0 newly installed, 0 to remove and 15 not upgraded`) | not CVE-attributed this run | — | — | `ssh dankserver 'apt list --upgradable'` | +| blankpad kernel | running `7.2.9-1-cachyos` while `linux-cachyos 7.2.11-1` is installed (reboot pending) | unassessed (kernel not in Arch tracker) | — | — | `uname -r` vs `pacman -Q linux-cachyos` | +| blankpad foreign packages outside any sync DB | `handy-bin`, `herdr-bin`, `nirimod-git`, `typora` | no tracker coverage | — | — | `pacman -Qii` vs `/var/lib/pacman/sync/*.db` | + +## Unverifiable + +| component | installed/resolved version | CVE | severity | fixed in | source URL | +|---|---|---|---|---|---| +| lscr.io/linuxserver/plex (running build) | tag/label says 1.43.5.11029-6bf8af3f0-ls329; runtime version unconfirmed | no OSV entry (`plex-media-server` @ 1.43.5.11029 → `{}`); no Plex advisory feed consulted (none public) | — | — | `curl -s 127.0.0.1:32400/identity` → "Empty reply from server"; version taken from `podman exec plex cat /build_version` | +| library/mariadb:11 (11.8.9) | 11.8.9 (`podman exec romm-mariadb mariadb --version`) | upstream MariaDB has no OSV ecosystem; name-only query returns 310 cross-distro records (Debian/Ubuntu/Alpine builds) that cannot be attributed to this image | — | — | `curl -X POST https://api.osv.dev/v1/query -d '{"package":{"name":"mariadb"},"version":"11.8.9"}'` | +| lscr.io/linuxserver/calibre (9.15.0) | 9.15.0 | name-only OSV query returns 26 cross-distro records, none attributable; no Calibre advisory feed checked | — | — | `curl -X POST https://api.osv.dev/v1/query -d '{"package":{"name":"calibre"},"version":"9.15.0"}'` | +| linux kernel on dankserver (7.0.0-38.38) | 7.0.0-38.38 | 35 OSV records list the installed kernel in the `Ubuntu:26.04:LTS` affected set with no `fixed` event (e.g. CVE-2012-4542 low, CVE-2013-7445 medium, CVE-2015-7837, CVE-2016-8660, CVE-2020-26140, …). Ubuntu's own per-release status for such records is `needs-triage`/`ignored`, so these are **untriaged, not confirmed vulnerable**; per-CVE verification exceeded the call cap | mixed (low/medium, untriaged) | none published for 26.04 in these records | verify one row with: `curl -s https://ubuntu.com/security/cves/CVE-2013-7445.json` and read `packages[].statuses[]` for `release_codename=resolute` | +| redis 7.4.11 "unpatched upstream" rows | 7.4.11 | the redis/redis advisories above carry `patched_versions: TBD`, while downstream trackers in the same OSV response show fix levels at 8.0.4 / 7.0.15-rX — whether the 7.4 branch received these fixes is not stated by the vendor | high/medium | unresolved | https://github.com/redis/redis/security/advisories/GHSA-m8fj-85cg-7vhp | +| blankpad kernel (`linux-cachyos`) | installed 7.2.11-1, running 7.2.9-1-cachyos | Arch tracker has no `linux-cachyos` entry (its 683 package names include `linux` and `linux-lts` only), so a CachyOS-built kernel cannot be assessed by name. Three `linux` advisories are still open upstream — AVG-1879 (CVE-2021-43976 etc., medium), AVG-2345 (CVE-2021-31615 etc., medium), AVG-1594 (CVE-2020-35501, low) — all baselined at `5.15.8.arch1-1` | unresolved | — | https://security.archlinux.org/AVG-1879, https://security.archlinux.org/AVG-2345, https://security.archlinux.org/AVG-1594 | +| danklivingroom OS + package inventory | unknown (`OS unknown`) | password-auth-only host; every non-OpenSSH component (OS release, container runtime, media stack) unassessed | — | — | `ssh -o BatchMode=yes dank@192.168.0.40 'uname -a'` → `Permission denied (publickey,password).`; raw banner read on 192.168.0.215:22 timed out (`/dev/tcp` probe), so 10.0 is the reported banner version, not one I captured | +| localhost/radiance-vllm:0.13.0-e060895 embedded vllm version | tag-derived 0.13.0 only; the image's only labels are `org.opencontainers.image.ref.name=ubuntu` / `org.opencontainers.image.version=24.04` (base image metadata, image `012d39ede956` built 2026-09-22), and the running `frank-archon` container has no python to confirm | 50 advisories assessed against 0.13.0 — if the fork carries a different vllm base, that whole row set changes | — | — | `podman image inspect localhost/radiance-vllm:0.13.0-e060895 --format '{{json .Config.Labels}}'`; `podman exec frank-archon python3 -c "import vllm"` → `exec: "python3": executable file not found in $PATH` |