<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://cve.radiocsirt.org/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-06T07:54:30.380762+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>csirt@opendfir.org</email>
  </author>
  <link href="https://cve.radiocsirt.org" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/euvd-2026-335680</id>
    <title>EUVD-2026-335680</title>
    <updated>2026-10-06T07:54:30.384271+00:00</updated>
    <content>EUVD-2026-335680</content>
    <link href="https://cve.radiocsirt.org/vuln/euvd-2026-335680"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/fkie_cve-2026-55501</id>
    <title>fkie_cve-2026-55501</title>
    <updated>2026-10-06T07:54:30.384307+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>9Router is an AI router &amp; token saver. Prior to 0.4.80, the dashboard login rate limiter in src/lib/auth/loginLimiter.js derives the client identity from the attacker-controlled X-Forwarded-For HTTP header, and src/app/api/auth/login/route.js uses that spoofable value for checkLock and recordFail. A remote attacker can rotate the X-Forwarded-For value on each login attempt to receive a fresh rate-limit bucket, bypass the 5-attempt threshold and progressive lockout durations, and perform unlimited brute-force attempts against the dashboard password. This issue is fixed in version 0.4.80.</p>
      </div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/fkie_cve-2026-55501"/>
  </entry>
  <entry>
    <id>https://cve.radiocsirt.org/vuln/ghsa-7cfm-pqrj-xgq7</id>
    <title>GHSA-7cfm-pqrj-xgq7 — 9router: Login brute-force protection bypass via spoofed X-Forwarded-For header</title>
    <updated>2026-10-06T07:54:30.384343+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> npm: 9router</p>
<p>## Summary</p>
<p>The 9router dashboard login rate limiter derives the client identity from the attacker-controlled `X-Forwarded-For` HTTP header. When 9router is directly exposed, or deployed behind a reverse proxy that does not overwrite untrusted forwarding headers, a remote attacker can rotate the `X-Forwarded-For` value on each login attempt and receive a fresh rate-limit bucket every time.</p>
<p>This bypasses the dashboard brute-force protection and makes the login lockout mechanism ineffective.</p>
<p>## Details</p>
<p>| Component                    | File                              | Note                                                                        |
| ---------------------------- | --------------------------------- | --------------------------------------------------------------------------- |
| Dashboard login rate limiter | `src/lib/auth/loginLimiter.js`    | Uses `X-Forwarded-For` as the client identity without a trusted-proxy check |
| Dashboard login route        | `src/app/api/auth/login/route.js` | Calls `checkLock()` and `recordFail()` using the spoofable client identity  |</p>
<p>#### Vulnerable Code</p>
<p>`src/lib/auth/loginLimiter.js`:</p>
<p>```js
export function getClientIp(request) {
  const xff = request.headers.get("x-forwarded-for");
  if (xff) return xff.split(",")[0].trim();
  return request.headers.get("x-real-ip") || "unknown";
}
```</p>
<p>The returned value is used as the key for the in-memory rate-limit state:</p>
<p>```js
const attempts = new Map(); // ip -&gt; { fails, lockUntil, lo…</p></div>
    </content>
    <link href="https://cve.radiocsirt.org/vuln/ghsa-7cfm-pqrj-xgq7"/>
  </entry>
</feed>
