security: resolve Aikido findings (cryptography, aiohttp, Actions pinning, checkout creds) - #28
Conversation
…ning, checkout creds) Dependencies - cryptography: floor 42.0 -> 50.0.1 in sql-mssql / sql / all extras. Clears GHSA-537c-gmf6-5ccf (vulnerable OpenSSL in wheels, OOB read), GHSA-g6cj-pr64-35w5, GHSA-jwv3-5hgf-82ww, GHSA-m2h6-j472-rp4c. - aiohttp: add explicit floor >=3.14.3 to aws / all extras (transitive via aiobotocore, which allows <4). Clears GHSA-mfx4-hv73-q22v (request smuggling via WebSocket upgrade), GHSA-cq5v-8q36-5273 and 12 others. - uv.lock regenerated: aiohttp 3.13.5 -> 3.14.3, cryptography 46.0.7 -> 50.0.1, msal 1.36.0 -> 1.38.0 (pulled by the cryptography bump). GitHub Actions - Pin every third-party action to a full commit SHA (version in trailing comment): actions/checkout v4.4.0, astral-sh/setup-uv v10.0.1, pypa/gh-action-pypi-publish v1.14.2, softprops/action-gh-release v3.0.3. - actions/checkout: persist-credentials: false on all 5 uses so GITHUB_TOKEN is not written into .git/config. No step in these workflows pushes via git; PyPI uses OIDC, gh-release uses the action's own token input. Verified: uv sync --extra dev && pytest tests/ --ignore=tests/integration -> 275 passed, 3 skipped.
|
shreyas-lyzr
left a comment
There was a problem hiding this comment.
Clean security patch — nothing blocking found after a full review.
Dependency bumps are correct: cryptography 50.0.1 and aiohttp 3.14.3 carry no known CVEs (OSV confirmed), and the floors are set in all relevant extras (sql-mssql, sql, all for cryptography; aws, all for aiohttp). The uv.lock hashes match PyPI. The msal bump to 1.38.0 is a natural pull from the cryptography version change and is also clean.
All five GitHub Actions are pinned to commit SHAs, and I verified each one against the upstream tags:
- actions/checkout@11d5960... matches v4.4.0 (confirmed via GitHub refs API)
- astral-sh/setup-uv@20cfd1b... matches v10.0.1 (confirmed)
- pypa/gh-action-pypi-publish@dc37677... matches the dereferenced commit for v1.14.2 (annotated tag resolves correctly)
- softprops/action-gh-release@efb3536... matches the dereferenced commit for v3.0.3 (annotated tag resolves correctly)
All five checkout steps have persist-credentials: false applied. The workflows use OIDC for PyPI publish and an explicit token for the release action, so no git-based push path is affected.
Version bump to 0.2.12 is appropriate to ship these floors to PyPI consumers.
Security pass: no new CVEs in bumped packages, no hard-coded secrets, no injection or authz changes — this is purely a supply-chain hygiene PR.



Resolves the four open Aikido findings on
cloudrift.cryptography— out-of-bounds read can expose sensitive info>=42.0→>=50.0.1insql-mssql/sql/allextras. Clears GHSA-537c-gmf6-5ccf (vulnerable OpenSSL in wheels), GHSA-g6cj-pr64-35w5, GHSA-jwv3-5hgf-82ww, GHSA-m2h6-j472-rp4c.ci.yml,develop.yml,release.yml)actions/checkoutv4.4.0,astral-sh/setup-uvv10.0.1,pypa/gh-action-pypi-publishv1.14.2,softprops/action-gh-releasev3.0.3.aiohttp— HTTP request smuggling attack possibleaiohttp>=3.14.3added toaws/allextras (it's transitive viaaiobotocore, which only requires<4). Clears GHSA-mfx4-hv73-q22v (smuggling via WebSocket upgrade), GHSA-cq5v-8q36-5273 and 12 further advisories.actions/checkoutmay exposeGITHUB_TOKENvia git configpersist-credentials: falseon all 5 checkout steps. Nothing in these workflows pushes via git — PyPI publishing is OIDC,gh-releaseuses its own token input — so no behaviour change.uv.lockregenerated:aiohttp 3.13.5 → 3.14.3,cryptography 46.0.7 → 50.0.1,msal 1.36.0 → 1.38.0(pulled by the cryptography bump). No other packages changed.Verification
Workflow YAML validated;
cloudrift,cryptography,aiohttpimport cleanly under Python 3.11.Note on
astral-sh/setup-uvv5 → v10.0.1: several majors, but the only input used (python-version) is unchanged. Pinning to the current release rather than an old v5 SHA means the SHA won't itself become an Aikido "outdated action" finding next scan.Release: bumps
versionto0.2.12so the fixed floors ship to PyPI. Tagv0.2.12after merge to triggerrelease.yml.