<?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://db.gcve.eu</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>Sat, 10 Oct 2026 22:57:55 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-107720</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-107720</link>
      <description>&lt;p&gt;fast-jwt provides fast JSON Web Token (JWT) implementation. Prior to 6.3.1, fast-jwt createVerifier accepts an unsigned JWT when key is an empty string or null and algorithms is a non-empty allowlist. Falsy synchronous keys bypass prepareKeyOrSecret, allowedAlgorithms remains active, hasKey is false, and the empty signature avoids the verifySignature gate. An attacker can therefore submit a token containing arbitrary claims without possessing a signing key, resulting in authentication or authorization bypass. Claim validators still run, and non-empty keys, an empty key without algorithms, and the async key resolver path do not have this behavior. This issue is fixed in version 6.3.1.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;fast-jwt provides fast JSON Web Token (JWT) implementation. Prior to 6.3.1, fast-jwt createVerifier accepts an unsigned JWT when key is an empty string or null and algorithms is a non-empty allowlist. Falsy synchronous keys bypass prepareKeyOrSecret, allowedAlgorithms remains active, hasKey is false, and the empty signature avoids the verifySignature gate. An attacker can therefore submit a token containing arbitrary claims without possessing a signing key, resulting in authentication or authorization bypass. Claim validators still run, and non-empty keys, an empty key without algorithms, and the async key resolver path do not have this behavior. This issue is fixed in version 6.3.1.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-107720</guid>
    </item>
    <item>
      <title>GHSA-8wpc-h4q6-8fxv — fast-jwt: createVerifier accepts unsigned JWTs when key is '' or null and algorithms is explicitly set</title>
      <link>https://db.gcve.eu/vuln/ghsa-8wpc-h4q6-8fxv</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: fast-jwt&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`createVerifier` in fast-jwt ≤ 6.3.0 skips signature verification entirely when the `key` option is a falsy synchronous value (`&amp;#39;&amp;#39;` or `null`) **and** the `algorithms` option is set to a non-empty allowlist. An attacker who can present a JWT to the application — regardless of algorithm — can forge arbitrary claims without possessing any signing key.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;**Root cause — four cooperating code paths:**&lt;/p&gt;
&lt;p&gt;**A. Falsy sync keys bypass `prepareKeyOrSecret`**&lt;/p&gt;
&lt;p&gt;`createVerifier` branches on `typeof key`:&lt;/p&gt;
&lt;p&gt;```js
const keyType = typeof key
if (keyType !== &amp;#39;string&amp;#39; &amp;amp;&amp;amp; keyType !== &amp;#39;object&amp;#39; &amp;amp;&amp;amp; keyType !== &amp;#39;function&amp;#39;) {
  throw new TokenError(/* ... */)
}
if (key &amp;amp;&amp;amp; keyType !== &amp;#39;function&amp;#39;) {
  key = prepareKeyOrSecret(key, hsAlgorithms.includes(availableAlgorithms[0]))
}
```&lt;/p&gt;
&lt;p&gt;When `key` is `&amp;#39;&amp;#39;` (string, falsy) or `null` (object, falsy) the outer type check passes but the `if (key &amp;amp;&amp;amp; ...)` guard never calls `prepareKeyOrSecret`. The empty-secret rejection added in that function is therefore never reached for sync keys:&lt;/p&gt;
&lt;p&gt;```js
function prepareKeyOrSecret(key, isSecret) {
  if (isSecret &amp;amp;&amp;amp; key.length === 0) {
    throw new TokenError(TokenError.codes.invalidKey, &amp;#39;The key cannot be an empty string or buffer.&amp;#39;)
  }
  return isSecret ? createSecretKey(key) : createPublicKey(key)
}
```&lt;/p&gt;
&lt;p&gt;**B. Explicit `algorithms` keeps an allowlist active with no key**&lt;/p&gt;
&lt;p&gt;When `key` is falsy, autodetection is skipped and the caller-supplied `algorithms` (e.g. `[&amp;#39;HS256&amp;#39;]`) is retained in `allowed…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: fast-jwt&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;`createVerifier` in fast-jwt ≤ 6.3.0 skips signature verification entirely when the `key` option is a falsy synchronous value (`&amp;#39;&amp;#39;` or `null`) **and** the `algorithms` option is set to a non-empty allowlist. An attacker who can present a JWT to the application — regardless of algorithm — can forge arbitrary claims without possessing any signing key.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;**Root cause — four cooperating code paths:**&lt;/p&gt;
&lt;p&gt;**A. Falsy sync keys bypass `prepareKeyOrSecret`**&lt;/p&gt;
&lt;p&gt;`createVerifier` branches on `typeof key`:&lt;/p&gt;
&lt;p&gt;```js
const keyType = typeof key
if (keyType !== &amp;#39;string&amp;#39; &amp;amp;&amp;amp; keyType !== &amp;#39;object&amp;#39; &amp;amp;&amp;amp; keyType !== &amp;#39;function&amp;#39;) {
  throw new TokenError(/* ... */)
}
if (key &amp;amp;&amp;amp; keyType !== &amp;#39;function&amp;#39;) {
  key = prepareKeyOrSecret(key, hsAlgorithms.includes(availableAlgorithms[0]))
}
```&lt;/p&gt;
&lt;p&gt;When `key` is `&amp;#39;&amp;#39;` (string, falsy) or `null` (object, falsy) the outer type check passes but the `if (key &amp;amp;&amp;amp; ...)` guard never calls `prepareKeyOrSecret`. The empty-secret rejection added in that function is therefore never reached for sync keys:&lt;/p&gt;
&lt;p&gt;```js
function prepareKeyOrSecret(key, isSecret) {
  if (isSecret &amp;amp;&amp;amp; key.length === 0) {
    throw new TokenError(TokenError.codes.invalidKey, &amp;#39;The key cannot be an empty string or buffer.&amp;#39;)
  }
  return isSecret ? createSecretKey(key) : createPublicKey(key)
}
```&lt;/p&gt;
&lt;p&gt;**B. Explicit `algorithms` keeps an allowlist active with no key**&lt;/p&gt;
&lt;p&gt;When `key` is falsy, autodetection is skipped and the caller-supplied `algorithms` (e.g. `[&amp;#39;HS256&amp;#39;]`) is retained in `allowed…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-8wpc-h4q6-8fxv</guid>
    </item>
  </channel>
</rss>
