nginx is pinned tag+digest, so abra recipe upgrade cannot bump it (it FATAs on "tag and digest … not
supported"); the new tag+digest was resolved and applied by hand, preserving the pin style.
CVE-2026-95101 — HTTP/3: part of an unknown frame treated as request body (bypass client_max_body_size / inject into proxied request).
CVE-2026-97629 — TLS session-ticket key rotation left one key uninitialized (session forgery).
CVE-2026-97205 — use-after-free with AIO when an SSI page has include virtual.
Plus features (geoip MMDB support, backend SSL certificate verification by IP, QUIC reconfiguration +
binary upgrade with quic_bpf), a change (HTTP/2 now uses RFC 9218 prioritisation; RFC 7540 signals
ignored), and bugfixes.
Advisory scan
Deterministic scan (cc-ci-plan/advisory-scan.py custom-html --from 1.31.6 --to 1.31.7 --image nginx=1.31.6:1.31.7): 5 CVEs fixed by this upgrade — CVE-2026-15176, CVE-2026-93479, CVE-2026-95101, CVE-2026-97205,
CVE-2026-97629 — matching the release-note read exactly (union: 5). The 52 unclassified advisories are
historic nginx CVEs fixed at ≤1.31.6 (vendor CHANGES page only, no structured version window); an --adjudicate pass confirmed none are newly fixed by this window. No scan source failed.
Operator Action Required
None for the custom-html static-file-serving shape. The recipe serves static HTML from a volume on
port 80 behind traefik (HTTP/1.1+HTTP/2; no HTTP/3/QUIC listener, no AIO/SSI, no rewrite+alias
path mapping, no session-ticket-rotation config). No breaking config changes, no migrations, no
dependency bumps. Being a security release, upgrading promptly is warranted.
Version label
Intentionally not bumped by this PR (label stays 1.14.1+1.31.6); the operator's release applies it:
abra recipe release custom-html -z
(no --dry-run; run after merge — this PR does not publish).
Evidence
Step-2b direct deploy on cc-ci (dev-custom-html.ci.commoninternet.net, --chaos): deploy succeeded 🟢; service 1/1 running nginx:1.31.7; clean startup logs (nginx/1.31.7); nginx -v = nginx/1.31.7; live HTTP 200 over HTTP/2 through traefik. Dev deploy torn down afterwards
(0 leaked stacks / volumes).
abra recipe lint custom-html -C -n: all error-level rules pass; only pre-existing warnings
(R002 healthcheck, R004/R005 from the floating-tag sftp overlay).
Diff vs upstream main: exactly the one-line nginx tag+digest change.
Tested green on the cc-ci recipe CI server (full suite, cold, against this PR head). NOT merged — for operator review.
## custom-html recipe upgrade — nginx 1.31.6 → 1.31.7
DEFAULT mode (recipe PR only; existing cc-ci tests; no test changes).
### Image tag table
| service | image | current | → new |
|---------|-------|---------|-------|
| app | nginx | `1.31.6@sha256:908dc23e…` | `1.31.7@sha256:6c3fee1d…` (manifest-list digest re-pinned) |
| git | alpine/git | `v2.54.0` | unchanged (abra sees no newer tag) |
| ssh / sshstart | linuxserver/openssh-server | `latest@sha256:946fa261…` | unchanged (floating `latest` pin, intentional) |
`nginx` is pinned tag+digest, so `abra recipe upgrade` cannot bump it (it FATAs on "tag and digest … not
supported"); the new tag+digest was resolved and applied by hand, preserving the pin style.
### Upstream release notes
**Upstream release notes:** app nginx 1.31.6→1.31.7: https://nginx.org/en/CHANGES
nginx **1.31.7 (14 Oct 2026)** is a security patch release. Five security fixes:
- **CVE-2026-15176** — buffer overflow in a worker using `alias` when the URI was changed by `rewrite`.
- **CVE-2026-93479** — buffer overflow evaluating string expressions with variables (document-root calc / logging).
- **CVE-2026-95101** — HTTP/3: part of an unknown frame treated as request body (bypass `client_max_body_size` / inject into proxied request).
- **CVE-2026-97629** — TLS session-ticket key rotation left one key uninitialized (session forgery).
- **CVE-2026-97205** — use-after-free with AIO when an SSI page has `include virtual`.
Plus features (geoip MMDB support, backend SSL certificate verification by IP, QUIC reconfiguration +
binary upgrade with `quic_bpf`), a change (HTTP/2 now uses RFC 9218 prioritisation; RFC 7540 signals
ignored), and bugfixes.
### Advisory scan
Deterministic scan (`cc-ci-plan/advisory-scan.py custom-html --from 1.31.6 --to 1.31.7 --image nginx=1.31.6:1.31.7`):
**5 CVEs fixed by this upgrade** — CVE-2026-15176, CVE-2026-93479, CVE-2026-95101, CVE-2026-97205,
CVE-2026-97629 — matching the release-note read exactly (union: 5). The 52 unclassified advisories are
historic nginx CVEs fixed at ≤1.31.6 (vendor CHANGES page only, no structured version window); an
`--adjudicate` pass confirmed none are newly fixed by this window. No scan source failed.
### Operator Action Required
**None** for the custom-html static-file-serving shape. The recipe serves static HTML from a volume on
port 80 behind traefik (HTTP/1.1+HTTP/2; no HTTP/3/QUIC listener, no AIO/SSI, no `rewrite`+`alias`
path mapping, no session-ticket-rotation config). No breaking config changes, no migrations, no
dependency bumps. Being a security release, upgrading promptly is warranted.
### Version label
Intentionally **not** bumped by this PR (label stays `1.14.1+1.31.6`); the operator's release applies it:
```
abra recipe release custom-html -z
```
(no `--dry-run`; run after merge — this PR does not publish).
### Evidence
- Step-2b direct deploy on cc-ci (`dev-custom-html.ci.commoninternet.net`, `--chaos`): deploy succeeded
🟢; service 1/1 running `nginx:1.31.7`; clean startup logs (`nginx/1.31.7`); `nginx -v` =
`nginx/1.31.7`; live HTTP **200 over HTTP/2** through traefik. Dev deploy torn down afterwards
(0 leaked stacks / volumes).
- `abra recipe lint custom-html -C -n`: all error-level rules pass; only pre-existing warnings
(R002 healthcheck, R004/R005 from the floating-tag sftp overlay).
- Diff vs upstream main: exactly the one-line `nginx` tag+digest change.
Tested green on the cc-ci recipe CI server (full suite, cold, against this PR head). NOT merged — for operator review.
cc @trav @notplants
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
custom-html recipe upgrade — nginx 1.31.6 → 1.31.7
DEFAULT mode (recipe PR only; existing cc-ci tests; no test changes).
Image tag table
1.31.6@sha256:908dc23e…1.31.7@sha256:6c3fee1d…(manifest-list digest re-pinned)v2.54.0latest@sha256:946fa261…latestpin, intentional)nginxis pinned tag+digest, soabra recipe upgradecannot bump it (it FATAs on "tag and digest … notsupported"); the new tag+digest was resolved and applied by hand, preserving the pin style.
Upstream release notes
Upstream release notes: app nginx 1.31.6→1.31.7: https://nginx.org/en/CHANGES
nginx 1.31.7 (14 Oct 2026) is a security patch release. Five security fixes:
aliaswhen the URI was changed byrewrite.client_max_body_size/ inject into proxied request).include virtual.Plus features (geoip MMDB support, backend SSL certificate verification by IP, QUIC reconfiguration +
binary upgrade with
quic_bpf), a change (HTTP/2 now uses RFC 9218 prioritisation; RFC 7540 signalsignored), and bugfixes.
Advisory scan
Deterministic scan (
cc-ci-plan/advisory-scan.py custom-html --from 1.31.6 --to 1.31.7 --image nginx=1.31.6:1.31.7):5 CVEs fixed by this upgrade — CVE-2026-15176, CVE-2026-93479, CVE-2026-95101, CVE-2026-97205,
CVE-2026-97629 — matching the release-note read exactly (union: 5). The 52 unclassified advisories are
historic nginx CVEs fixed at ≤1.31.6 (vendor CHANGES page only, no structured version window); an
--adjudicatepass confirmed none are newly fixed by this window. No scan source failed.Operator Action Required
None for the custom-html static-file-serving shape. The recipe serves static HTML from a volume on
port 80 behind traefik (HTTP/1.1+HTTP/2; no HTTP/3/QUIC listener, no AIO/SSI, no
rewrite+aliaspath mapping, no session-ticket-rotation config). No breaking config changes, no migrations, no
dependency bumps. Being a security release, upgrading promptly is warranted.
Version label
Intentionally not bumped by this PR (label stays
1.14.1+1.31.6); the operator's release applies it:(no
--dry-run; run after merge — this PR does not publish).Evidence
dev-custom-html.ci.commoninternet.net,--chaos): deploy succeeded🟢; service 1/1 running
nginx:1.31.7; clean startup logs (nginx/1.31.7);nginx -v=nginx/1.31.7; live HTTP 200 over HTTP/2 through traefik. Dev deploy torn down afterwards(0 leaked stacks / volumes).
abra recipe lint custom-html -C -n: all error-level rules pass; only pre-existing warnings(R002 healthcheck, R004/R005 from the floating-tag sftp overlay).
nginxtag+digest change.Tested green on the cc-ci recipe CI server (full suite, cold, against this PR head). NOT merged — for operator review.
cc @trav @notplants
!testme
🌻 cc-ci —
custom-html@29703757✅ passedfull logs · dashboard
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.