Skip to main content

FaustWP WordPress Plugin CVE-2026-54239

| EUVDEUVD-2026-82383 HIGH
Insufficient Verification of Data Authenticity (CWE-345)
2026-09-17 security-advisories@github.com
8.8
CVSS 3.1 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privilege WordPress user
  2. Delivery
    Request GET /generate for authorization code
  3. Exploit
    XOR IV to flip token type/user id
  4. Execution
    HMAC still validates, decrypt yields Admin token
  5. Persist
    Access REST API as Administrator
  6. Impact
    Install plugin / execute arbitrary code

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V15 - Secure Coding and Architecture Data authenticity verification
Exploitation Conditions

Requires FaustWP plugin version < 1.8.11 installed and active on a headless WordPress site with the auth/token flow enabled. The attacker must be a logged-in non-administrator (e.g. Subscriber) able to reach GET /generate to obtain a valid authorization-code token envelope - this is the core prerequisite (PR:L). No administrator privileges and no victim user interaction are needed; exploitation is network-reachable and deterministic once an account and authorization code are obtained. Limiting factors: an existing low-privilege account (or open registration) and access to the token-generation endpoint; sites not running the vulnerable FaustWP versions or without the headless auth flow are unaffected.

Impact

This is a genuine high-priority vulnerability, not a CVSS-inflated one. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H = 8.8) is well-supported by the technical evidence: a low-privileged authenticated WordPress user (e.g. Subscriber) can deterministically forge an Administrator access token through a classic AES-CBC IV bit-flipping attack, because the FaustWP token envelope HMAC covers only the ciphertext and not the 16-byte IV. The vendor-confirmed commit (cda00de) and GHSA-q6pm-r77q-qcv3 make the root cause and impact unambiguous, and the shipped regression test demonstrates the exact byte manipulations (IV[1]^= 'c'^'t' to turn 'ac'→'at', IV[3]^= '2'^'1' to change the user id) that yield a valid Administrator token - a reliable, non-probabilistic exploit primitive with no cryptographic guesswork. Weighing signals: no CISA KEV entry and no EPSS score were provided, so there is no evidence of active in-the-wild exploitation, and no packaged public exploit is listed - but the advisory and test code together provide effectively a working recipe, meaning weaponization is trivial for a competent attacker. The main risk-limiting factor is the PR:L prerequisite (attacker needs an existing low-privilege account and reachable /generate endpoint) and the relatively narrow deployment footprint of the FaustWP plugin. Net: low real-world exploitation evidence today, but high exploitability and catastrophic impact (full site takeover / RCE) where the vulnerable plugin is installed - patch to 1.8.11 promptly.

Exploit ScenarioDerived

An attacker registers or already holds a non-administrator WordPress account (e.g. Subscriber) on a site running FaustWP < 1.8.11, then calls GET /generate to obtain a valid authorization-code token envelope. Because the HMAC does not cover the IV, they XOR chosen bytes into the IV to flip the CBC-decrypted first plaintext block from 'ac|2|<exp>' to 'at|1|<exp>', producing a valid Administrator access token while the HMAC still verifies. No public packaged exploit is listed, but the vendor's own regression test spells out the exact bit-flip mechanics, so weaponization is straightforward and grants full REST API access, admin-account creation, plugin installation, and arbitrary code execution.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 17, 2026

Authentication bypass in the FaustWP WordPress plugin before 1.8.11 lets an authenticated low-privilege user (PR:L - for example a Subscriber) tamper with a valid authorization-code envelope and obtain an Administrator access token, enabling full WordPress REST API access, administrator-account creation, plugin installation, and ultimately arbitrary code execution (CVSS 8.8, CWE-345). Because the token HMAC does not cover the 16-byte AES-CBC initialization vector, XOR-ing a few bits into the IV deterministically rewrites the first decrypted block so that a Subscriber's "ac|2|<exp>" authorization code becomes "at|1|<exp>" - an admin access token - while the HMAC still validates. Exploitation is network-reachable and needs only a logged-in account able to call GET /generate plus the plugin's headless auth flow being active; no admin privileges and no victim interaction are required. No public exploit code or confirmed in-the-wild exploitation was identified at time of analysis, though the published patch diff and regression tests make the technique trivially reproducible.

RemediationAI

