High (AgentArmorHQ estimate)Other

9Router authentication bypass via spoofable X-9r-Real-Ip header

Product
9router (9router-app)
CVE
CVE-2026-56681
Affected
9router <= 0.5.4
Fixed in
0.5.8

Last verified against sources: October 26, 2026

Am I affected?

9router (9router-app): affected 9router <= 0.5.4. Fixed in 0.5.8.

  • Check your version: run npm ls 9router. Versions <= 0.5.4 of 9router are affected. [1]

What to do now

  1. Upgrade to the fixed version: run npm install 9router@0.5.8 (first patched version 0.5.8). [1]
  2. Run the app only in a supported secure startup mode where clients cannot control the X-9r-Real-Ip header. [1]
  3. Strip or reject any inbound X-9r-* headers at the edge. [1]

General practice, not from the source: if the affected software could read tokens or credentials, rotate them after upgrading; pin versions and review changes before updating tools your agents run.

Discuss this incident

What happened

  • 9router decides a request comes from the local machine by trusting the X-9r-Real-Ip header that the client sends. [1]
  • That header is meant to be set only by the bundled custom-server.js layer, which builds it from the TCP socket address and removes any copy sent by the client. [1]
  • When the app is served without custom-server.js, Next.js passes the client's header through unchanged. [1]
  • An attacker can send X-9r-Real-Ip: 127.0.0.1 and be treated as a local client, which skips the API-key check on the public LLM API at /api/v1/*. [1]

Impact

  • An unauthenticated attacker who can reach the service can use the owner's configured LLM provider connections. [1]
  • This can consume the owner's paid API credits and cause financial loss. [1]
  • The attacker can list the configured providers and available models. [1]
  • The attacker gets ongoing access to the LLM API through the proxy. [1]

What was done

  • The advisory says not to trust X-9r-Real-Ip or any X-9r-* header received directly from clients. [1]
  • It says to take the client address for authorization from a trusted transport-level source such as req.socket.remoteAddress. [1]
  • It says to fail closed when the trusted marker is absent and to strip or reject inbound X-9r-* headers at the edge. [1]
  • A patched version, 0.5.8, is available. [1]

Sources

  1. GHSA-5mj8-gf6m-fhw8 — GitHub Advisory Database

Every statement above was checked against these sources before publishing. Spotted an error? Tell us and we will correct it with a dated note.

Share advisory brief with your team

Copy a plain-text summary for Slack, GitHub issues, or team security channels.

Brief
[CVE-2026-56681] 9Router authentication bypass via spoofable X-9r-Real-Ip header
Product: 9router (9router-app) | Affected: 9router <= 0.5.4 | Fixed in: 0.5.8
Summary: 9router decides a request comes from the local machine by trusting the X-9r-Real-Ip header that the client sends.
Source & remediation on AgentArmorHQ: https://agentarmorhq.com/incidents/2026/09/cve-2026-56681-9router-9router-app
Was this page useful?

Corrections

Report an error or request a correction. We review requests within 5 business days and add a dated correction note.

10 to 2,000 characters. A link to a source helps. Stored as plain text.

Discussions for CVE-2026-56681

Ask questions or share configuration tips. Governed by our Community Rules & Terms.

No posts match this filter yet.

Be the first to ask a question or share a working tip.

Check before you install

Paste a package name or a GitHub link and get a clear answer in seconds: Block, Review or No known issues. No account needed.

Check a package

Questions? Contact us