/

CVE-2026-114624

Severity:

HIGH RISK

(7.2)

Unsafe Deserialization (CWE-502) in baserCMS Widgets

CVE-2026-114624

Deferred

Vulnerability type

Category:

Unsafe Deserialization

CWE:

CWE-502

Impact:

Remote Code Execution

Severity:

HIGH RISK

(7.2)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

baserCMS unsafely deserializes widget-area data, allowing a crafted serialized object graph to trigger command execution as the web-server user. Exploitation generally requires administrator-level widget-write access or equivalent access obtained through another vulnerability, after which ordinary page requests may repeatedly trigger the stored payload.

baserCMS unsafely deserializes widget-area data, allowing a crafted serialized object graph to trigger command execution as the web-server user. Exploitation generally requires administrator-level widget-write access or equivalent access obtained through another vulnerability, after which ordinary page requests may repeatedly trigger the stored payload.

Affected context

The issue occurs in baserCMS widget-area handling when a submitted non-array value can be stored without normal serialization and is later passed to unserialize() without restricting permitted classes. This affects deployments where an attacker can cause crafted widget data to be stored through the administrative JSON API, including cases where write capability is obtained by chaining another vulnerability.

The issue occurs in baserCMS widget-area handling when a submitted non-array value can be stored without normal serialization and is later passed to unserialize() without restricting permitted classes. This affects deployments where an attacker can cause crafted widget data to be stored through the administrative JSON API, including cases where write capability is obtained by chaining another vulnerability.

Exploit preconditions

  • Attack surface: Administrative widget-management functionality and subsequent entity-read paths
  • Required access: Administrator privileges or equivalent widget-write capability; unauthenticated access alone does not initially plant the payload
  • Trigger point: Deserialization during front-end rendering, API responses, or other widget-entity reads
  • Why exploitation is possible: Stored data is deserialized without an allowed-classes restriction, allowing object graphs to invoke available process-execution gadget chains
  • Persistence condition: The database value may trigger repeatedly until the affected row is repaired or removed
  • Attack surface: Administrative widget-management functionality and subsequent entity-read paths
  • Required access: Administrator privileges or equivalent widget-write capability; unauthenticated access alone does not initially plant the payload
  • Trigger point: Deserialization during front-end rendering, API responses, or other widget-entity reads
  • Why exploitation is possible: Stored data is deserialized without an allowed-classes restriction, allowing object graphs to invoke available process-execution gadget chains
  • Persistence condition: The database value may trigger repeatedly until the affected row is repaired or removed

Why this happens

The vulnerability results from treating attacker-influenced widget data as trusted serialized PHP state. When a non-array submission bypasses normal serialization handling, the value can be stored unchanged and later processed by unserialize() without class restrictions.

This maps to CWE-502: Deserialization of Untrusted Data. The insecure pattern permits unexpected object construction and magic-method or gadget-chain behavior during entity reads, bypassing protections that would otherwise be applied during ordinary object construction.

The vulnerability results from treating attacker-influenced widget data as trusted serialized PHP state. When a non-array submission bypasses normal serialization handling, the value can be stored unchanged and later processed by unserialize() without class restrictions.

This maps to CWE-502: Deserialization of Untrusted Data. The insecure pattern permits unexpected object construction and magic-method or gadget-chain behavior during entity reads, bypassing protections that would otherwise be applied during ordinary object construction.

Potential impact

  • Arbitrary operating-system commands could execute as the web-server user
  • The baserCMS application and its stored content may be compromised
  • Persistent payloads may execute repeatedly on affected requests
  • Sensitive application data could be accessed or modified
  • The server could be used for lateral movement or further compromise
  • Arbitrary operating-system commands could execute as the web-server user
  • The baserCMS application and its stored content may be compromised
  • Persistent payloads may execute repeatedly on affected requests
  • Sensitive application data could be accessed or modified
  • The server could be used for lateral movement or further compromise

General mitigation guidance

Mitigation focuses on eliminating unsafe deserialization and reducing trust in widget data.

