Description
Cotonti CMS's Comments plugin deserializes user-supplied data without restricting the classes that may be instantiated. In plugins/comments/controllers/actions/CreateAction.php, a POST parameter obtained via (trim-only sanitization) is passed to with no restriction, reachable by any member with write access to comments (the default setting in plugins/comments/comments.setup.php).
Published: 2026-08-05
Score: 7.7 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Cotonti CMS's Comments plugin deserializes user‑supplied data without restricting the classes that may be instantiated. A POST parameter obtained via trim‑only sanitization is passed to unserialize() with no restriction. Any member with write access to comments can supply this parameter, making the vulnerability reachable via the public Create action. This PHP Object Injection allows an attacker to construct a serialized payload that will instantiate arbitrary PHP objects. Depending on the available gadget chains in the system, the attacker could achieve destructive database writes or potentially remote code execution.

Affected Systems

The vulnerability is triggered in any instance of Cotonti CMS that includes the Comments plugin and grants members write permissions to comments. The CNA release notes do not list specific version numbers, so based on the absence of a version range in the CNA data, we infer that all versions that have not applied a remediation removing the unsafe unserialize are potentially affected.

Risk and Exploitability

The CVSS base score of 7.7 indicates high severity. The attack vector is web‑based, using a POST request to the CreateAction endpoint. Because any member with default RW rights can reach the vulnerable parameter, the privilege requirement is very low. EPSS is < 1 % and the vulnerability is not yet cataloged in CISA’s KEV program, suggesting that exploitation has not yet been widely observed. Nonetheless, the ability to inject arbitrary PHP objects that can trigger destructive database writes and, if gadget chains exist, potentially remote code execution, presents a considerable risk to exposed installations.

Generated by OpenCVE AI on August 10, 2026 at 20:09 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Cotonti CMS to the latest release that includes the fixed Comments plugin.
  • If upgrading is not immediately possible, edit the plugin’s CreateAction.php to restrict unserialize() by specifying an allowed_classes array or replace unserialize() with a safe deserialization routine.
  • Disable or remove the Comments plugin if it is not required, or configure comment write permissions to administrators only to reduce the attack surface.

Generated by OpenCVE AI on August 10, 2026 at 20:09 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 10 Aug 2026 12:00:00 +0000

Type Values Removed Values Added
Description Cotonti CMS's Comments plugin deserializes user-supplied data without restricting the classes that may be instantiated. In plugins/comments/controllers/actions/CreateAction.php, a `ci` POST parameter obtained via `cot_import('ci', 'P', 'TXT')` (trim-only sanitization) is passed to `unserialize(base64_decode($ci))` with no `allowed_classes` restriction, reachable by any member with write access to comments (the default `Auth_members => 'RW'` setting in plugins/comments/comments.setup.php). In plugins/comments/controllers/actions/EditAction.php, a `cb` parameter is similarly deserialized via `unserialize(base64_decode($this->comeback))` in prepareComeBack(), reachable by any member editing their own comment. Because unserialize() is called without allowed_classes, an attacker can construct a serialized PHP object of any class loaded by Cotonti (a PHP Object Injection primitive). This was demonstrated in practice using Cotonti's own MySQL_cache class: a crafted serialized MySQL_cache object, once deserialized and later garbage-collected, triggers its __destruct()->flush() chain, causing an attacker-controlled INSERT INTO cot_cache with attacker-chosen row values — confirming genuine POP-chain exploitation, with further impact (including potential RCE) contingent on other gadget chains available in a given Cotonti installation's loaded classes. A third sink in DeleteAction.php contains the identical unserialize() pattern but is gated behind an admin-only authorization check and is not reachable by ordinary members. Cotonti CMS's Comments plugin deserializes user-supplied data without restricting the classes that may be instantiated. In plugins/comments/controllers/actions/CreateAction.php, a POST parameter obtained via (trim-only sanitization) is passed to with no restriction, reachable by any member with write access to comments (the default setting in plugins/comments/comments.setup.php).
Title Cotonti CMS - Comments Plugin PHP Object Injection via Unrestricted unserialize() in Create/Edit Actions Cotonti CMS Comments Plugin PHP Object Injection via Unrestricted unserialize() in Create/Edit Actions

Mon, 10 Aug 2026 11:45:00 +0000

Type Values Removed Values Added
Title Cotonti CMS Comments Plugin PHP Object Injection via Unrestricted unserialize() in Create/Edit Actions Cotonti CMS - Comments Plugin PHP Object Injection via Unrestricted unserialize() in Create/Edit Actions

Wed, 05 Aug 2026 17:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 05 Aug 2026 15:15:00 +0000

Type Values Removed Values Added
First Time appeared Cotonti
Cotonti cotonti
Vendors & Products Cotonti
Cotonti cotonti

Wed, 05 Aug 2026 13:15:00 +0000

Type Values Removed Values Added
Description Cotonti CMS's Comments plugin deserializes user-supplied data without restricting the classes that may be instantiated. In plugins/comments/controllers/actions/CreateAction.php, a `ci` POST parameter obtained via `cot_import('ci', 'P', 'TXT')` (trim-only sanitization) is passed to `unserialize(base64_decode($ci))` with no `allowed_classes` restriction, reachable by any member with write access to comments (the default `Auth_members => 'RW'` setting in plugins/comments/comments.setup.php). In plugins/comments/controllers/actions/EditAction.php, a `cb` parameter is similarly deserialized via `unserialize(base64_decode($this->comeback))` in prepareComeBack(), reachable by any member editing their own comment. Because unserialize() is called without allowed_classes, an attacker can construct a serialized PHP object of any class loaded by Cotonti (a PHP Object Injection primitive). This was demonstrated in practice using Cotonti's own MySQL_cache class: a crafted serialized MySQL_cache object, once deserialized and later garbage-collected, triggers its __destruct()->flush() chain, causing an attacker-controlled INSERT INTO cot_cache with attacker-chosen row values — confirming genuine POP-chain exploitation, with further impact (including potential RCE) contingent on other gadget chains available in a given Cotonti installation's loaded classes. A third sink in DeleteAction.php contains the identical unserialize() pattern but is gated behind an admin-only authorization check and is not reachable by ordinary members.
Title Cotonti CMS Comments Plugin PHP Object Injection via Unrestricted unserialize() in Create/Edit Actions
Weaknesses CWE-502
References
Metrics cvssV3_1

{'score': 7.7, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L'}


cve-icon MITRE

Status: PUBLISHED

Assigner: TuranSec

Published:

Updated: 2026-08-10T11:47:30.270Z

Reserved: 2026-08-05T12:37:57.358Z

Link: CVE-2026-71294

cve-icon Vulnrichment

Updated: 2026-08-05T15:35:05.787Z

cve-icon NVD

Status : Received

Published: 2026-08-05T13:24:54.180

Modified: 2026-08-10T12:17:32.113

Link: CVE-2026-71294

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-10T20:15:03Z

Weaknesses
  • CWE-502

    Deserialization of Untrusted Data