Repository navigation
Stop trusting the compromised eMudhra intermediate CAs - #415
Merged
Merged
Conversation
|
🐳 Docker preview published: This mutable tag is only created when a Docker preview is explicitly requested. |
3 of 7 tasks
Contributor
Author
|
bugbot run |
David Larsen (dc-larsen)
approved these changes
Oct 21, 2026
Require Alpine ca-certificates 20261020-r0+ in the image, bump certifi to 2026.10.19, point Node at the system store with NODE_OPTIONS=--use-openssl-ca until Node ships its fix, and bump the bundled uv to 0.13.4.
lelia
force-pushed
the
lelia/emudhra-ca-trust
branch
from
October 21, 2026 19:48
c6f5cd9 to
2f456c6
Compare
|
🚀 CLI preview published: pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple socketsecurity==2.11.2.dev3966658374001TestPyPI's package index can take several minutes to expose a newly uploaded version. |
Alpine's nodejs package is still 24.18.1, which trusts the compromised eMudhra intermediates. node:24-alpine3.24 ships Node 24.22.1, which rejects them, so copy Node, npm, corepack and yarn from it and fail the build below 24.22.1. That makes the NODE_OPTIONS=--use-openssl-ca workaround and its entrypoint handling unnecessary, so drop both.
lelia
force-pushed
the
lelia/emudhra-ca-trust
branch
from
October 21, 2026 20:10
2f456c6 to
cbdcd0e
Compare
dockerfile-smoke only built the image on amd64 and ran nothing in it, so an arm64 break or a regression in the image's CA trust would first show up in release.yml. Build on native amd64 and arm64 runners, check the bundled tools run, and require curl, Node and Python requests to reject the eMudhra test hosts while still reaching api.socket.dev, npm and PyPI. Also run it when the entrypoint script changes.
Contributor
Author
|
bugbot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit f73c587. Configure here.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updates the Docker image so its TLS clients stop trusting the eMudhra intermediate CAs whose keys were disclosed on 2026-10-20 (details), and makes CI check that on both architectures. Ships in 2.11.2 with the Coana bump from #417. Companion to SocketDev/socket-basics#128.
Root Cause
The image's trust stores predate the distrust:
ca-certificatesfrom the base image (curl, git, Go, Java).apk adddoesn't upgrade packages the base image already has.nodejspackage, which is still 24.18.1 on every Alpine branch.requests). Already fixed on main by chore(deps): bump certifi from 2025.11.12 to 2026.10.19 #414.Fix
Dockerfile: upgradeca-certificatesand fail the build below20261020-r0.Dockerfile: copy Node, npm, corepack and yarn fromnode:24-alpine3.24instead ofapk add nodejs npm yarn, and fail the build below Node 24.22.1. Same major version as before, and Dependabot now tracks it. An earlier revision of this PR setNODE_OPTIONS=--use-openssl-cainstead; that's gone.Dockerfile: uv 0.13.4.dependency-review.yml:dockerfile-smokebuilds on native amd64 and arm64 runners (it was amd64 only, with no checks). It now checks that the bundled tools run, that curl, Node and Pythonrequestsreject the eMudhra test hosts with a certificate error, and that api.socket.dev, npm and PyPI still connect. It also runs whenscripts/docker-entrypoint.shchanges.CHANGELOG.md: adds this fix to the unreleased 2.11.2 entry.Alpine's
gopackage is still 1.26.9, so scanners will keep flagging it until Alpine updates. Its TLS uses the fixed system store.Testing
socketdev/cli:pr-415issocketdev/cli:latestplus this PR's wheel, so it doesn't include these Dockerfile changes. Instead:dockerfile-smokebuilds the realDockerfileon both architectures and runs the checks above. Againstsocketdev/cli:latest(2.11.1), the TLS check fails, as it should.nodejs/npm/yarn. A--reachscan of a small npm fixture (lodash 4.17.20 calling_.template) runs Coana 15.12.11, finds 5 vulnerabilities (2 reachable) and uploads the full scan.pytest(580 passed). The TestPyPI previewsocketsecurity==2.11.2.dev3966658374001installs in a clean venv.Public Changelog
The CLI and every tool in the
socketdev/cliDocker image now reject certificates issued from the compromised eMudhra intermediate CAs.Note
High Risk
Security-critical TLS trust-store and Node sourcing changes in the release image; incorrect pinning could break legitimate HTTPS or leave compromised CAs trusted.
Overview
Stops trusting compromised eMudhra intermediate CAs in the published Docker image and adds CI to prove TLS clients reject them on both release architectures.
The Dockerfile now forces
ca-certificates≥ 20261020-r0, copies Node 24.22.1+ (and npm/yarn) fromnode:24-alpineinstead of Alpine’s laggingnodejspackage, and bumps bundleduvto 0.13.4. CHANGELOG documents the 2.11.2 security fix (includingcertifinoted there).dependency-reviewexpandsdockerfile-smoke: native amd64/arm64 matrix, smoke checks for bundled tools, strict rejection of eMudhra test hosts via curl/Node/Python requests, and sanity curls to api.socket.dev, npm, and PyPI. The job also runs whenscripts/docker-entrypoint.shchanges.Reviewed by Cursor Bugbot for commit f73c587. Configure here.