Release candidate for a 0.9.10 patch release on the 0.9 line (pydantic v1), built from release/0.9.x. Docker :latest stays on 0.9.9 until 0.9.10 ships.
What's Changed
- PER-17672, PER-17729: fix: backport the eMudhra CA distrust and PyJWT/GitPython floors to 0.9.x (#974, #976) by @EliMoshkovich in #978
Highlights since 0.9.10-rc.1:
- Compromised eMudhra CAs are no longer trusted (CVE-2026-111943). The private keys of eight eMudhra intermediate CAs can be recovered from their public certificates, so anyone can mint a certificate those CAs' roots vouch for.
opal-commonfloorscertifi>=2026.10.19, and every image upgradesca-certificates(Debian20250419~deb12u2, Alpine20261020-r0). In 0.9.9, the clients' HTTP fetchers, the websocket to the server, the inline OPA'shttp.send, and the server's policy-repo clone (pygit2 and git) all accept a forged certificate from those CAs. This release rejects it in every one. - Build-time trust-store check: the image build fails if
certifi's bundle or the system store still holds any of the compromised keys, and the check ships at/opal/check_trust_store.pyso a built image can be re-checked:docker run --entrypoint python <image> /opal/check_trust_store.py. - PyJWT and GitPython floors:
pyjwt[crypto]>=2.15.1andgitpython>=3.2.1, past the advisories published against the versions in 0.9.9 (PyJWT 2.13.0: 14, incl. 1 critical; GitPython 3.1.60 and its own repository advisories fixed in 3.2.0 and 3.2.1). - Test certificate fixtures are kept out of the images.
Visible to consumers:
- a JWT whose signature segment is non-canonical base64url (unused trailing bits set) is rejected with 401, or 403 on the websocket (GHSA-hxm8-2xgr-2p9m). PyJWT and other conforming issuers never produce one. A signature with trailing
=padding is still accepted; - GitPython 3.2 refuses option-shaped remote names and refspecs (
-...) even withallow_unsafe_options=True. OPAL passes none; downstream code calling GitPython directly could.
Python support is unchanged: opal-common and opal-client install on 3.9–3.13, and opal-server on 3.9–3.12.
The same changes are on master (0.10 line) in #974 and #976.
Full Changelog: 0.9.10-rc.1...0.9.10-rc.2