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
- Upgrade to the fixed version: run
npm install 9router@0.5.8(first patched version 0.5.8). [1] - Run the app only in a supported secure startup mode where clients cannot control the X-9r-Real-Ip header. [1]
- 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.
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
- 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.
[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-appCorrections
Report an error or request a correction. We review requests within 5 business days and add a dated correction note.
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.