github permitio/opal 0.9.10-rc.2

pre-release4 hours ago

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-common floors certifi>=2026.10.19, and every image upgrades ca-certificates (Debian 20250419~deb12u2, Alpine 20261020-r0). In 0.9.9, the clients' HTTP fetchers, the websocket to the server, the inline OPA's http.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.py so 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.1 and gitpython>=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 with allow_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

Don't miss a new opal release

NewReleases is sending notifications on new releases.