Skip to content

docs(ci): regroup CVE-2025-15366 from Group B to Group A — the imaplib backport landed on 3.14 - #100

Merged
tyler-rich merged 1 commit into
devfrom
claude/regroup-imaplib-cve-2025-15366
Jul 26, 2026
Merged

docs(ci): regroup CVE-2025-15366 from Group B to Group A — the imaplib backport landed on 3.14#100
tyler-rich merged 1 commit into
devfrom
claude/regroup-imaplib-cve-2025-15366

Conversation

@tyler-rich

@tyler-rich tyler-rich commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Summary

Group B's waiver rationale — upstream declined the backport to 3.10–3.14, so these are fixed only
in 3.15+
— is no longer true of CVE-2025-15366. The imaplib fix is on the 3.14 and 3.13
maintenance branches. It moves to Group A with the 3.14.7 trigger; Group B becomes CVE-2025-15367
(poplib) alone.

No CVE is un-waived. The list stays at four entries — three in Group A, one in Group B.

Configuration and documentation only.

Stacked on #99. This PR is based on claude/group-a-cve-waivers-3.14-uw1xh1, not dev,
because it edits the same Group A comment block #99 rewrites — a dev-based branch would either
conflict on merge or duplicate #99's diff. Retarget this PR to dev as soon as #99 merges,
per CLAUDE.md § Git & PR conventions. #99 itself is untouched.

Evidence

Checked at the source per CLAUDE.md § Dependency hygiene — Lib/imaplib.py and Lib/poplib.py
fetched from four refs and compared:

main 3.14 branch 3.13 branch v3.14.6
imaplib _control_chars guard yes yes yes no
poplib _putcmd() guard yes no no no

imaplib (CVE-2025-15366)3.14 defines _control_chars = re.compile(b'[\x00\r\n]') and
raises ValueError("NUL, CR and LF not allowed in commands") in IMAP4._command(). Upstream
gh-143921; 3.14 backport python/cpython#153137, commit 2981822, merged 2026-07-07; 3.13
backport python/cpython#153287, commit 71926d9. The NEWS entry
Misc/NEWS.d/next/Security/2026-01-16-11-41-06.gh-issue-143921.AeCOor.rst is present on 3.14/3.13
and 404s on v3.14.6 — still under next/, so it ships in 3.14.7 and has shipped in nothing.

poplib (CVE-2025-15367) — guard on main only; gh-143923 lists one PR (python/cpython#143924,
b234a2b, 2026-01-20) and no backport against any maintenance branch. Unchanged.

Why the companion fixes diverged. The original imaplib fix (python/cpython#143922) rejected
all control characters, and that breadth is what drew the regression concern behind the original
no-backport decision. python/cpython#153067 narrowed the check to NUL/CR/LF — other control
characters are legal in quoted strings and are sent quoted — and it is the narrowed version that
was backported. poplib's fix still rejects the full [\x00-\x1F\x7F] range with no equivalent
narrowing. They were never going to move together, despite the identical stated reasoning in our own
record.

On the 2026-07-25 §14 entry

Superseded for CVE-2025-15366 only, and left unedited. Its reading was correct and is not
retracted — it verified 3.14.6, and 3.14.6 genuinely lacks both guards; still true. What does
not survive is the generalisation drawn from it ("no 3.14.x point release will ever clear them").
The honest chronology: the imaplib backport merged 2026-07-07, 18 days before that entry was
written — the claim was already stale when recorded, not overtaken afterwards. The check read the
released tag and concluded something about the maintenance branch, which a tag cannot answer.

That is the narrow lesson, since "verify at the source" was already the rule and was followed:
a claim that a fix will never arrive on a line is a claim about the branch; only a claim about
what ships today can be settled from a tag.

What changed

ci/grype.yaml

  • CVE-2025-15366 moved into the Group A list; the imaplib backport added to Group A's
    source-verification block.
  • Group B rewritten for poplib alone, with its own source-verification lines, the divergence
    explanation, and CVE-2025-15367 (poplib) — accepted risk on any interpreter below 3.15 #52 as its tracker.
  • Group B's standing-acceptance framing, annual review date (2027-07-25), and the explicit
    "do not scope a 3.15 move as a reaction to this" instruction are carried over unchanged — the
    acceptance was not re-opened, only its membership.

docs/ARCHIVE.md

  • Dated §14 entry (2026-07-26) carrying the full evidence above.

Related

@tyler-rich
tyler-rich changed the base branch from claude/group-a-cve-waivers-3.14-uw1xh1 to dev July 26, 2026 04:51
…b backport landed on 3.14

Group B's rationale — upstream declined the backport to 3.10-3.14, so
these are fixed only in 3.15+ — is no longer true of CVE-2025-15366.
Lib/imaplib.py on the 3.14 and 3.13 branches carries the _control_chars
guard in IMAP4._command() (python/cpython#153137, commit 2981822, merged
2026-07-07); v3.14.6 does not, and the gh-143921 NEWS entry is still
under Misc/NEWS.d/next/Security. That is Group A shape: merged, unreleased,
closing on 3.14.7.

poplib is unchanged — its guard is on main only, and gh-143923 lists no
backport PR. The two diverged because imaplib's check was narrowed to
NUL/CR/LF (python/cpython#153067), clearing the regression concern behind
the original decline; poplib's still rejects the full control-character
range.

Group B keeps its standing-acceptance framing, its annual review date
(2027-07-25), and the do-not-scope-a-3.15-move instruction, now for
CVE-2025-15367 alone. The waiver list is unchanged at four entries.

The 2026-07-25 entry is superseded on this one point and left unedited;
its reading of 3.14.6 was correct, but the backport had already merged
18 days before it was written.

See docs/ARCHIVE.md § Deviations (2026-07-26) for the evidence.
@tyler-rich
tyler-rich force-pushed the claude/regroup-imaplib-cve-2025-15366 branch from 59fca9d to 0ea2d4f Compare July 26, 2026 04:56
@tyler-rich
tyler-rich merged commit 96264fb into dev Jul 26, 2026
4 checks passed
@tyler-rich
tyler-rich deleted the claude/regroup-imaplib-cve-2025-15366 branch July 31, 2026 04:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant