<?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>Thu, 01 Oct 2026 23:26:23 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-73306</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-73306</link>
      <description>&lt;p&gt;Budibase is an open-source low-code platform. Prior to 3.39.25, POST /api/global/auth/:tenantId/login incremented the failure counter in packages/worker/src/api/controllers/global/auth.ts only for existing users, while packages/worker/src/middleware/emailLockout.ts returned X-Account-Locked and Retry-After only for locked identifiers. An unauthenticated attacker could compare the response after repeated failures to enumerate valid email addresses and temporarily lock valid accounts. This issue is fixed in version 3.39.25.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Budibase is an open-source low-code platform. Prior to 3.39.25, POST /api/global/auth/:tenantId/login incremented the failure counter in packages/worker/src/api/controllers/global/auth.ts only for existing users, while packages/worker/src/middleware/emailLockout.ts returned X-Account-Locked and Retry-After only for locked identifiers. An unauthenticated attacker could compare the response after repeated failures to enumerate valid email addresses and temporarily lock valid accounts. This issue is fixed in version 3.39.25.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-73306</guid>
    </item>
    <item>
      <title>GHSA-cr7p-cr3q-h5cm — Budibase: Account Enumeration via Login Lockout Response Differential</title>
      <link>https://db.gcve.eu/vuln/ghsa-cr7p-cr3q-h5cm</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @budibase/server&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The login lockout mechanism in Budibase creates an observable response discrepancy that allows unauthenticated attackers to enumerate valid email addresses. When an existing user&amp;#39;s account is locked after 5 failed login attempts, the server returns a distinct `403` response with `X-Account-Locked: 1` and `Retry-After: 900` headers plus the message &amp;#34;Account temporarily locked.&amp;#34; For non-existing users, the response is always a generic `403 &amp;#34;Unauthorized&amp;#34;` regardless of attempt count, because the lockout counter is never incremented.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The vulnerability exists in two files that implement the login lockout feature:&lt;/p&gt;
&lt;p&gt;**`packages/worker/src/middleware/lockout.ts:18-36`** — The lockout middleware only blocks requests for users that exist in the database AND are locked:&lt;/p&gt;
&lt;p&gt;```typescript
export default async (ctx: Ctx, next: Next) =&amp;gt; {
  const email = ctx.request.body.username
  if (!email) {
    return await next()
  }
  const dbUser = await userSdk.db.getUserByEmail(email)
  if (dbUser &amp;amp;&amp;amp; (await isLocked(email))) {  // line 26: non-existing users skip this entirely
    ctx.set(&amp;#34;X-Account-Locked&amp;#34;, &amp;#34;1&amp;#34;)
    ctx.set(&amp;#34;Retry-After&amp;#34;, String(env.LOGIN_LOCKOUT_SECONDS))
    ctx.throw(403, &amp;#34;Account temporarily locked. Try again later.&amp;#34;)
  }
  return await next()
}
```&lt;/p&gt;
&lt;p&gt;**`packages/worker/src/api/controllers/global/auth.ts:127-141`** — The login handler only increments the failure counter for existing users:&lt;/p&gt;
&lt;p&gt;```typescript
if (err || !user) {
  if (dbUser) {          //…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @budibase/server&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;The login lockout mechanism in Budibase creates an observable response discrepancy that allows unauthenticated attackers to enumerate valid email addresses. When an existing user&amp;#39;s account is locked after 5 failed login attempts, the server returns a distinct `403` response with `X-Account-Locked: 1` and `Retry-After: 900` headers plus the message &amp;#34;Account temporarily locked.&amp;#34; For non-existing users, the response is always a generic `403 &amp;#34;Unauthorized&amp;#34;` regardless of attempt count, because the lockout counter is never incremented.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The vulnerability exists in two files that implement the login lockout feature:&lt;/p&gt;
&lt;p&gt;**`packages/worker/src/middleware/lockout.ts:18-36`** — The lockout middleware only blocks requests for users that exist in the database AND are locked:&lt;/p&gt;
&lt;p&gt;```typescript
export default async (ctx: Ctx, next: Next) =&amp;gt; {
  const email = ctx.request.body.username
  if (!email) {
    return await next()
  }
  const dbUser = await userSdk.db.getUserByEmail(email)
  if (dbUser &amp;amp;&amp;amp; (await isLocked(email))) {  // line 26: non-existing users skip this entirely
    ctx.set(&amp;#34;X-Account-Locked&amp;#34;, &amp;#34;1&amp;#34;)
    ctx.set(&amp;#34;Retry-After&amp;#34;, String(env.LOGIN_LOCKOUT_SECONDS))
    ctx.throw(403, &amp;#34;Account temporarily locked. Try again later.&amp;#34;)
  }
  return await next()
}
```&lt;/p&gt;
&lt;p&gt;**`packages/worker/src/api/controllers/global/auth.ts:127-141`** — The login handler only increments the failure counter for existing users:&lt;/p&gt;
&lt;p&gt;```typescript
if (err || !user) {
  if (dbUser) {          //…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-cr7p-cr3q-h5cm</guid>
    </item>
  </channel>
</rss>
