Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with page-edit rights
-
DeliveryRace concurrent draft rewrites to splice serialized payload
-
ExploitTrigger unserialize() in Draft::getDraftText()
-
ExecutionInstantiate MemoryIndex/Installer POP gadget
-
ImpactArbitrary file write and code execution
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires (1) an authenticated DokuWiki account holding edit/write rights on at least one page (PR:L - not anonymous), and (2) winning a race condition by issuing concurrent draft rewrites to splice attacker-controlled serialized data into the draft file consumed by Draft::getDraftText(), which calls unserialize() without an allowed_classes restriction. Successful code execution further depends on a usable PHP POP gadget being present in the DokuWiki codebase (e.g., MemoryIndex or Installer), which ship with the core. Limiting factors: exploitation is gated on prior authentication and edit permission, and the race (CVSS AT:P) is non-deterministic so success may need repeated attempts; instances where only trusted administrators can edit face substantially reduced exposure. This affects default configurations of DokuWiki versions before 2026-07-14c - no unusual non-default setting is required beyond granting edit rights. |
| Impact | This is a credible but conditional priority rather than a drop-everything emergency. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:L/UI:N) scores 7.7 High, and the impact triad is maximal (VC:H/VI:H/VA:H) because successful PHP object injection via CWE-502 yields arbitrary file write, deletion, and code execution. Two factors temper the raw score: PR:L means the attacker must already hold an authenticated account with edit rights (not anonymous), and AT:P (Attack Requirements: Present) reflects the need to win a race condition on concurrent draft rewrites, which is non-deterministic and not guaranteed on a single attempt. A publicly available exploit (VulnCheck researcher gist) raises practical risk because it lowers the skill barrier, but there is NO CISA KEV listing and NO EPSS score in the provided data, so there is no evidence of active, widespread exploitation - this is POC-available, not confirmed in-the-wild. Signals are internally consistent (network-reachable code path, authenticated low-privilege actor, race-gated, full host compromise on success); no contradictions between vector and description were found. Net: prioritize patching for any multi-user DokuWiki instance where untrusted or semi-trusted accounts can edit pages, but single-admin or tightly-trusted deployments face lower real-world exposure. |
| Exploit ScenarioDerived | A low-privileged but authenticated DokuWiki user with page-edit rights repeatedly opens and saves drafts while concurrently writing crafted serialized PHP into the draft file, racing the legitimate rewrite so that Draft::getDraftText() feeds attacker-controlled data to unserialize(). By splicing in a serialized MemoryIndex or Installer gadget, they trigger a POP chain leading to arbitrary file write and remote code execution on the web server. A public proof-of-concept exploit exists (researcher gist linked from the advisory), lowering the effort required, though the race condition (CVSS AT:P) means exploitation may take multiple attempts. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 20, 2026
PHP object injection in DokuWiki's draft subsystem lets an authenticated user who holds edit rights on any page race concurrent draft rewrites to splice attacker-controlled serialized data into a draft file that Draft::getDraftText() passes to unserialize() without an allowed_classes restriction, enabling arbitrary file write, file deletion, and PHP code execution through core gadgets such as MemoryIndex and Installer. All DokuWiki installations before the 2026-07-14c release are affected in their default configuration, and exploitation is gated on a valid account with write permission plus a non-deterministic race, so repeated attempts may be required; environments where only trusted administrators can edit face substantially reduced exposure. Publicly available exploit code exists (a proof-of-concept gist is linked from the vendor issue), but there is no CISA KEV confirmation of active exploitation. This is a credible but conditional priority rather than a drop-everything emergency.
RemediationAI
Upgrade to DokuWiki release 2026-07-14c or later - Vendor-released patch: 2026-07-14c (https://github.com/dokuwiki/dokuwiki/releases/tag/release-2026-07-14c), which applies allowed_classes restrictions at inc/Draft.php, inc/Cache/CacheInstructions.php, inc/parserutils.php, and lib/plugins/extension/Repository.php; the underlying change is commit 1531802afb2ac3eea147a887600fa5750e74e681 (https://github.com/dokuwiki/dokuwiki/commit/1531802afb2ac3eea147a887600fa5750e74e681), and if a full upgrade is temporarily impossible that allow-list hardening can be back-ported to the older tree. Because exploitation needs an authenticated editor, the highest-value compensating control is to shrink the editor population: remove write ACLs from untrusted or self-registered accounts, close open registration, and restrict edit permission to a small trusted group (side effect: self-service wikis and community-edited instances lose their normal workflow). If untrusted users must retain write access, disable or throttle draft autosave for them and cap concurrent requests per session at the reverse proxy (side effect: legitimate authors lose draft recovery after session loss, and aggressive rate limits can cause 429s during normal editing), and segregate the data directory so the web user cannot write outside it via open_basedir or a read-only mount of code paths - this blunts the Installer gadget's file-write payoff but does not remove the deserialization primitive. Deploying a PHP-level hardening such as disabling dangerous classes via a custom unserialize callback or an opcache/extension-level allow-list is possible but fragile and must be tested against DokuWiki's cache and metadata paths, which legitimately rely on serialized data. Detection of prior attempts can be approximated by monitoring the data directory for draft files containing serialized object markers (O: followed by a class name) and by looking for unexpected writes or deletions under conf/ and lib/, since the exploit chain ends in filesystem modification rather than a distinct HTTP signature.
Affected VersionsENISA
Affected Packages
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
The root cause is CWE-502 (Deserialization of Untrusted Data). DokuWiki serializes draft state to disk and later restores it in inc/Draft.php at getDraftText(), which called unserialize() on the raw file contents with no class allow-list. Because PHP's unserialize() instantiates whatever classes appear in the payload, an attacker who can influence the bytes on disk gains control over object construction and can chain magic methods (__destruct, __wakeup, __toString) in classes that ship with DokuWiki core - the advisory names MemoryIndex and Installer as usable POP gadgets, with the latter particularly attractive because the installer class performs filesystem operations, turning the deserialization primitive into arbitrary file write, deletion, and ultimately code execution. The draft file is normally written only with the attacker's own content, so the injection requires a race: concurrent draft save requests are issued so that one request's serialized payload lands in the file at the moment another request reads and unserializes it. The vendor patch commit 1531802afb2ac3eea147a887600fa5750e74e681 does not merely fix Draft.php; it hardens four separate unserialize() call sites across the codebase - inc/Draft.php (allowed_classes => false), inc/Cache/CacheInstructions.php (allowed_classes => ['stdClass']), inc/parserutils.php in p_read_metadata() (allowed_classes => false), and lib/plugins/extension/Repository.php in retrieveCache() (allowed_classes => false) - indicating the maintainers treated unsafe deserialization as a systemic pattern rather than a single sink. The assessed vector is CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H, i.e. network-reachable, low-privileged authenticated, no user interaction, high confidentiality/integrity/availability impact; the vendor's CVSS 4.0 score of 7.7 reflects the same profile with AT:P capturing the race requirement.
Know when Dokuwiki 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network-reachable code path (AV:N); AC:H because exploitation hinges on winning a non-deterministic draft-rewrite race; PR:L for the required authenticated edit rights; full host compromise via RCE gives C:H/I:H/A:H, scope unchanged.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
DokuWiki before 2026-07-14c contains a PHP object injection vulnerability in Draft::getDraftText() that passes draft file contents to unserialize() without restricting allowed classes. Authenticated users with edit rights can race concurrent draft rewrites to splice serialized data, instantiating gadgets like MemoryIndex or Installer for arbitrary file write, deletion, and code execution.
Articles & Coverage 1
Technical POC Analysis
CWE-502 (Deserialization of Untrusted Data), specifically PHP object injection.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 PoC candidate from github (unverified)
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
DokuWiki installations running releases before 2026-07-14c are exposed to a high-severity draft-handling flaw that can lead to arbitrary file write, file deletion, and PHP code execution on the wiki server. Exploitation requires page edit rights and a race condition, but publicly available exploit code exists, so the exposure is credible for organizations that allow broad editing privileges. Leadership should treat this as a priority patch-and-permission-review item because a successful attack could compromise wiki integrity and the underlying host.
Apply vendor patch.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
CSV Injection (aka Excel Macro Injection or Formula Injection) in /lib/plugins/usermanager/admin.php in DokuWiki 2018-04
DokuWiki 2016-06-26a and older uses $_SERVER[HTTP_HOST] instead of the baseurl setting as part of the password-reset URL
DokuWiki through 2017-02-19b has XSS in the at parameter (aka the DATE_AT variable) to doku.php. Rated medium severity (
DokuWiki through 2017-02-19c has stored XSS when rendering a malicious RSS or Atom feed, in /inc/parser/xhtml.php. Rated
DokuWiki through 2017-02-19c has stored XSS when rendering a malicious language name in a code element, in /inc/parser/x
Cross-site Scripting (XSS) - Reflected in GitHub repository splitbrain/dokuwiki prior to 2022-07-31a. Rated medium sever
HTMLCreator release_stable_2020-07-29 was discovered to contain a cross-site scripting (XSS) vulnerability via the funct
DokuWiki before 2023-04-04a allows XSS via RSS titles. Rated medium severity (CVSS 5.4), this vulnerability is remotely
Dokuwiki versions up to 2018-04-22b contains a vulnerability that allows attackers to identify valid user accounts (CVSS
The sendRequest method in HTTPClient Class in file /inc/HTTPClient.php in DokuWiki 2016-06-26a and older, when media fil
Cross-site scripting (XSS) vulnerability in doku.php in DokuWiki 2012-01-25 Angua allows remote attackers to inject arbi
Cross-site request forgery (CSRF) vulnerability in doku.php in DokuWiki 2012-01-25 Angua allows remote attackers to hija
EUVD-2026-104927
GHSA-9xhj-2fcr-x9j8
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB