Uh oh!
There was an error while loading. Please reload this page.
chore(deps): unblock ip-address 10.4.0 via express-rate-limit 8.6.2 - #161
Merged
Conversation
Alerts #121 (high, GHSA-mwp4-54f8-5fhr / CVE-2026-69192 — Address4 decodes leading-zero octets as decimal while resolvers decode them as octal, allowing SSRF and trust-boundary bypass) and #41 (medium) were both unreachable: express-rate-limit 8.3.1 pins ip-address to exactly "10.1.0", and an exact pin admits no upgrade. express-rate-limit 8.5.1 relaxed that to "^10.2.0", and @backstage/backend- defaults already declares "^8.2.2", which accepts 8.6.2. Re-resolving it therefore lifts ip-address, and a second pass collapses the remaining socks copy ("^10.0.1", left at 10.1.0 by the first step) onto the same version: express-rate-limit 8.3.1 -> 8.6.2 ip-address 10.1.0 -> 10.4.0 (single copy, was two mid-way) express-rate-limit uses ip-address to parse client IPs for rate limiting, which is itself a trust boundary — an octal/decimal parsing discrepancy there is a rate-limit evasion primitive. It reaches us only through backend-defaults, a devDependency of rw-backend and a dependency of the private demo backend, so it is not in any published plugin's graph. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes Dependabot alerts #121 and #41.
Address4decodes leading-zero octets as decimal while resolvers decode them as octal, allowing SSRF and trust-boundary bypassWhy a lockfile bump alone couldn't fix it
An exact pin admits no upgrade, so
yarn up -R ip-addresswas a dead end — it would only have lifted the other consumer (socks,^10.0.1) and left a second vulnerable copy behind for express-rate-limit. Same shape as the undici problem in #153.What this does
express-rate-limit 8.5.1 relaxed the pin to
ip-address: ^10.2.0, andbackend-defaultsalready declares^8.2.2, which accepts 8.6.2 (current latest). Two passes:The first step is genuinely not sufficient on its own — it leaves the tree split:
ip-address@^10.2.0ip-address@^10.0.1(socks)The second pass collapses both descriptors onto one entry at 10.4.0.
express-rate-limitip-addressLockfile-only: 9 insertions, 8 deletions, no manifest touched. express-rate-limit 8.6.2 also adds
debug: ^4.4.3, already present in the tree.Verification
express-rate-limitis live Express middleware and this crosses three minor versions, so it got more than a lockfile glance:yarn install --immutablerw-backendtests, run in isolationyarn typecheckyarn buildyarn lintyarn test(full)yarn format:checkyarn workspace app buildThe 301
rw-backendtests drive real Express routers through supertest, which is the direct evidence that middleware behaviour is unaffected.Scope
Worth being clear about the risk class:
express-rate-limitusesip-addressto parse client IPs for rate limiting — that is a trust boundary, and an octal/decimal parsing discrepancy there is a rate-limit evasion primitive, with SSRF named explicitly in the advisory.It reaches this repo only through
@backstage/backend-defaults, which is a devDependency ofplugins/rw-backendand a dependency of the privatepackages/backend. So it is not in any published plugin's graph — but it is one of the more materially exploitable classes seen in this backlog, and worth closing rather than leaving.🤖 Generated with Claude Code