Skip to content

ci: publish with a pip that excludes the compromised eMudhra/emSign CA - #6161

Open
mday-io wants to merge 1 commit into
SQLMesh:mainfrom
mday-io:claude/sqlmesh-security-review-hignxb
Open

mday-io wants to merge 1 commit into
SQLMesh:mainfrom
mday-io:claude/sqlmesh-security-review-hignxb

Conversation

@mday-io

@mday-io mday-io commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Description

Hardens the release publish job in response to the eMudhra / emSign CA certificate incident (see the PSF's "Information for Python users regarding eMudhra / emSign CA certificate security incident" post on discuss.python.org). The compromised root was removed in certifi 2026.10.19 and pip 26.2.2. pip vendors its own CA bundle, so the pip that ships with an older Python keeps trusting the root until pip itself is upgraded.

The publish job ran on Python 3.10, whose bundled pip predates the fix. That pip installs build and twine, the make package / make publish installs (pip3, since UV isn't set), and python -m build's isolated setuptools environment. All of this runs in a job that holds the PyPI and private-index credentials.

Changes:

  • python-version: '3.10' → '3.13'. 3.13.17 is available in setup-python's version list and bundles pip 26.2.2+. Changing the interpreter avoids upgrading pip through the vulnerable pip.
  • A new step fails the job if pip is older than 26.2.2, so we never publish with an unfixed pip.

User impact: none. The interpreter only runs build/twine. The package is pure Python and requires-python stays >=3.9.

Test Plan

  • Built the package on Python 3.13 (pyproject-build): it produces the sdist and sqlmesh-…-py3-none-any.whl with Requires-Python: >=3.9.
  • Built the wheel from the same commit on 3.10 and compared. Same file list, byte-identical contents (excluding RECORD), same version.
  • Checked the version gate: it passes pip 26.2.2 and 26.10 and fails 26.2.1 and 25.3.
  • Checked that the workflow YAML parses.
  • Not yet exercised end to end. The first real run is the next release tag.

Checklist

  • I have run make style and fixed any issues (workflow YAML only)
  • I have added tests for my changes (if applicable) (N/A, CI config)
  • All existing tests pass (make fast-test) (no Python changes)
  • My commits are signed off (git commit -s) per the DCO

Follow-up worth considering separately: switch publishing to PyPI Trusted Publishing so the job holds no long-lived PyPI password.

The publish job ran on Python 3.10, whose bundled pip still trusts the
compromised eMudhra/emSign root. Build and upload on Python 3.13, whose
latest patch bundles pip 26.2.2+, and fail the job if pip is older.

Signed-off-by: mday-io <[email protected]>
@mday-io
mday-io force-pushed the claude/sqlmesh-security-review-hignxb branch from 64a6bc0 to 3ea4856 Compare October 23, 2026 05:06
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