<?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://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-29T11:34:58.027123+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" 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://db.gcve.eu/vuln/ghsa-3cmx-xjww-583x</id>
    <title>GHSA-3cmx-xjww-583x — i18next-http-backend: Query-parameter injection through &amp; and = in lng when loadPath/addPath puts {{lng}} in the query…</title>
    <updated>2026-10-29T11:34:58.036522+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> npm: i18next-http-backend</p>
<p>### Summary</p>
<p>The URL-segment check added for GHSA-q89c-q3h5-w34g blocks `?`, `#`, `%`, `:`, `/` and `@` in `lng`, but not `&amp;` or `=`, and the checked value is inserted into the URL without encoding. The README documents a multiload loadPath of the form `/locales/resources.json?lng=de+en&amp;ns=ns1+ns2`. With a template like that, an attacker who controls the language value can add or override query parameters on the request the backend sends. By default the language comes from `?lng=`, a cookie or `Accept-Language`. This is the "query-string injection" impact described in GHSA-q89c; only the `?` form was closed.</p>
<p>Server side (Express + i18next-http-middleware, default options), `GET /?lng=de%26ns%3Dprivate%26admin%3Dtrue` makes the application request `…?lng=de&amp;ns=private&amp;admin=true&amp;ns=common` from its own translations API.</p>
<p>### Details</p>
<p>The checks are in `lib/utils.js`. The base check (https://github.com/i18next/i18next-http-backend/blob/v4.0.3/lib/utils.js#L26-L44) rejects:</p>
<p>- empty or &gt;128-character values and prototype keys;
- `..` and `\`;
- `/[?#%:\s]/`;
- control characters.</p>
<p>`isSafeLangUrlSegment` (https://github.com/i18next/i18next-http-backend/blob/v4.0.3/lib/utils.js#L51-L55) adds only `/` and `@`. **Neither function rejects `&amp;` or `=`.**</p>
<p>```js
if (/[?#%:\s]/.test(v)) return false   // utils.js L40, no &amp; or =
```</p>
<p>`interpolateUrl` then splits on `+`, checks each segment, and joins the **raw** segments into the template, with no encoding (https://github.com/i18next/i1…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/ghsa-3cmx-xjww-583x"/>
  </entry>
</feed>