Common defensive patterns include:

  • Use structured, safe formats for widget state instead of native PHP serialization
  • Reject unexpected scalar values and enforce strict schemas before persistence
  • If legacy serialization is unavoidable, apply an explicit allowed-classes policy and validate the resulting data type
  • Keep widget-write capabilities narrowly scoped and protected by strong authorization controls
  • Minimize web-server privileges and restrict process-spawning capabilities where practical
  • Treat data written through administrative APIs as untrusted until validated and normalized
  • Repair or remove previously stored values that do not conform to the approved widget schema

Mitigation focuses on eliminating unsafe deserialization and reducing trust in widget data.

Common defensive patterns include:

  • Use structured, safe formats for widget state instead of native PHP serialization
  • Reject unexpected scalar values and enforce strict schemas before persistence
  • If legacy serialization is unavoidable, apply an explicit allowed-classes policy and validate the resulting data type
  • Keep widget-write capabilities narrowly scoped and protected by strong authorization controls
  • Minimize web-server privileges and restrict process-spawning capabilities where practical
  • Treat data written through administrative APIs as untrusted until validated and normalized
  • Repair or remove previously stored values that do not conform to the approved widget schema

How teams detect issues like this

Organizations can look for this issue through:

  • Static analysis rules identifying unserialize() calls on request-derived or database-derived values
  • Code review checks for missing allowed_classes restrictions and unsafe type coercion
  • Tests confirming that widget APIs reject unexpected scalar or serialized-object input
  • Database searches for anomalous serialized object markers or base64-encoded serialized values in widget fields
  • Runtime monitoring for unexpected child-process creation by the web server
  • Policy enforcement that prohibits native object deserialization for content-management data

Automated security scanning and code-review tools may help identify unsafe deserialization paths, but findings should be confirmed against actual data flows and authorization boundaries.

Organizations can look for this issue through:

  • Static analysis rules identifying unserialize() calls on request-derived or database-derived values
  • Code review checks for missing allowed_classes restrictions and unsafe type coercion
  • Tests confirming that widget APIs reject unexpected scalar or serialized-object input
  • Database searches for anomalous serialized object markers or base64-encoded serialized values in widget fields
  • Runtime monitoring for unexpected child-process creation by the web server
  • Policy enforcement that prohibits native object deserialization for content-management data

Automated security scanning and code-review tools may help identify unsafe deserialization paths, but findings should be confirmed against actual data flows and authorization boundaries.

Sources

SourceLink
github.comgithub.com/baserproject/basercms/commit/38c778e92688e7f5d620a4c6b47ad7fb9e2c1529
github.comgithub.com/baserproject/basercms/commit/59dfe61e193ae3274c195c15e7b185816d2db9db
github.comgithub.com/baserproject/basercms/releases/tag/5.3.2
github.comgithub.com/baserproject/basercms/releases/tag/5.4.2
github.comgithub.com/baserproject/basercms/security/advisories/GHSA-xf6p-r2hc-cc6w

Frequently asked

questions

Unauthenticated page access can trigger a payload that has already been stored, but it does not normally provide the initial ability to plant that payload. Initial exploitation requires administrator access or equivalent widget-write capability, potentially obtained through another vulnerability.

No. The relevant capability is the ability to submit or alter widget data through an exposed application path. The resulting commands execute with the privileges of the web-server process.

Avoid native PHP object deserialization for user-controlled or database-backed content. Prefer strict structured-data parsing, schema validation, and explicit type checks; where legacy deserialization remains necessary, restrict permitted classes.

Enforce authorization on widget-write operations, reject unexpected input types, review all deserialization data flows, limit process privileges, and monitor for anomalous serialized values and child-process activity.

Unauthenticated page access can trigger a payload that has already been stored, but it does not normally provide the initial ability to plant that payload. Initial exploitation requires administrator access or equivalent widget-write capability, potentially obtained through another vulnerability.

No. The relevant capability is the ability to submit or alter widget data through an exposed application path. The resulting commands execute with the privileges of the web-server process.

Avoid native PHP object deserialization for user-controlled or database-backed content. Prefer strict structured-data parsing, schema validation, and explicit type checks; where legacy deserialization remains necessary, restrict permitted classes.

Enforce authorization on widget-write operations, reject unexpected input types, review all deserialization data flows, limit process privileges, and monitor for anomalous serialized values and child-process activity.

Find out what's already
exploitable in your codebase.