Skip to content

Commit d381733

Browse files
committed
Stop trusting the compromised eMudhra intermediate CAs
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.
1 parent 52178cc commit d381733

5 files changed

Lines changed: 35 additions & 10 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
# Changelog
22

3+
## 2.11.2
4+
5+
### Fixed: stop trusting the compromised eMudhra intermediate CAs
6+
7+
- The private keys for eight eMudhra intermediate CAs leaked (disclosed
8+
2026-10-20). The Docker image now requires Alpine `ca-certificates`
9+
`20261020-r0` or newer, which removes the roots those intermediates chain to,
10+
so `curl`, `git`, Go and Java in the image reject them.
11+
- `certifi` moves from `2025.11.12` to `2026.10.19`, so Python `requests` (the
12+
CLI's own API calls) rejects them too.
13+
- The image sets `NODE_OPTIONS=--use-openssl-ca` so Node, including the
14+
reachability engine and the Socket npm CLI, uses the patched system store
15+
until Node ships its own fix.
16+
- Bumped the bundled `uv` from `0.10.4` to `0.13.4`, which ships the patched
17+
`webpki-roots`.
18+
319
## 2.11.1
420

521
### Changed: bump pinned Coana CLI to 15.12.10

‎Dockerfile‎

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,14 @@ ARG PIP_EXTRA_INDEX_URL=https://pypi.org/simple
1414
ARG USE_LOCAL_INSTALL=false
1515

1616
# Install base packages first
17+
# ca-certificates must be 20261020-r0 or newer, which drops the roots the
18+
# compromised eMudhra intermediates chain to. The base image ships an older
19+
# one, and `apk add` does not upgrade installed packages, so upgrade it here.
1720
RUN apk update && apk add --no-cache \
1821
git nodejs npm yarn curl wget \
19-
ruby ruby-dev build-base strace
22+
ruby ruby-dev build-base strace && \
23+
apk upgrade --no-cache ca-certificates && \
24+
[ "$(apk version -t "$(apk list -I ca-certificates | awk '{print $1}' | sed 's/^ca-certificates-//')" 20261020-r0)" != "<" ]
2025

2126
# Install Go with version control
2227
RUN if [ "$GO_VERSION" = "system" ]; then \
@@ -84,9 +89,13 @@ RUN npm install socket -g && \
8489
# Set environment paths
8590
ENV PATH="/usr/local/go/bin:/usr/lib/go/bin:/root/.cargo/bin:${PATH}"
8691
ENV GOPATH="/go"
92+
# Node's bundled CA store still trusts the compromised eMudhra intermediates and
93+
# no patched Node release exists yet. Use the system store, which ca-certificates
94+
# above already fixed. Drop this once Node ships its fix.
95+
ENV NODE_OPTIONS="--use-openssl-ca"
8796

88-
# Install uv
89-
COPY --from=ghcr.io/astral-sh/uv:0.10.4 /uv /usr/local/bin/uv
97+
# Install uv (0.13.4+ ships the patched webpki-roots)
98+
COPY --from=ghcr.io/astral-sh/uv:0.13.4 /uv /usr/local/bin/uv
9099

91100
# Install pyenv
92101
# pyenv lets us build/install arbitrary Python versions on demand. We install

‎pyproject.toml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ build-backend = "hatchling.build"
66

77
[project]
88
name = "socketsecurity"
9-
version = "2.11.1"
9+
version = "2.11.2"
1010
requires-python = ">= 3.11"
1111
license = {"file" = "LICENSE"}
1212
dependencies = [

‎socketsecurity/__init__.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
__author__ = 'socket.dev'
2-
__version__ = '2.11.1'
2+
__version__ = '2.11.2'
33
USER_AGENT = f'SocketPythonCLI/{__version__}'

‎uv.lock‎

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)