Bump transitive proxy-addr to 2.0.8 (CVE-2026-90711)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 72/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- express, nodejs, typescript
調査の方向性
package.json から始めます。既存の pnpm overrides ブロックにはすでに serialize-javascript が固定されているので、そこに proxy-addr のエントリを追加し、pnpm install を実行して pnpm-lock.yaml を更新してください。src/controllers/admin/post-settings-restore-controller.ts:21 と patch-settings-controller.ts:73 のリクエスト IP 読み取り箇所は、文脈のために確認するだけにしてください。今回の修正ではこれらは変更しません。完了条件は、pnpm why proxy-addr が 2.0.8 に解決され、frozen インストールが成功することです。
索引モデルが issue の本文から書いたものです。
説明
Summary
[email protected] resolves into this tree via [email protected] — see pnpm-lock.yaml, [email protected] at the dependency edge under express. That version is affected by CVE-2026-90711 (GHSA-jqcg-44mw-7w3h, Aikido AIKIDO-2026-101201, scored critical), fixed in 2.0.8.
The defect
proxy-addr accepts an IPv4-mapped IPv6 trust subnet with an IPv4-sized prefix — ::ffff:10.0.0.0/8 instead of ::ffff:10.0.0.0/104 — and treats that as trusting every IPv4 address. The socket peer is then counted as hop 0, so any unauthenticated client can set X-Forwarded-For to an arbitrary address. Everything built on the resolved client IP — IP allow-lists, rate limiting, geolocation, audit logging — becomes spoofable.
Exposure here: low, but not zero
createWebApp()insrc/factories/web-app-factory.tscallsexpress()and never setstrust proxy, so Express keeps its default offalseandreq.ipis the socket peer. The relay's own client-IP logic does not go through Express at all: it usesgetRemoteAddress()/isTrustedProxy()insrc/utils/http.ts, which trust a forwarded header only against configured proxies — the hardening from #493.- But
request.ipis read directly insrc/controllers/admin/post-settings-restore-controller.ts:21andsrc/controllers/admin/patch-settings-controller.ts:73. In any deployment that setstrust proxyto a proxy subnet — the common pattern behind Cloudflare or nginx, and frequently written in IPv4-mapped IPv6 notation —proxy-addrbecomes load-bearing for those paths, and that is precisely the configuration this CVE turns into an authentication bypass.
Fix
[email protected] declares ~2.0.7 and [email protected] declares ^2.0.7; both already accept 2.0.8, so no framework change is needed. This repo already carries a pnpm overrides block (serialize-javascript), so it is one line:
"pnpm": { "overrides": { "proxy-addr": "^2.0.8" } }
then pnpm install to refresh the lockfile and pnpm why proxy-addr to confirm 2.0.8 resolves.
Not urgent for a default deployment, but it is a zero-risk bump that closes the class outright, and cheaper now than reasoning about each operator's proxy configuration later.
Advisory: https://intel.aikido.dev/cve/AIKIDO-2026-101201 · Upstream: https://github.com/jshttp/proxy-addr/security/advisories/GHSA-jqcg-44mw-7w3h
One pnpm note, from doing this on
cameri/akkadian-agentminutes after filing. At the[email protected]this repo pins, thepackage.jsonpnpm.overridesfield above works — the existingserialize-javascriptoverride proves it (declared>=7.0.3 <8, resolved 7.0.5 in the lockfile). But pnpm 11 no longer reads that field at all; it warnsThe "pnpm" field in package.json is no longer read by pnpm ... "pnpm.overrides"and ignores the setting. My first attempt there failed that way, and what caught it waspnpm installrefusing withERR_PNPM_LOCKFILE_CONFIG_MISMATCH— a frozen install compares the override config against the lockfile, so a silently-ignored override cannot reach a commit. When this repo moves to pnpm 11, the overrides block has to move topnpm-workspace.yaml(akkadian-agent got one that way, entry written in the samepkg@range: '>=version'style as its existing list).
- 主要言語
- TypeScript
- スター
- 829
- フォーク
- 234
- 平均マージ
- 2日 10時間
- マージ済み PR(30日)
- 24
環境構築
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
cameri/nostream のほかの issue
-
feat(admin): bounded NIP-66 probe history and Network Health timeline対応中かも @Ferryx349 が 4 日前に担当しました。 オープンAdmin Console enhancement
cameri/nostream#800 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
Store relay settings overrides in PostgreSQL (SETTINGS_BACKEND=db)対応中かも @Ferryx349 が 37 日前に担当しました。 オープンenhancement
cameri/nostream#757 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
feat(nip85): Web-of-Trust spam mitigation engine再び着手できるかも @Ferryx349 が 67 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンenhancement
cameri/nostream#720 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
feat(nip96): native HTTP media storage pipeline再び着手できるかも @Ferryx349 が 67 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンenhancement
cameri/nostream#719 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
feat(nip67): support EOSE completeness hints再び着手できるかも @Ferryx349 が 67 日前に担当しましたが、オープン中のプルリクエストはありません。 オープンenhancement
cameri/nostream#718 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
cameri/nostream の issue をすべて見る
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 75/100
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
jaegertracing/jaeger-ui#4596 ·
メンテナーはふだん 1 日以内に返信
-
area:tui enhancement platform:macos
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
anthropics/claude-code#101490 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
netlify/netlify-mcp#75 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信