Vendor-released patch: upgrade the @faustwp/wordpress-plugin WordPress plugin to 1.8.11 or later, which signs IV || ciphertext on both the encrypt and decrypt sides so that any IV tampering breaks the HMAC before decryption (see https://github.com/wpengine/faustjs/security/advisories/GHSA-q6pm-r77q-qcv3 and the fix in https://github.com/wpengine/faustjs/pull/2386). Note two operational consequences: tokens minted under the pre-1.8.11 scheme will not validate after the upgrade, so users may need to re-authenticate, and simply rotating the FaustWP secret key does NOT remediate the flaw, because an attacker can request a fresh authorization code from GET /generate and repeat the bit-flip against the still-vulnerable code. If the upgrade cannot be applied immediately, apply compensating controls with awareness of their trade-offs: deactivate the plugin or disable FaustWP's headless auth/token flow on sites that do not require it (eliminates exposure but breaks headless authentication); if the flow is required, restrict and monitor access to the token endpoint GET /generate so that only trusted networks or trusted application components can reach it (may be impractical for public headless front ends); and tighten account provisioning by disabling open registration and auditing existing low-privilege accounts, since the attack prerequisite is any logged-in account capable of obtaining an authorization code (reduces the attack surface but does not fix the cryptographic flaw). Regardless of which mitigation is used, review WordPress users, REST API logs, and plugin/theme install history for unexpected Administrator accounts, new admin-level API calls, or unauthorized plugin installations, and treat any such artifacts as indicators of exploitation, since a successful bypass yields full REST API control and code execution.

Affected VersionsENISA

faustjs < 1.8.11

Affected Packages

euvd faustjs fix: 1.8.11

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

FaustWP (the @faustwp/wordpress-plugin package inside the Faust.js headless WordPress toolkit) issues authentication tokens in the code paths WPE\FaustWP\Auth\encrypt() and \decrypt() in plugins/faustwp/includes/auth/functions.php. A token is a plaintext string of the form "<type>|<user_id>|<exp>" where type is ac (authorization code), at (access token) or rt (refresh token), carried in an envelope serialized as base64( IV || HMAC || ciphertext ). The confidentiality layer is AES in CBC mode, which is byte-wise malleable: the first plaintext block is computed as plaintext[0..15] = D_k(ciphertext[0..15]) XOR IV, so anyone who changes the IV changes the corresponding plaintext bytes one-for-one while the ciphertext remains untouched and still decrypts successfully. The integrity layer was an HMAC-SHA256 computed over the ciphertext only (hash_hmac('sha256', $cipher_text, $secret_key, true)), meaning the IV sat outside the authenticated region. This is the classic root cause of CWE-345 (Insufficient Verification of Data Authenticity): the message-authentication check did not cover all security-relevant inputs of the cryptographic construction, so the MAC validated a message that had been altered. By XOR-ing IV[1] with 'c'^'t' and IV[3] with '2'^'1', an attacker converts "ac|2|..." into "at|1|..." in the decrypted output, producing a user-1 (Administrator) access token from a user-2 Subscriber authorization code. The upstream fix changes both encrypt() and decrypt() to compute the HMAC over $iv . $cipher_text, so any IV modification now fails the MAC check before decryption (commit cda00de7290f9b178cb1652d30b4cdf5bb8688d0, PR #2386, changeset "include the IV in the token envelope HMAC").

Know when PHP gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (github) PRIMARY 8.8 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 8.8 HIGH

Network-reachable with a low-privilege authenticated account (PR:L) and deterministic bit-flip (AC:L) yielding full admin/RCE, so C:H/I:H/A:H; scope left S:U per vendor.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Sep 17, 2026 - 20:20 EUVD
CVE Published
Sep 17, 2026 - 19:16 cve.org
HIGH 8.8

DescriptionCVE.org

Faust.js is a headless WordPress toolkit. Prior to 1.8.11, the FaustWP WordPress plugin authenticates only the ciphertext in its token envelope and excludes the 16-byte initialization vector from the HMAC in WPE\FaustWP\Auth\encrypt() and WPE\FaustWP\Auth\decrypt() in plugins/faustwp/includes/auth/functions.php. A logged-in non-administrator who obtains an authorization code from GET /generate can modify the unauthenticated initialization vector so that CBC decryption changes the token type and user identifier while the HMAC remains valid. This can produce an access token for an Administrator and permit full WordPress REST API access, administrator-account creation, plugin installation, and arbitrary code execution. This issue is fixed in repository version 1.8.11.

Technical POC Analysis

CWE-345 (Insufficient Verification of Data Authenticity), with a secondary CWE-639 angle per the advisory.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

The FaustWP WordPress plugin, used in headless WordPress configurations, contains an authentication bypass (CVE-2026-54239) that allows any authenticated low-privilege user, such as a Subscriber, to escalate to Administrator and achieve full site compromise including remote code execution. This affects all WordPress sites running FaustWP versions before 1.8.11, putting them at risk of data theft, defacement, and persistent backdoors. Leadership should prioritize mitigation because no vendor-released patch has been identified and exploitation requires only a basic user account.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include disabling the FaustWP plugin or its headless authentication flow, restricting access to the /generate endpoint, enforcing strict least-privilege user roles, monitoring for unauthorized admin creation or plugin changes, and deploying WAF rules to detect tampered AES-CBC initialization vectors.

Threat Intelligence Overview

EPSS Score
0.2%
Top 89% exploitable
Prevalence
Low
niche WP Engine headless-WordPress auth plugin, not a mainstream site component
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it

CVE-2012-1823 CRITICAL POC
9.8 May 11

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy