CVE-2026-33318 Vulnerability Analysis & Exploit Details

CVE-2026-33318
Vulnerability Scoring

8.8
/10
Severe Risk

Cybersecurity professionals consider CVE-2026-33318 an immediate threat requiring urgent mitigation.

Attack Complexity Details

  • Attack Complexity: Low
    Exploits can be performed without significant complexity or special conditions.
  • Attack Vector: Network
    Vulnerability is exploitable over a network without physical access.
  • Privileges Required: Low
    Some privileges are necessary to exploit the vulnerability.
  • Scope: Unchanged
    Exploit remains within the originally vulnerable component.
  • User Interaction: None
    No user interaction is necessary for exploitation.

CVE-2026-33318 Details

Status: Analyzed

Last updated: 🕒 27 Apr 2026, 15:01 UTC
Originally published on: 🕒 24 Apr 2026, 03:16 UTC

Time between publication and last update: 3 days

CVSS Release: version 3

CVSS3 Source

security-advisories@github.com

CVSS3 Type

Secondary

CVSS3 Vector

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

CVE-2026-33318 Vulnerability Summary

CVE-2026-33318: Actual is a local-first personal finance tool. Prior to version 26.4.0, any authenticated user (including `BASIC` role) can escalate to `ADMIN` on servers migrated from password authentication to OpenID Connect. Three weaknesses combine: `POST /account/change-password` has no authorization check, allowing any session to overwrite the password hash; the inactive password `auth` row is never removed on migration; and the login endpoint accepts a client-supplied `loginMethod` that bypasses the server's active auth configuration. Together these allow an attacker to set a known password and authenticate as the anonymous admin account created during the multiuser migration. The three weaknesses form a single, sequential exploit chain — none produces privilege escalation on its own. Missing authorization on POST /change-password allows overwriting a password hash, but only matters if there is an orphaned row to target. Orphaned password row persisting after migration provides the target row, but is harmless without the ability to authenticate using it. Client-controlled loginMethod: "password" allows forcing password-based auth, but is useless without a known hash established by step 1. All three must be chained in sequence to achieve the impact. No single weakness independently results in privilege escalation. The single root cause is the missing authorization check on /change-password; the other two are preconditions that make it exploitable. Version 26.4.0 contains a fix.

Assessing the Risk of CVE-2026-33318

Access Complexity Graph

The exploitability of CVE-2026-33318 depends on two key factors: attack complexity (the level of effort required to execute an exploit) and privileges required (the access level an attacker needs).

Exploitability Analysis for CVE-2026-33318

CVE-2026-33318 presents an accessible attack vector with minimal effort required. Restricting access controls and implementing security updates are critical to reducing exploitation risks.

Understanding AC and PR

A lower complexity and fewer privilege requirements make exploitation easier. Security teams should evaluate these aspects to determine the urgency of mitigation strategies, such as patch management and access control policies.

Attack Complexity (AC) measures the difficulty in executing an exploit. A high AC means that specific conditions must be met, making an attack more challenging, while a low AC means the vulnerability can be exploited with minimal effort.

Privileges Required (PR) determine the level of system access necessary for an attack. Vulnerabilities requiring no privileges are more accessible to attackers, whereas high privilege requirements limit exploitation to authorized users with elevated access.

CVSS Score Breakdown Chart

Above is the CVSS Sub-score Breakdown for CVE-2026-33318, illustrating how Base, Impact, and Exploitability factors combine to form the overall severity rating. A higher sub-score typically indicates a more severe or easier-to-exploit vulnerability.

CIA Impact Analysis

Below is the Impact Analysis for CVE-2026-33318, showing how Confidentiality, Integrity, and Availability might be affected if the vulnerability is exploited. Higher values usually signal greater potential damage.

  • Confidentiality: High
    Exploiting CVE-2026-33318 can result in unauthorized access to sensitive data, severely compromising data privacy.
  • Integrity: High
    CVE-2026-33318 could allow unauthorized modifications to data, potentially affecting system reliability and trust.
  • Availability: High
    CVE-2026-33318 can disrupt system operations, potentially causing complete denial of service (DoS).

CVE-2026-33318 References

External References

CWE Common Weakness Enumeration

CWE-862

CAPEC Common Attack Pattern Enumeration and Classification

  • Exploitation of Thunderbolt Protection Flaws CAPEC-665 An adversary leverages a firmware weakness within the Thunderbolt protocol, on a computing device to manipulate Thunderbolt controller firmware in order to exploit vulnerabilities in the implementation of authorization and verification schemes within Thunderbolt protection mechanisms. Upon gaining physical access to a target device, the adversary conducts high-level firmware manipulation of the victim Thunderbolt controller SPI (Serial Peripheral Interface) flash, through the use of a SPI Programing device and an external Thunderbolt device, typically as the target device is booting up. If successful, this allows the adversary to modify memory, subvert authentication mechanisms, spoof identities and content, and extract data and memory from the target device. Currently 7 major vulnerabilities exist within Thunderbolt protocol with 9 attack vectors as noted in the Execution Flow.

Vulnerable Configurations

  • cpe:2.3:a:actualbudget:actual:22.12.9:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:22.12.9:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.1.12:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.1.12:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.2.5:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.2.5:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.2.9:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.2.9:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.3.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.3.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.3.2:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.3.2:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.4.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.4.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.4.1:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.4.1:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.4.2:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.4.2:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.5.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.5.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.6.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.6.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.7.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.7.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.7.1:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.7.1:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.7.2:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.7.2:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.8.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.8.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.8.1:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.8.1:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.9.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.9.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.10.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.10.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.11.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.11.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:23.12.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:23.12.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.1.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.1.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.2.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.2.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.3.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.3.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.4.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.4.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.5.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.5.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.6.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.6.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.7.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.7.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.8.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.8.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.9.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.9.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.10.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.10.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.10.1:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.10.1:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.11.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.11.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:24.12.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:24.12.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.1.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.1.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.2.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.2.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.2.1:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.2.1:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.3.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.3.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.3.1:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.3.1:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.4.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.4.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.5.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.5.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.6.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.6.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.6.1:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.6.1:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.7.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.7.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.7.1:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.7.1:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.8.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.8.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.9.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.9.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.10.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.10.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.11.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.11.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:25.12.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:25.12.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:26.1.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:26.1.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:26.2.0:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:26.2.0:*:*:*:*:node.js:*:*
  • cpe:2.3:a:actualbudget:actual:26.2.1:*:*:*:*:node.js:*:*
    cpe:2.3:a:actualbudget:actual:26.2.1:*:*:*:*:node.js:*:*

Protect Your Infrastructure against CVE-2026-33318: Combat Critical CVE Threats

Stay updated with real-time CVE vulnerabilities and take action to secure your systems. Enhance your cybersecurity posture with the latest threat intelligence and mitigation techniques. Develop the skills necessary to defend against CVEs and secure critical infrastructures. Join the top cybersecurity professionals safeguarding today's infrastructures.

Other 5 Recently Published CVEs Vulnerabilities

  • CVE-2026-8288 – A vulnerability was determined in Open5GS up to 2.7.7. This affects the function gsm_handle_pdu_session_modification_qos_flow_descriptions of the f...
  • CVE-2025-9973 – Due to not validating the organization context when executing adaptive authentication flows, the WSO2 Identity Server allows adaptive authenticatio...
  • CVE-2025-10470 – The Magic Link authentication flow accepts multiple invalid authentication requests without adequate rate limiting or resource control, leading to ...
  • CVE-2026-6956 – ATutor is vulnerable to Reflected XSS in /install/install.php endpoint. An attacker can provide a specially crafted URL that, when opened, results ...
  • CVE-2026-6909 – ATutor is vulnerable to Reflected XSS in /install/upgrade.php endpoint. An attacker can provide a specially crafted URL that, when opened, results ...