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
critical all 3 boxes One 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.
high Dankclaw, Dankserver 23 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.
high Dankclaw Gitea 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.
medium Dankclaw (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.
medium Dankserver NFS 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).
medium Dankserver, .40/.215 Patch 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.
medium Dankserver Host 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.
low Dankclaw, blankpad Listeners 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/.215 LLMNR 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.
info all 3 boxes No 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