Skip to content

Commit b172ca0

Browse files
authored
Require certifi>=2026.10.19, upgrade the image's pip, and pin SDK to v3.6.1 (#418)
* Bump the Socket Python SDK to 3.6.1 uv.lock still resolves socketdev 3.6.0: relock with `uv lock --upgrade-package socketdev` once 3.6.1 is on PyPI. * 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. * Lock socketdev 3.6.1
1 parent ff84ba8 commit b172ca0

6 files changed

Lines changed: 46 additions & 9 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: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
# Changelog
22

3+
## 2.11.3
4+
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+
13+
### Changed: bump the Socket Python SDK to 3.6.1
14+
15+
- Bumped the pinned Socket Python SDK (`socketdev`) from `3.6.0` to `3.6.1`,
16+
which also requires `certifi>=2026.10.19`.
17+
318
## 2.11.2
419

520
### Fixed: stop trusting the compromised eMudhra intermediate CAs

‎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: 6 additions & 2 deletions
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.2"
9+
version = "2.11.3"
1010
requires-python = ">= 3.11"
1111
license = {"file" = "LICENSE"}
1212
dependencies = [
@@ -16,11 +16,15 @@ dependencies = [
1616
"gitpython==3.2.0",
1717
"packaging==26.3",
1818
"python-dotenv==1.2.4",
19-
"socketdev==3.6.0",
19+
"socketdev==3.6.1",
2020
"beautifulsoup4==4.15.0",
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"

‎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.2'
2+
__version__ = '2.11.3'
33
USER_AGENT = f'SocketPythonCLI/{__version__}'

‎uv.lock‎

Lines changed: 8 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)