<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>@Actual-App/Sync-Server — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/@actual-app/sync-server/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata — refreshed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Wed, 03 Jan 2024 12:00:00 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/@actual-app/sync-server/feed.xml" rel="self" type="application/rss+xml"/><item><title>Actual Privilege Escalation via change-password Endpoint on OpenID-Migrated Servers</title><link>https://feed.craftedsignal.io/briefs/2024-01-03-actual-privesc/</link><pubDate>Wed, 03 Jan 2024 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2024-01-03-actual-privesc/</guid><description>Any authenticated user can escalate to ADMIN on Actual servers migrated from password authentication to OpenID Connect by exploiting a lack of authorization checks, orphaned password rows, and client-controlled login methods, leading to full administrative privileges.</description><content:encoded><![CDATA[<p>Actual is vulnerable to a privilege escalation attack affecting servers migrated from password authentication to OpenID Connect. This vulnerability, identified as CVE-2026-33318, allows any authenticated user, regardless of their initial role (including the BASIC role), to gain full ADMIN access. The vulnerability stems from three weaknesses: a missing authorization check on the <code>/account/change-password</code> endpoint, the persistence of the inactive password <code>auth</code> row after migration, and the acceptance of a client-supplied <code>loginMethod</code> which bypasses the server&rsquo;s active auth configuration. This allows an attacker to overwrite the password hash for the admin account, authenticate, and gain complete control over the system. This affects multi-user servers running OpenID Connect that were previously configured with password authentication. Servers bootstrapped exclusively with OpenID are not affected. Versions prior to 26.4.0 of <code>@actual-app/sync-server</code> are vulnerable.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker obtains a valid session token for any user role (including BASIC) on a migrated Actual server.</li>
<li>Attacker sends a POST request to <code>/account/change-password</code> with a new password, using the valid session token in the <code>X-Actual-Token</code> header and a JSON body containing the desired password.</li>
<li>The server updates the password hash in the <code>auth</code> table for the inactive password authentication method, due to the missing authorization check.</li>
<li>Attacker sends a POST request to <code>/account/login</code> with the <code>loginMethod</code> parameter set to &ldquo;password&rdquo; and the password set in the previous step.</li>
<li>The server accepts the client-supplied <code>loginMethod</code> and authenticates the attacker as the anonymous admin account (username = &lsquo;&rsquo;), as this is the default user created during multiuser migration with ADMIN role.</li>
<li>The server returns a new session token for the admin account.</li>
<li>Attacker uses the admin token to access administrative functions on the server.</li>
<li>Attacker can manage all users, access all budget files, modify file access controls, and change server configuration.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability grants an attacker full administrative privileges on the affected Actual server. This allows the attacker to manage all users, access all budget files regardless of ownership, modify file access controls, and change server configuration. The vulnerability affects multi-user servers running OpenID Connect that were previously configured with password authentication, meaning that a wide range of sensitive data and configurations are at risk. This can lead to significant data breaches, financial losses, and reputational damage.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Apply the patch or upgrade to <code>@actual-app/sync-server</code> version 26.4.0 or later to remediate CVE-2026-33318.</li>
<li>Implement server-side checks to restrict access to the <code>/account/change-password</code> endpoint to password-authenticated sessions only, as recommended in the advisory.</li>
<li>Require current-password confirmation before accepting a new password via the <code>/account/change-password</code> endpoint.</li>
<li>Enforce the <code>active</code> status and remove client control over login method selection in the <code>getLoginMethod()</code> function.</li>
<li>As an immediate mitigation for existing deployments, administrators who have fully migrated to OpenID and do not need password auth can remove the orphaned password row using the SQL command: <code>DELETE FROM auth WHERE method = 'password';</code>.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>privilege-escalation</category><category>web-application</category></item></channel></rss>