Skip to content

fix(deps): update Pillow, aiohttp, virtualenv, and certifi for security fixes - #542

Merged
arekay-nv merged 2 commits into
mlcommons:mainfrom
arekay-nv:fix/dependency-audit-2026-10
Oct 22, 2026
Merged

arekay-nv merged 2 commits into
mlcommons:mainfrom
arekay-nv:fix/dependency-audit-2026-10

Conversation

@arekay-nv

@arekay-nv arekay-nv commented Oct 21, 2026 •

Copy link
Copy Markdown
Collaborator

What does this PR do?

Fixes the audit job failure seen on #541. pip-audit reports 38 new advisories
against packages that main already locks, so every PR's audit job will fail
until they are fixed:

Package Previous Updated How it's pulled in Advisories
Pillow 12.3.0 13.0.0 Direct runtime pin 24 CVEs, all fixed in 13.0.0
aiohttp 3.14.3 3.14.5 Direct test pin, plus fsspec / dashscope 7 CVEs, 1 GHSA (fixed in 3.14.4)
virtualenv 21.7.13 21.14.9 Direct dev pin, plus pre-commit 5 CVEs (highest fix version 21.14.9)
certifi 2026.2.25 2026.10.19 Transitive (httpx, requests) PYSEC-2026-4320

Original failure: https://github.com/mlcommons/endpoints/actions/runs/39682718501/job/119508967427

Changes

  • pyproject.toml:
    • bumps the three direct pins;
    • pins certifi==2026.10.19 in [project].dependencies, as anyio is. A
      [tool.uv] constraint-dependencies floor would only apply to uv, so
      pip install . could keep a vulnerable certifi that is already installed.
  • uv.lock: relocked with explicit upgrades. The only version changes are the
    four packages above plus transitive distlib 0.4.0 → 0.4.4, packaging
    26.0 → 26.3, and yarl 1.23.0 → 1.25.1. No packages are added or removed.

aiohttp is pinned to 3.14.5 rather than the minimum fixed version, 3.14.4. With
3.14.4, the conflicting bfcl fork resolves to 3.14.5 while the main fork
stays on 3.14.4, so the lock carries both versions. Pinning 3.14.5 keeps one
version across both forks.

Pillow 13 (major version)

The only direct use in this repo is image.format and
image.save(BytesIO, format=...) in
dataset_manager/predefined/shopify_product_catalogue/. Both are core API
that this major bump doesn't affect. matplotlib 3.10.8 accepts Pillow 13.

Type of change

  • Bug fix

Testing

  • Synced the same extras as the CI audit job, then ran
    uv run pip-audit --ignore-vuln PYSEC-2026-3740: no known
    vulnerabilities, one existing ignore (Remove pip-audit ignore for nltk PYSEC-2026-3740 once a fixed release ships #520).
  • uv pip check: all installed packages compatible.
  • uv lock --check with local uv 0.12.10 and with the latest uv, 0.13.4.
  • Compared locked versions with main: only the seven listed changes;
    235 packages before and after.
  • pytest -m "not slow and not performance" on macOS: the failing tests
    are the same set as on unmodified main (macOS-only Linux CPU-affinity,
    /proc, and IPC socket-path tests). No new failures.
  • Pre-commit hooks pass on the changed files.

Checklist

  • Code follows project style
  • Pre-commit hooks pass

🤖 Generated with Claude Code

…ty fixes

pip-audit now reports 38 advisories against locked versions on main:

- Pillow 12.3.0 -> 13.0.0 (24 CVEs)
- aiohttp 3.14.3 -> 3.14.5 (7 CVEs, 1 GHSA)
- virtualenv 21.7.13 -> 21.14.9 (5 CVEs)
- certifi 2026.2.25 -> 2026.10.19 (PYSEC-2026-4320)

Bump the three direct pins and add a certifi floor to the existing uv
constraint-dependencies. aiohttp is pinned to 3.14.5 so the bfcl
resolution fork lands on the same version instead of splitting.
The relock also moves transitive distlib, packaging, and yarl.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@arekay-nv
arekay-nv requested a review from a team October 21, 2026 22:10
@github-actions

Copy link
Copy Markdown

MLCommons CLA bot All contributors have signed the MLCommons CLA ✍️ ✅

@github-actions github-actions Bot added the size/normal PR Review Policy: <=500 non-test lines & <=20 files label Oct 21, 2026
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
⚠️ Please upload report for BASE (main@d3c57f2). Learn more about missing BASE report.

Additional details and impacted files
@@           Coverage Diff           @@
##             main     #542   +/-   ##
=======================================
  Coverage        ?   81.37%           
=======================================
  Files           ?      157           
  Lines           ?    22472           
  Branches        ?        0           
=======================================
  Hits            ?    18286           
  Misses          ?     4186           
  Partials        ?        0           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@arekay-nv
arekay-nv requested a review from nv-alicheng October 21, 2026 23:17

@viraatc viraatc left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. The isolated environments still ship the vulnerable versions. evaluation/swebench_service pins aiohttp==3.14.1 (lock also has certifi 2026.6.17, virtualenv 21.6.1), evaluation/legacy_mlperf_deepseek_r1/uv.lock has aiohttp 3.14.0 / certifi 2026.5.20, and examples/09_Wan22_VideoGen_Example/accuracy/uv.lock has Pillow 12.2.0 / certifi 2026.5.20. The swebench service is the one network-facing aiohttp server here, and the audit job only syncs the root env, so CI can't see these. Could you re-lock those three with the same floors (or a tracked follow-up) and add a per-subproject pip-audit?
  2. The certifi floor is only in [tool.uv].constraint-dependencies, so pip install . can keep 2026.2.25 (e.g. the OpenOrca downloader fetches and runs a script via requests). Pinning it in [project].dependencies like anyio (pyproject.toml:110-113) would cover pip installs too.

[tool.uv] constraint-dependencies only apply to uv, so `pip install .`
could keep a vulnerable certifi. Pin it in [project].dependencies, as anyio
is, and drop the now-redundant uv floor.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@arekay-nv

Copy link
Copy Markdown
Collaborator Author

@viraatc

  1. Subprojects: confirmed, and the exposure is wider than these four
    packages. Auditing each exported lock finds 69 advisories in
    swebench_service (aiohttp, gitpython, litellm, urllib3, …), 40 in
    legacy_mlperf_deepseek_r1, and 120 in the VBench example. VBench can't
    pass as-is because it requires transformers==4.33.2, and imgaug has no
    fixed release. That turns the per-subproject audit job into a policy
    decision too, so I've tracked it separately in Audit and relock isolated uv subprojects (swebench_service, legacy DSR1, VBench) #543: relock the two fixable
    subprojects with swebench_service first, then add a per-subproject audit
    job. This PR stays scoped to unblocking the root audit job.
  2. certifi: fixed in bd33855. It's now pinned certifi==2026.10.19 in
    [project].dependencies next to anyio, and the uv-only floor is gone. The
    built metadata now carries Requires-Dist: certifi==2026.10.19, so pip
    upgrades an environment that already has 2026.2.25. pip-audit is still
    clean, and uv lock --check passes.

@arekay-nv
arekay-nv merged commit 93ec321 into mlcommons:main Oct 22, 2026
9 checks passed
@arekay-nv
arekay-nv deleted the fix/dependency-audit-2026-10 branch October 22, 2026 18:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/normal PR Review Policy: <=500 non-test lines & <=20 files

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants