---
id: pytest-tmpdir-cve-blocked-by-py39-floor
board: code
section: pipeline
status: planned
category: Supply chain
complexity: M
impact: Low
wow: 2
note: dismissed as tolerable risk, 2026-07-25
order: 12
owner:
pr:
title: The <code>pytest</code> tmpdir CVE has no fix at our Python floor
---
CVE-2025-71176 — pytest through 9.0.2 relies on the predictable
<code>/tmp/pytest-of-{user}</code> path, letting a <b>local</b> user cause a denial of
service or possibly gain privileges. Dependabot alert #1 (medium), raised against
<code>requirements/test-tools.txt</code>.
It cannot be closed by a version bump. The lock carries <b>two markered pins</b>, and only
one of them is exposed: <code>pytest==9.1.1 ; python_full_version &ge; '3.10'</code> is
already past the 9.0.3 patch, while
<code>pytest==8.4.2 ; python_full_version &lt; '3.10'</code> is not — and cannot be, because
pytest 9.x declares <code>requires-python &ge;3.10</code> while this project declares
<code>requires-python = "&gt;=3.9"</code>. The advisory marks <b>every</b> 8.x release
vulnerable, so there is no backport to move to either. The fix is gated on dropping the 3.9
floor, which is a deliberate compatibility promise, not an oversight.
Residual exposure is contributor-facing only: <code>test-tools.txt</code> is the dev/CI
toolchain and <code>[project].dependencies</code> is empty, so nobody installing
<code>boost-skill-cli</code> ever receives pytest, and CI runners are single-tenant
ephemeral VMs where the local-attacker precondition does not hold. <b>Dismissed as
<code>tolerable_risk</code></b> rather than left open to rot the alert list.
Revisit when either the 3.9 floor is dropped or a patched 8.x lands. If the floor must stay
and the alert must clear, the real mitigation is pointing pytest at a private base
temp dir (<code>--basetemp</code> / <code>PYTEST_DEBUG_TEMPROOT</code>) so the predictable
path is never used — that fixes the behaviour without satisfying Dependabot's version check.
