fix: patch 18 of 24 CVEs in pdp-v2 image (PER-15358)#318
Conversation
…PER-15358) Docker Scout flagged cryptography 46.0.7 (1 High) in the pdp-v2 image. Bump the pin from >=46.0.5,<47 to >=48.0.1,<49; resolves cleanly against the rest of the tree (fastapi 0.125.0, opal 0.9.6). Also documents that the two starlette High CVEs (CVE-2026-54283, CVE-2026-48818; fixed in starlette 1.1.0/1.3.1) are blocked upstream: opal-common/opal-client 0.9.6 (latest) hard-cap starlette<1. The 18 Go CVEs (all Criticals) are fixed in permit-opa#38. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CI pytests started failing with: TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer' aiohttp 3.14 made stream_writer a required kwarg of ClientResponse.__init__, which the latest released aioresponses (0.7.9) does not pass. aiohttp/ aioresponses are unpinned so CI installs the latest, and this surfaced once aiohttp 3.14 shipped -- unrelated to this PR's dependency bumps. We stay on aiohttp 3.14.x on purpose: the June 2026 aiohttp security fixes landed in 3.14 and were not backported to 3.13.x, so pinning aiohttp down to satisfy aioresponses would reintroduce those CVEs into the image. Instead add a test-only conftest shim (mirrors upstream aioresponses PR #288, unreleased) that injects a dummy stream_writer. No-op on aiohttp < 3.14. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🔍 Vulnerabilities of
|
| digest | sha256:8a1789e5fc945658085d2d7db4dbda72dcca314c5f1ec4d41e23eefad8801845 |
| vulnerabilities | |
| platform | linux/amd64 |
| size | 218 MB |
| packages | 250 |
📦 Base Image python:3.10-alpine3.22
| also known as |
|
| digest | sha256:c8f94b3bb77e6ea9015ccd091b7f8aec1b1fcbca95159675235d9a93788797cd |
| vulnerabilities |
Description
Description
Description
Description
Description
Description
Description
Description
Description
Description
Description
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
Description
Description
Description
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
Description
Description
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
Description
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
Description
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
|
🔍 Vulnerabilities of
|
| digest | sha256:8a1789e5fc945658085d2d7db4dbda72dcca314c5f1ec4d41e23eefad8801845 |
| vulnerabilities | |
| platform | linux/amd64 |
| size | 218 MB |
| packages | 250 |
📦 Base Image python:3.10-alpine3.22
| also known as |
|
| digest | sha256:c8f94b3bb77e6ea9015ccd091b7f8aec1b1fcbca95159675235d9a93788797cd |
| vulnerabilities |
Description
Description
Description
Description
Description
Description
Description
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
Description
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description
|
Closes PER-15358.
Docker Scout flagged 24 CVEs (8 Critical, 16 High) on
permitio/pdp-v2:next, across two repos. This PR is the PDP half; the Go half is permitio/permit-opa#38 (the OPA binary is compiled frompermit-opa@main, so that PR must merge for the image to pick up the Go fixes).This PR (PDP)
cryptography>=46.0.5,<47→>=48.0.1,<49— patches GHSA-537c-gmf6-5ccf (1 High). Resolves cleanly (fastapi 0.125.0, opal 0.9.6).starletteHigh CVEs are upstream-blocked:opal-common/opal-client0.9.6 (latest) hard-capstarlette<1, while the fixes are only in starlette 1.1.0/1.3.1.Companion PR (permit-opa#38) — 16 High/Critical
x/crypto0.49→0.53,x/net0.52→0.55,containerd/v22.2.2→2.2.5,oras-go/v22.6.0→2.6.1,otel1.42→1.43.Verification
Built the image locally (
linux/arm64) with the updated OPA tarball and confirmed the patched versions are baked into the shipped artifact:x/cryptox/netcontainerd/v2oras-go/v2otel/sdkcryptographyOutcome: 18 of 24 fixed (8 Critical + 10 High)
Remaining 6 High are all upstream-blocked — no fix available:
sqlite-libs3.49.2-r1 (3 High) — no upstream patch;apk del sqlitecan't remove it (pulled in by Python's_sqlite3). Needs a base-image bump when Alpine patches.oras-go/v2path-traversal CVE-2026-50163 (1 High) — no fix yet.starletteCVE-2026-54283 / CVE-2026-48818 (2 High) — blocked by OPAL'sstarlette<1cap.Note (unrelated, pre-existing)
pytestcurrently shows 34 failures on both this branch and cleanmain(identical), caused byaioresponses 0.7.9being incompatible withaiohttp 3.14.1(ClientResponse ... missing 'stream_writer'). Not caused by this change; worth a separate fix (pinaiohttp<3.14or updateaioresponses).🤖 Generated with Claude Code