Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain admin or widget-write capability
-
DeliverySubmit serialized object graph as string via admin JSON API
-
ExploitPayload stored unchanged in widget-area column
-
ExecutionUnauthenticated page load calls unserialize() without allowed_classes
-
ImpactGadget chain reaches proc_open() executing commands as web-server user
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 | Initial payload planting requires widget-write access to the baserCMS admin JSON API - i.e. an authenticated administrator, or an attacker who has separately obtained widget-write capability (the advisory cites chained XSS) - which is why this is PR:H and not unauthenticated. The specific triggering quirk is that the widget-area entity only serializes the 'widgets' value when it is an array, so submitting a string through the JSON-typed API bypasses serialization and writes raw attacker bytes to the column. Exploitation further requires that the default dependency set is present (composer/composer as a production dependency, and/or logiscape/mcp-sdk-php shipped via the bc-mcp core plugin) so a gadget chain reaching proc_open() exists. Once stored, the deserialization fires on every widget-area render - including unauthenticated public page loads - and re-executes on each request until the database row is repaired. Limiting factors: the privileged write precondition, dependence on the vulnerable version ranges (5.0.0-5.3.1, 5.4.0-5.4.1), and availability of a usable gadget class in the autoloader. |
| Impact | The supplied CVSS 3.1 vector (AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H, base 7.2 High) is internally consistent with the description: exploitation reaches the vulnerable mutator over the network through the admin JSON API, but requires high privileges (PR:H) because only an administrator - or an attacker who has already obtained widget-write capability through a separate flaw such as chained XSS - can plant the payload. The frequently-cited 'unauthenticated RMCE' framing in the advisory summary is nuanced by the description itself, which states explicitly that unauthenticated page access is only the trigger for a payload that must first be stored with privileged access, not an unauthenticated means of initial planting - this is the single most important signal for prioritization and prevents overrating the flaw as PR:N. No EPSS score, no CISA KEV listing, and no SSVC machine-readable decision were provided in the input, so probabilistic and active-exploitation signals are absent; the only priority signal is the vuln.today Decision label 'this_week'. The vendor advisory (GHSA-xf6p-r2hc-cc6w) documents two fully worked gadget chains with confirmed command execution as the web-server user, which materially raises practical exploitability for anyone who can meet the privileged-write precondition. Net assessment: a genuine high-severity RCE for environments where admin accounts or a chained XSS write primitive are reachable, but not a drop-everything mass-exploitation event given PR:H and the niche product footprint; the 'this_week' label is a reasonable match. |
| Exploit ScenarioDerived | An attacker who already controls a baserCMS admin session (or who has chained a separate XSS to gain widget-write capability) submits a crafted serialized PHP object graph as a string value for the widget-area 'widgets' field through the admin JSON API, where it is stored unchanged. On the next page render - including unauthenticated front-end requests - the stored value is passed to unserialize() without allowed_classes, instantiating a gadget chain (composer/composer ProcessExecutor or logiscape/mcp-sdk-php StdioTransport) that reaches proc_open() and runs arbitrary commands as the web-server user. The vendor advisory provides two confirmed proof-of-concept object graphs (1256 and 1374 bytes) demonstrating command execution; these are PoC references in the advisory, not verified as packaged standalone exploit code. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
PHP object injection in baserCMS 5.0.0 through 5.3.1 and 5.4.0 through 5.4.1 allows an attacker with widget-write capability to store a raw serialized string in the widget-area column, which is then deserialized with unserialize() and no allowed_classes restriction on every widget-area render, including unauthenticated public page requests. The vendor advisory documents two gadget chains on the default dependency set - composer/composer ProcessExecutor::startJob() and logiscape/mcp-sdk-php StdioTransport::connect() - both reaching proc_open() to run shell commands as the web-server user, persistently on each request until the database row is repaired. The assessed vector (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H, 7.2 High) reflects the privileged write precondition: initial planting requires an administrator or an attacker who already obtained widget-write access through a separate flaw such as chained XSS, so unauthenticated page access is a trigger after storage, not a means of planting. Vendor-released patches exist in 5.3.2 and 5.4.2; the advisory publishes PoC object-graph payloads for both chains, reportedly executed on a test instance, and no confirmed in-the-wild exploitation is reported in the supplied data.
RemediationAI
Vendor-released patch: upgrade to baserCMS 5.3.2 (for the 5.0.0-5.3.1 line) or 5.4.2 (for the 5.4.0-5.4.1 line), per https://github.com/baserproject/basercms/security/advisories/GHSA-xf6p-r2hc-cc6w, with the fixing changes in commits 38c778e92688e7f5d620a4c6b47ad7fb9e2c1529 and 59dfe61e193ae3274c195c15e7b185816d2db9db; the patch forces allowed_classes => false on both unserialize() paths, strips objects recursively from decoded arrays, and rejects widget strings that do not decode to a non-empty array. Because the payload is stored rather than delivered per-request, patching alone does not remove an already-planted object graph - the advisory notes execution continues until the database row is repaired, so widget-area rows (the bc_widget_areas widgets column) should be inspected for serialized object content and re-saved or cleared; note that this can drop legitimate widget configuration, so export/compare against known-good configuration first. On systems that cannot be upgraded immediately, the practical constraint is the privileged write precondition: restrict who can reach the admin widget-area JSON API and treat any widget-write capability obtained through a separate flaw (such as chained XSS) as sufficient to trigger code execution, accepting that this only reduces planting opportunities and does not stop an already-stored payload from firing on public page loads.
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
CWE-502 (Deserialization of Untrusted Data) rooted in a type-confusion in the bc-widget-area WidgetArea entity's _setWidgets() mutator: the widgets value is serialized with BcUtil::serialize() only when it is an array, while a string passes through and is written unmodified into the database column. Because the admin JSON API parses a JSON body, the requester fully controls the PHP type of widgets, so submitting a string instead of an array bypasses serialization entirely. On read - front-end page rendering and API responses - the stored value is passed to PHP's unserialize() without an allowed_classes restriction, and BcUtil::unserialize() additionally falls back to unserialize() on the base64-decoded value, so both raw and base64-encoded serialized strings are accepted. Widget areas render on every public page, so the deserialization primitive fires on each unauthenticated request. Two independent chains were verified on the default dependency set: composer/composer (a declared production dependency) reaching ProcessExecutor::startJob(), which passes an attacker-controlled command to Process::fromShellCommandline() and calls start(); and logiscape/mcp-sdk-php (shipped via the bc-mcp core plugin) reaching StdioTransport::connect(), which builds a command from attacker-controlled StdioServerParameters and hands it to proc_open(), with a ChainMessagesLoader arity reducer bridging Event dispatch to a zero-argument connect() call. Constructor-less instantiation also bypasses readonly property safeguards on the parameter classes. Exploitability depends on the affected version range and on a usable gadget class being present in the autoloader. The vendor fix adds allowed_classes => false to both unserialize() calls, strips objects recursively from decoded arrays, and rejects stored strings that cannot be decoded to a non-empty array.
Know when Basercms 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
AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
Payload planting requires privileged widget-write access to the admin JSON API (PR:H) over the network with no user interaction, and the gadget chains yield command execution giving full C/I/A impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
baserCMS is a website development framework. In versions 5.0.0 before 5.3.2 and 5.4.0 before 5.4.2, the widget-area entity serializes widgets only when the submitted value is an array, allowing a string submitted through the admin JSON API to be stored unchanged. Entity reads, including front-end rendering and API responses, deserialize the stored value with unserialize() without an allowed_classes restriction, accepting both raw and base64-encoded serialized data. An administrator, or an attacker who obtains widget-write capability through a separate vulnerability such as chained XSS, can plant an object graph that subsequently triggers on unauthenticated page requests. Two demonstrated gadget chains in the default dependency set use composer/composer ProcessExecutor::startJob() with Process::fromShellCommandline(), or logiscape/mcp-sdk-php StdioTransport::connect() with StdioServerParameters, to reach proc_open() and execute commands as the web-server user. Deserialization bypasses constructor-based readonly safeguards, and the stored payload can execute repeatedly until the database row is repaired. Unauthenticated page access is a trigger after privileged payload storage, not an unauthenticated means of initially planting the payload. This issue has been patched in versions 5.3.2 and 5.4.2.
Technical POC Analysis
CWE-502, deserialization of untrusted data, enabled by a type-confusion bug in the baserCMS widget-area entity.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
CVE-2026-114624 is a high-severity vulnerability in baserCMS (versions 5.0.0-5.3.1 and 5.4.0-5.4.1) that enables a privileged attacker (administrator or someone with widget-write access) to inject a serialized payload, leading to remote command execution on every public page render as the web-server user. Because the payload persists in the database, any visitor triggers the exploit, effectively turning the site into a launchpad for further compromise. Leadership should care because a single malicious widget edit can yield full server compromise, data breach, and reputational damage, with remediation dependent on patching and database cleanup.
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
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
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.
In baserCMS before 4.1.4, lib\Baser\Model\ThemeConfig.php allows remote attackers to execute arbitrary PHP code via the
SQL injection vulnerability in the baserCMS 3.0.14 and earlier, 4.0.5 and earlier allows remote attackers to execute arb
baserCMS is a website development framework. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploita
baserCMS is a website development framework. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploita
baserCMS is a Content Management system. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable,
baserCMS is a Content Management system. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable,
OS command injection in baserCMS installer prior to version 5.2.3 allows remote attackers to execute arbitrary system co
OS command injection in baserCMS update functionality allows authenticated administrators to execute arbitrary commands
OS command injection in baserCMS core update functionality allows authenticated administrators to execute arbitrary syst
baserCMS 3.0.14 and earlier, 4.0.5 and earlier allows an attacker to execute arbitrary PHP code on the server via unspec
Cross-site request forgery (CSRF) vulnerability in baserCMS plugin Mail version 3.0.10 and earlier allows remote attacke
Cross-site request forgery (CSRF) vulnerability in baserCMS plugin Blog version 3.0.10 and earlier allows remote attacke
EUVD-2026-108995
NVD
CVE.org
EPSS
GitHub
VulDB
Exploit-DB