<?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://cve.radiocsirt.org</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>Mon, 05 Oct 2026 23:09:36 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-335306</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-335306</link>
      <description>EUVD-2026-335306</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-335306</guid>
    </item>
    <item>
      <title>fkie_cve-2026-49229</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-49229</link>
      <description>&lt;p&gt;Actual is a local-first personal finance app. Prior to 26.6.0, in OpenID multi-user mode, disabling a user only blocks future OpenID login for that identity, while existing Actual session tokens for the disabled user remain valid. The shared session validation path accepts any existing token row that has not expired without checking whether the associated user is still enabled, allowing a disabled user to continue calling authenticated server endpoints. This issue is fixed in version 26.6.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Actual is a local-first personal finance app. Prior to 26.6.0, in OpenID multi-user mode, disabling a user only blocks future OpenID login for that identity, while existing Actual session tokens for the disabled user remain valid. The shared session validation path accepts any existing token row that has not expired without checking whether the associated user is still enabled, allowing a disabled user to continue calling authenticated server endpoints. This issue is fixed in version 26.6.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-49229</guid>
    </item>
    <item>
      <title>GHSA-cq9c-6w48-qmfg — @actual-app/sync-server: Disabled OpenID users keep access through existing session tokens</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-cq9c-6w48-qmfg</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @actual-app/sync-server&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;In OpenID multi-user mode, disabling a user only blocks future OpenID login for that identity. Existing Actual session tokens for the disabled user remain valid, so the user can continue calling authenticated server endpoints after an administrator has disabled the account.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The disabled-user check is present during OpenID login finalization. Existing users are only accepted when the matching row has `enabled = 1`, and a disabled row causes the OpenID grant to fail before a new session token is created.&lt;/p&gt;
&lt;p&gt;```ts
// packages/sync-server/src/accounts/openid.ts:284-291
const { id: userIdFromDb, display_name: displayName } =
  accountDb.first(
    &amp;#39;SELECT id, display_name FROM users WHERE user_name = ? and enabled = 1&amp;#39;,
    [identity],
  ) || {};&lt;/p&gt;
&lt;p&gt;if (userIdFromDb == null) {
  throw new Error(&amp;#39;openid-grant-failed&amp;#39;);
}
```&lt;/p&gt;
&lt;p&gt;The shared session validation path does not perform the same enabled-user check. It accepts any existing token row that has not expired, then returns the session object to every route protected by `validateSessionMiddleware`.&lt;/p&gt;
&lt;p&gt;```ts
// packages/sync-server/src/util/validate-user.ts:10-41
export function validateSession(req: Request, res: Response) {
  let { token } = req.body || {};
  if (!token) {
    token = req.headers[&amp;#39;x-actual-token&amp;#39;];
  }&lt;/p&gt;
&lt;p&gt;const session = getSession(token);
  ...
  return session;
}
```&lt;/p&gt;
&lt;p&gt;This means account disablement and session authorization diverge:&lt;/p&gt;
&lt;p&gt;```text
OpenID login path: users.enabled must be 1
Existing…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @actual-app/sync-server&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;In OpenID multi-user mode, disabling a user only blocks future OpenID login for that identity. Existing Actual session tokens for the disabled user remain valid, so the user can continue calling authenticated server endpoints after an administrator has disabled the account.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;The disabled-user check is present during OpenID login finalization. Existing users are only accepted when the matching row has `enabled = 1`, and a disabled row causes the OpenID grant to fail before a new session token is created.&lt;/p&gt;
&lt;p&gt;```ts
// packages/sync-server/src/accounts/openid.ts:284-291
const { id: userIdFromDb, display_name: displayName } =
  accountDb.first(
    &amp;#39;SELECT id, display_name FROM users WHERE user_name = ? and enabled = 1&amp;#39;,
    [identity],
  ) || {};&lt;/p&gt;
&lt;p&gt;if (userIdFromDb == null) {
  throw new Error(&amp;#39;openid-grant-failed&amp;#39;);
}
```&lt;/p&gt;
&lt;p&gt;The shared session validation path does not perform the same enabled-user check. It accepts any existing token row that has not expired, then returns the session object to every route protected by `validateSessionMiddleware`.&lt;/p&gt;
&lt;p&gt;```ts
// packages/sync-server/src/util/validate-user.ts:10-41
export function validateSession(req: Request, res: Response) {
  let { token } = req.body || {};
  if (!token) {
    token = req.headers[&amp;#39;x-actual-token&amp;#39;];
  }&lt;/p&gt;
&lt;p&gt;const session = getSession(token);
  ...
  return session;
}
```&lt;/p&gt;
&lt;p&gt;This means account disablement and session authorization diverge:&lt;/p&gt;
&lt;p&gt;```text
OpenID login path: users.enabled must be 1
Existing…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-cq9c-6w48-qmfg</guid>
    </item>
  </channel>
</rss>
