Skip to content

Commit eedc519

Browse files
committed
Require certifi>=2026.10.19 and upgrade the image's pip
certifi only came in through requests, so pip installs of socketsecurity could keep a CA bundle that trusts the compromised eMudhra intermediates; only the Docker image's lockfile pinned it. Add a floor to the package's dependencies. The image's pip (26.2.1) uses its own vendored CA bundle and still trusted them. Upgrade it to 26.2.2 or newer against the fixed system store, and have dockerfile-smoke require pip to reject the test hosts too.
1 parent ce6f822 commit eedc519

4 files changed

Lines changed: 30 additions & 2 deletions

File tree

‎.github/workflows/dependency-review.yml‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -598,7 +598,8 @@ jobs:
598598
599599
# The eMudhra test hosts serve certificates from the compromised
600600
# intermediates. Require the specific rejection, not just any failure, so
601-
# a DNS or network error cannot pass as "rejected".
601+
# a DNS or network error cannot pass as "rejected". pip is checked on its
602+
# own because it uses its vendored CA bundle, not the system store.
602603
- name: Check TLS clients reject the compromised eMudhra intermediates
603604
run: |
604605
docker run --rm --entrypoint sh socket-python-cli:dependabot-smoke -c '
@@ -640,6 +641,14 @@ jobs:
640641
echo "::error::python requests on $host: $result"
641642
status=1
642643
fi
644+
if python -m pip download --no-deps --no-cache-dir --retries 0 --timeout 30 \
645+
--dest /tmp/pip-tls --index-url "https://$host/simple/" certifi 2>&1 \
646+
| grep -q CERTIFICATE_VERIFY_FAILED; then
647+
echo "pip rejects $host"
648+
else
649+
echo "::error::pip on $host did not fail certificate verification"
650+
status=1
651+
fi
643652
done
644653
for url in https://api.socket.dev/v0/ https://registry.npmjs.org/ https://pypi.org/simple/; do
645654
if curl -sS -m 30 -o /dev/null "$url"; then

‎CHANGELOG.md‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,18 @@
22

33
## 2.11.3
44

5+
### Fixed: finish rejecting the compromised eMudhra intermediate CAs
6+
7+
- `socketsecurity` now requires `certifi>=2026.10.19`. Previously only the
8+
Docker image's lockfile pinned it, so `pip install socketsecurity` could keep
9+
an older CA bundle that trusts the compromised intermediates.
10+
- The Docker image upgrades `pip` to `26.2.2` or newer. Earlier versions use
11+
their own vendored CA bundle, which still trusted them.
12+
513
### Changed: bump the Socket Python SDK to 3.6.1
614

7-
- Bumped the pinned Socket Python SDK (`socketdev`) from `3.6.0` to `3.6.1`.
15+
- Bumped the pinned Socket Python SDK (`socketdev`) from `3.6.0` to `3.6.1`,
16+
which also requires `certifi>=2026.10.19`.
817

918
## 2.11.2
1019

‎Dockerfile‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ RUN apk update && apk add --no-cache \
2828
apk upgrade --no-cache ca-certificates && \
2929
[ "$(apk version -t "$(apk list -I ca-certificates | awk '{print $1}' | sed 's/^ca-certificates-//')" 20261020-r0)" != "<" ]
3030

31+
# pip uses its own vendored CA bundle, not the system store, and the base image's
32+
# pip trusts the compromised eMudhra intermediates. 26.2.2 vendors certifi
33+
# 2026.10.19. Upgrade it against the system store fixed above.
34+
RUN python -m pip install --no-cache-dir --cert /etc/ssl/certs/ca-certificates.crt --upgrade "pip>=26.2.2" && \
35+
python -c 'import sys, pip; sys.exit(tuple(map(int, pip.__version__.split(".")[:3])) < (26, 2, 2))'
36+
3137
# npm, npx and yarn are symlinks in the node image. COPY would dereference them
3238
# into flat files and break their relative requires, so recreate the links.
3339
COPY --from=node /usr/local/bin/node /usr/local/bin/node

‎pyproject.toml‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ dependencies = [
2121
"markdown==3.11.1",
2222
"brotli==1.2.0; platform_python_implementation == 'CPython'",
2323
"brotlicffi==1.2.0.2; platform_python_implementation != 'CPython'",
24+
# requests' CA bundle. A floor rather than an exact pin, so later trust-store
25+
# fixes still reach installs; 2026.10.19 drops the roots behind the
26+
# compromised eMudhra intermediates.
27+
"certifi>=2026.10.19",
2428
]
2529
readme = "README.md"
2630
description = "Socket Security CLI for CI/CD"

0 commit comments

Comments
 (0)