Dependency security audit — 2026-10-29¶
This audit covers the 51 open Dependabot alerts captured on 2026-10-29 for
Sandloom at 30cd55f.
The snapshot contains 8 critical, 26 high and 17 medium alerts: 41 Pillow,
7 Authlib, 2 certifi and 1 virtualenv. The certifi advisory occurs in two
manifests; alert count is not a count of distinct vulnerabilities or confirmed
exploitable Sandloom paths. Severity and affected ranges below preserve that
snapshot; upstream advisory records can change.
Remediation targets¶
| Package | Affected manifest at the audited commit | Before | First patched / selected version |
|---|---|---|---|
| Pillow | benchmarks/ladder/cg/requirements.txt |
12.3.0 |
13.0.0 / 13.0.0 |
| Authlib | benchmarks/ladder/cg/requirements.txt |
1.8.0 |
1.9.0 for six alerts; 1.9.1 for #49 / 1.9.1 |
| certifi | benchmarks/ladder/cg/requirements.txt; benchmarks/uv.lock |
2026.7.22 |
2026.10.18 / 2026.10.19 |
| virtualenv | uv.lock |
21.14.12 |
21.14.13 / at least 21.14.13 |
The callgrind harness export belongs to Sandloom's benchmark environment. Its
Pillow/Authlib pins had drifted from benchmarks/uv.lock, which already selected
Pillow 13.0.0 and Authlib 1.9.1. Regenerate the export from the corrected
benchmark lock rather than maintain another independent version list.
The main lock already selected Pillow 13.0.0, Authlib 1.9.1 and certifi
2026.10.19. The identity distribution already required pillow>=13.0.0,<14,
so no additional core Pillow upgrade is needed. Its authlib>=1.8.0,<2
requirement still permitted vulnerable fresh resolutions and needs a
>=1.9.1,<2 floor. Core already requires certifi>=2026.10.19.
These are findings from the committed identity metadata,
core metadata,
main lock
and benchmark lock.
Select certifi 2026.10.19 rather than stop at the first patched release:
2026.10.18 removed all emSign roots, while 2026.10.19 restored unaffected
roots. The reviewed advisory
recommends 2026.10.19 or later and rebuilding images that vendor the bundle.
Compatibility review¶
Official release metadata declares Python >=3.11 for
Pillow 13.0.0, >=3.10 for
Authlib 1.9.1, >=3.7 for
certifi 2026.10.19, and >=3.9
for virtualenv 21.14.13.
All fit Sandloom's Python >=3.11 and the benchmark environment's >=3.12.
This checks interpreter eligibility, not runtime compatibility by itself.
- Pillow: version 13 drops Python 3.10 and removes direct
I-mode PNG saving andfromarray(mode=...)dtype conversion. The reviewed Sandloom QR utility and 2FA service generate a QR image throughqrcodeand save PNG; neither directly calls those removed APIs. Keep QR generation in compatibility checks. Pillow release notes - Authlib:
1.9.1rejects empty HMAC keys and requiresjoserfc>=1.6.8. The1.9series also tightens nonce validation, JAR URI retrieval and JWT bearer audiences; RFC 7592 token implementations needcheck_client(). Review any application-provided integration that relies on those behaviors; do not weaken the new validation to recover compatibility. Authlib changelog - virtualenv:
21.14.13fixes generated shell activator prompt escaping. It is development tooling through pre-commit in the main lock, not a Sandloom request handler. Verify the locked tool environment as well as the application tests. virtualenv release history
The Authlib empty-HMAC upstream report still contains older affected-version
text; the reviewed advisory's structured fields
and the official 1.9.1 changelog agree on the patched release. The ledger uses
those patched-version fields rather than the stale narrative.
Complete alert ledger¶
Every captured alert is listed once. Ranges and minimum fixes come from the
Dependabot snapshot's security_vulnerability fields; each GHSA links to its
public advisory. Package names are case-normalized for grouping.
Pillow — 41 alerts¶
Manifest: benchmarks/ladder/cg/requirements.txt. Selected version: 13.0.0.
| Alert | Advisory | Affected range | Minimum fix |
|---|---|---|---|
| #1 | GHSA-8g5g-8vmr-9782 | <= 12.3.0 |
13.0.0 |
| #2 | GHSA-c6hw-5grf-ff96 | >= 8.1.0, < 13.0.0 |
13.0.0 |
| #3 | GHSA-462x-pgg6-55fp | >= 8.2.0, < 13.0.0 |
13.0.0 |
| #4 | GHSA-p4wg-p73j-c528 | >= 5.1.0, < 13.0.0 |
13.0.0 |
| #5 | GHSA-pchr-8j38-3x4p | <= 12.3.0 |
13.0.0 |
| #6 | GHSA-q45j-58j2-45rg | >= 5.3.0, < 13.0.0 |
13.0.0 |
| #7 | GHSA-vx6w-vv9f-6gvg | >= 2.3.0, <= 12.3.0 |
13.0.0 |
| #8 | GHSA-65qm-jvmh-6pqg | >= 9.2.0, < 13.0.0 |
13.0.0 |
| #9 | GHSA-58r4-6rv3-gfh8 | <= 12.3.0 |
13.0.0 |
| #10 | GHSA-w889-685w-c8fh | >= 2.6.0, < 13.0.0 |
13.0.0 |
| #11 | GHSA-4558-3h8r-v8xp | <= 12.3.0 |
13.0.0 |
| #12 | GHSA-7mwm-ghpf-9vrm | <= 12.3.0 |
13.0.0 |
| #13 | GHSA-j4m9-6w36-pw47 | >= 10.0.0, < 13.0.0 |
13.0.0 |
| #14 | GHSA-cp9v-662q-vvx9 | >= 12.0.0, < 13.0.0 |
13.0.0 |
| #15 | GHSA-27h8-gf7j-v5hc | <= 12.3.0 |
13.0.0 |
| #16 | GHSA-fc9g-5qg7-mf45 | >= 9.2.0, < 13.0.0 |
13.0.0 |
| #17 | GHSA-22hg-r758-rrw9 | >= 7.2.0, < 13.0.0 |
13.0.0 |
| #18 | GHSA-74r2-7ff9-mjj2 | >= 5.4.0, < 13.0.0 |
13.0.0 |
| #19 | GHSA-rfgq-q3w2-pmv2 | >= 9.1.0, < 13.0.0 |
13.0.0 |
| #20 | GHSA-xgh8-jp6q-p5x8 | <= 12.3.0 |
13.0.0 |
| #21 | GHSA-254f-3936-288h | >= 5.1.0, < 13.0.0 |
13.0.0 |
| #22 | GHSA-jg86-v3jv-hrpm | >= 5.1.0, < 13.0.0 |
13.0.0 |
| #23 | GHSA-gg2r-wvfm-q9rx | >= 4.1.0, < 13.0.0 |
13.0.0 |
| #24 | GHSA-5xm2-6676-qcp9 | >= 8.1.0, < 13.0.0 |
13.0.0 |
| #25 | GHSA-f2g6-542v-9j58 | >= 5.1.0, < 13.0.0 |
13.0.0 |
| #26 | GHSA-4rr5-89j8-mwwm | >= 11.3.0, < 13.0.0 |
13.0.0 |
| #27 | GHSA-332p-7hrc-92wf | >= 2.0.0, < 13.0.0 |
13.0.0 |
| #28 | GHSA-xvh5-g6gv-559v | <= 12.3.0 |
13.0.0 |
| #29 | GHSA-p8hx-v2p6-rp84 | < 13.0.0 |
13.0.0 |
| #30 | GHSA-g842-9rc4-69pw | < 13.0.0 |
13.0.0 |
| #31 | GHSA-24rc-8hj2-v98c | >= 9.1.0, < 13.0.0 |
13.0.0 |
| #32 | GHSA-v9pv-5gc8-w2m6 | >= 11.0.0, < 13.0.0 |
13.0.0 |
| #33 | GHSA-mrfp-p49p-3hf2 | >= 5.1.0, < 13.0.0 |
13.0.0 |
| #34 | GHSA-4rm8-3hmm-39fg | < 13.0.0 |
13.0.0 |
| #35 | GHSA-3j72-p6qg-6xp7 | < 13.0.0 |
13.0.0 |
| #36 | GHSA-g4qv-2jxx-769h | >= 11.0.0, < 13.0.0 |
13.0.0 |
| #37 | GHSA-9v9v-9qvf-h2hj | < 13.0.0 |
13.0.0 |
| #38 | GHSA-g7cr-3p24-7wf7 | >= 9.4.0, < 13.0.0 |
13.0.0 |
| #39 | GHSA-78g4-xqwv-q3g8 | >= 11.1.0, < 13.0.0 |
13.0.0 |
| #40 | GHSA-654x-cwwv-5j9c | >= 11.2.1, < 13.0.0 |
13.0.0 |
| #41 | GHSA-5x8w-8jj5-q52h | <= 12.3.0 |
13.0.0 |
Authlib — 7 alerts¶
Manifest: benchmarks/ladder/cg/requirements.txt. Selected version: 1.9.1.
| Alert | Advisory | Affected range | Minimum fix |
|---|---|---|---|
| #43 | GHSA-6v38-4h7w-rj9h | <= 1.8.0 |
1.9.0 |
| #44 | GHSA-7vr2-2fgp-9w7p | >= 1.3.1, <= 1.8.0 |
1.9.0 |
| #45 | GHSA-q686-2qmg-hqc7 | < 1.9.0 |
1.9.0 |
| #46 | GHSA-fch4-3c6x-j4gc | < 1.9.0 |
1.9.0 |
| #47 | GHSA-c5mf-xmp2-59rc | <= 1.8.0 |
1.9.0 |
| #48 | GHSA-x4rv-c3wx-4cr8 | >= 1.6.0, < 1.9.0 |
1.9.0 |
| #49 | GHSA-8m4g-j4wp-wgcg | < 1.9.1 |
1.9.1 |
certifi and virtualenv — 3 alerts¶
Selected versions: certifi 2026.10.19; virtualenv at least 21.14.13.
| Alert | Package / manifest | Advisory | Affected range | Minimum fix |
|---|---|---|---|---|
| #42 | certifi / benchmarks/ladder/cg/requirements.txt |
GHSA-6q48-6c7w-9gw2 | >= 2019.03.09, < 2026.10.18 |
2026.10.18 |
| #50 | certifi / benchmarks/uv.lock |
GHSA-6q48-6c7w-9gw2 | >= 2019.03.09, < 2026.10.18 |
2026.10.18 |
| #51 | virtualenv / uv.lock |
GHSA-cx6f-vjhg-g3cc | >= 21.14.9, < 21.14.13 |
21.14.13 |
Verification and reproducibility boundaries¶
The remediation was checked with frozen-lock installs, all 51 captured affected
version ranges, export parity and a negative control using the stale export.
pip-audit 2.10.1 found no known vulnerabilities in the exported contributor
environment (136 packages) or benchmark environment (94 packages).
Validation passed: 5055 backend tests, 1229 architecture tests, three typing
tests, 560 benchmark security/correctness tests and 11 load-harness negative
controls, with the suites' documented skips and expected failure. All four
distributions built and installed in clean environments; the identity wheel
enforces authlib>=1.9.1,<2. A rebuilt Linux/Python 3.13 Cachegrind image imports
all benchmark apps, matches the shared dependency versions and generates a real
identity QR/PNG. The virtualenv prompt advisory reproduces with a harmless
temporary marker on 21.14.12 and stays inert on 21.14.13.
The complete backend run uses Python 3.12; interpreter eligibility above is not a claim that this change reran the entire Python-version matrix. Normal isolation and release gates remain intact.
Hosted verification exposed a false rejection in the load-client precision
test: its requirement for 100 distinct rounded-microsecond values confused
latency variance with clock resolution. The test now checks fractional
milliseconds independently of that variance, keeps coarse-clock negative
controls, and verifies the actual closed-loop client with a controlled
perf_counter. Runtime latency measurement is unchanged.
A passing version-range check covers this snapshot; it does not establish the
absence of every future advisory or every application configuration risk.
A corrected Git branch does not modify published PyPI wheels or users' existing environments. Updated dependency floors take effect for consumers with a new package release; current installations must refresh their environment and any vendored/container CA bundle. GitHub alert closure must be checked after the fix reaches the default branch and Dependabot re-evaluates it.
Retain historical benchmark result artifacts and their recorded environments. The repaired benchmark lock/export is the input to future runs; it does not retroactively change past measurements. This audit runs no paid agent DX benchmark and makes no new performance claim.
The source evidence was the 51-entry GitHub Dependabot API snapshot captured on
2026-10-29, SHA-256
8560b3c052e3bb4563af27e58608c1fd8ab2b67cd9e51b962c9daaad40ff544c.
The complete ledger above preserves its alert-to-manifest and version mapping
without relying on access to the maintainer's security dashboard.