Skip to content

express-rate-limit's range already admits the fix, so only the lock pin moves - #216

Merged
GraemeF merged 1 commit into
mainfrom
deps/osv-transitive-bumps-comms-oqwt
Aug 4, 2026
Merged

GraemeF merged 1 commit into
mainfrom
deps/osv-transitive-bumps-comms-oqwt

Conversation

@GraemeF

@GraemeF GraemeF commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Closes GHSA-mwp4-54f8-5fhr (HIGH) by moving ip-address 10.2.0 → 10.3.1 in bun.lock. One line, no manifest change.

Why it's a lockfile-only change

ip-address is transitive: @modelcontextprotocol/sdkexpress-rate-limit 8.6.0, which declares ip-address: ^10.2.0. 10.3.1 already satisfies that range, so the lock pin was the only thing holding the tree on the vulnerable version. Nothing needs declaring, widening, or overriding.

Why the entry is edited rather than re-resolved

Two obvious routes were tried and rejected:

  • bun update ip-address promotes ip-address to a direct dependency of the root package.json and leaves express-rate-limit/ip-address pinned at 10.2.0. It's a manifest change that doesn't fix the vulnerable copy.
  • Dropping the lock entry and re-resolving does fix it, but drags in nine unrelated packages — including @parcel/watcher 2.5.6 → 2.6.0, which also drops the watcher-win32-ia32 binary.

Editing the single lock line keeps the diff to what the advisory requires. bun install --frozen-lockfile accepts the result against a wiped node_modules, and the only copy in the tree is node_modules/.bun/ip-address@10.3.1.

Supply-chain gate

bunfig.toml's minimumReleaseAge = 604800 doesn't bite: 10.3.1 was published 2026-07-25, outside the seven-day window. The gate was not lowered or bypassed.

Not in this PR

  • cryptography 49.0.0 → 50.0.0 (GHSA-g6cj-pr64-35w5) — tracked as comms-6g1n, deferred to 2026-08-07. Blocked by clients/hermes/pyproject.toml's [tool.uv] exclude-newer = "7 days": 50.0.0 was published 2026-07-31, so the gate clears on the 7th. Worth knowing, and the reason it needs its own bead rather than a retry: uv lock --upgrade-package cryptography does not fail on this. It resolves clean, exits 0, and silently keeps 49.0.0 — the hermes CI task on this very PR installs cryptography==49.0.0 without complaint. The bump has to be verified by diffing the lock, never by the command's exit code.
  • Renovate can't see either of these. ip-address and cryptography are both transitive, and Renovate's version-update path only tracks declared dependencies — so neither appeared on the dependency dashboard. Whether that gap needs a guard is filed as comms-os6h.
  • fast-uri 4.1.1 → 4.1.2 is already queued as renovate/fast-uri-4.x, held by the same seven-day gate. It's a patch, so it automerges on its own.

Raised from osv-scanner findings; tracked as comms-oqwt.

…in moves (comms-oqwt)

ip-address 10.2.0 is vulnerable to GHSA-mwp4-54f8-5fhr (HIGH). It reaches
us transitively — @modelcontextprotocol/sdk depends on express-rate-limit,
which declares `ip-address: ^10.2.0`. 10.3.1 already satisfies that range,
so nothing needs to be declared, widened, or overridden: the lock pin was
the only thing holding the tree on the vulnerable version.

The lock entry is edited in place rather than refreshed by resolution.
`bun update ip-address` promotes it to a direct dependency of the root
package and leaves express-rate-limit's copy on 10.2.0 — a manifest change
that does not fix the vulnerable copy. Dropping the entry and re-resolving
does fix it, but carries nine unrelated packages with it, including a
@parcel/watcher major that drops the win32-ia32 binary.

bunfig.toml's minimumReleaseAge does not bite here: 10.3.1 was published
2026-07-25, so it is outside the seven-day window.
@GraemeF
GraemeF merged commit 87590af into main Aug 4, 2026
2 checks passed
@GraemeF
GraemeF deleted the deps/osv-transitive-bumps-comms-oqwt branch August 4, 2026 11:52
GraemeF added a commit that referenced this pull request Sep 3, 2026
Clears five HIGH advisories by moving `fast-uri` 4.1.1 -> 4.1.3 in
`bun.lock`. One line, no manifest change.

- GHSA-7p8r-x3mc-p8w7 — fixed in 4.1.2
- GHSA-5jgf-p345-68v8 — host confusion via skipped IDN canonicalisation
- GHSA-f65p-4m7j-42xc — SSRF via malformed authority
- GHSA-fph4-wmhf-6fwf — SSRF via repeated components
- GHSA-jqff-g426-hqxp — host confusion via percent-encoded scheme

The last four were published 2026-09-02 and are all fixed in 4.1.3, so
the same one-line move that this branch already carried for the first
one clears all five once the pin lands on 4.1.3 rather than 4.1.2.

## Why it's a lockfile-only change

`fast-uri` is transitive. It arrives through `ajv`, which declares
`fast-uri: ^3.0.1`, and `package.json`'s `overrides` block already
raises that to `^4.1.1`. 4.1.3 satisfies the override, so the lock pin
was the only thing holding the tree on the vulnerable version. The
override also collapses `ajv` onto the single 4.x resolution, so
`bun.lock` holds exactly one `fast-uri` entry and one pin move covers
the tree — there is no 3.x copy left behind, and the 3.x line is
vulnerable to all five.

## Why the entry is edited rather than re-resolved

`bun update fast-uri` does not fix this. It reports `installed
fast-uri@4.1.1`, leaves the lock entry unmoved, and adds `fast-uri` to
the root `package.json` as a direct dependency pinned exactly — because
`bunfig.toml` sets `exact = true`. The manifest changes and the
vulnerable copy stays. PR #216 recorded the same behaviour for
`ip-address`.

Editing the single lock line keeps the diff to what the advisories
require. `bun install --frozen-lockfile` accepts the result against a
wiped `node_modules` — which is also what verifies the hand-written
integrity hash, since bun checks the tarball against it — and the only
copy in the tree is `node_modules/.bun/fast-uri@4.1.3`.

## Supply-chain gate

`bunfig.toml` sets `minimumReleaseAge = 604800`. 4.1.3 published
2026-08-23, so it clears the seven-day window by 11 days. The gate was
not lowered or bypassed.

`fast-uri` 4.1.4 published 2026-09-02 and is inside the window until
2026-09-09. The override's caret admits it, so the gate is what holds
this resolution at 4.1.3. No advisory here names 4.1.4.

## Not in this PR

- **GHSA-v2hh-gcrm-f6hx** is fixed in `fast-uri` 4.1.1 and `main` is
  already there. No work.
- **A release.** commy carries 27 commits unreleased since
  `commy-v0.22.0`, tracked as `comms-ngz0`. This merge fixes `main`, not
  the published npm bundle.

Raised by nixos-config from osv-scanner findings; tracked as
`comms-k9f9`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant