Skip to content

fix(deps): bump certifi to 2026.10.19 - #216

Merged
bryangingechen merged 1 commit into
masterfrom
fix/certifi-2026.10.19
Oct 20, 2026
Merged

bryangingechen merged 1 commit into
masterfrom
fix/certifi-2026.10.19

Conversation

@bryangingechen

Copy link
Copy Markdown
Contributor

Motivation

The private keys of eight eMudhra intermediate CAs have been compromised (https://emudhra.we-have-a-problem.com/). The intermediates chain to emSign ECC Root CA - G3, which is in Mozilla's root store and so in certifi's bundle. requests, and the Zulip client built on it, verify against that bundle, so the app would accept a certificate issued with those keys for any host it calls, such as GitHub's API or Zulip. The keys' holder would also need to be on the network path to use them.

What changes

  • uv.lock: certifi 2025.8.3 → 2026.10.19, which drops emSign ECC Root CA - G3. Nothing else changes. It was locked with uv 0.12.19, the version Dockerfile.production uses, so the lockfile's format revision stays at 3. A newer uv would raise it.

The image's system store, Debian trixie's ca-certificates, still trusts the compromised chains until Debian ships its update. Nothing in the app uses it. Its only HTTPS client is requests, which ignores the system store.

Testing

  • The production image built from master (certifi 2025.8.3): requests accepts https://dv-g3b-emudhra.we-have-a-problem.com/, one of the disclosure's test hosts.
  • The production image built from this branch: requests rejects both kinds of test host (dv-g3b-emudhra…, through emSign ECC Root CA - G3, and dv-g3b-aaa-emudhra…, through AAA Certificate Services), and still gets a 200 from https://api.github.com/.
  • The wheel's hash in uv.lock matches the certifi 2026.10.19 wheel tested offline against the disclosure's chains.

🤖 Generated with Claude Code

certifi 2026.10.19 drops emSign ECC Root CA - G3, which cross-signs
eMudhra intermediates whose private keys have been compromised
(https://emudhra.we-have-a-problem.com/). requests verifies against
certifi's bundle, so until now the app would accept a certificate
issued with those keys for any host it calls, such as GitHub's API or
Zulip.

Only certifi changes in uv.lock. It was locked with uv 0.12.19, the
version the production image uses, so the lockfile's format revision
stays as it was.

Tested in the production image built from this branch: requests
rejects the disclosure's test hosts, and still reaches api.github.com.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bryangingechen
bryangingechen merged commit f9f696d into master Oct 20, 2026
8 checks passed
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