Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain DB write via SQLi or admin panel
-
DeliveryInject serialized POP gadget into user_career.extra_data
-
ExploitReach unserialize() in career.lib.php or import_csv.php
-
ExecutionInstantiate Symfony/Doctrine/Monolog gadget chain
-
ImpactExecute OS 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 | Exploitation requires the attacker to first write attacker-controlled serialized PHP data into the user_career.extra_data database column - the advisory names three concrete routes: a separate SQL injection, a compromised/malicious admin CSV import processed by public/main/cron/import_csv.php, or access to a lower-privilege admin panel that can populate user_career records. Additionally, the vulnerable unserialize() path must be reached (career diagram rendering in career.lib.php line 495, or the import_csv.php career-results cron at line 2768), and a usable POP gadget chain must exist in the autoloaded Symfony, Doctrine, or Monolog dependencies. Limiting factors: the flaw cannot be triggered by an unauthenticated single request on its own (PR:L and AC:H), it depends on obtaining a database-write primitive, and only Chamilo LMS 2.0.0 is affected (fixed in 2.0.1). |
| Impact | This is a genuine but conditional Remote Code Execution issue (CWE-502 PHP Object Injection) whose real-world priority is moderate rather than critical, despite the 7.5 'High' CVSS score. The supplied CVSS vector (CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H) encodes the central caveat: AC:H and PR:L reflect that the flaw is not directly exploitable on its own - the attacker must first obtain the ability to write crafted serialized data into the user_career.extra_data database column. No EPSS score was provided, the CVE is not listed in CISA KEV, and no working proof-of-concept or exploit code is present in the inputs - only the GHSA advisory and the fix commit, which document the vulnerable lines but not an exploitation routine. These signals are consistent with each other: a chaining/second-stage vulnerability with no confirmed exploitation. The vuln.today decision label is 'this_week', which matches a patch-promptly-but-not-emergency posture. Note one tension worth verifying: the description and CVSS use AV:N, but exploitation actually depends on a separate write primitive (SQL injection, malicious admin CSV import, or a lower-privilege admin panel) rather than a single network request, so the effective attack surface is narrower than 'network-reachable RCE' implies. |
| Exploit ScenarioDerived | An attacker who already holds a lower-privilege admin account (or has found a separate SQL injection) writes a crafted serialized PHP object into the user_career.extra_data column. When career.lib.php renders the career diagram or import_csv.php processes career results, the native unserialize() call instantiates the object and triggers a POP gadget chain in the autoloaded Symfony, Doctrine, or Monolog components, yielding OS command execution as the web server user. No public working exploit is present in the inputs, and the AC:H rating reflects that a prerequisite database-write primitive must be obtained first. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
PHP object injection in Chamilo LMS 2.0.0 can escalate to remote code execution: two code paths (career.lib.php line 495 and cron/import_csv.php line 2768) call PHP's native unserialize() on the user_career.extra_data database column without restricting allowed classes, so an attacker who can write crafted serialized data into that column can instantiate arbitrary objects and drive POP gadget chains in the bundled Symfony, Doctrine and Monolog libraries. The prerequisite write primitive is not available in a single request - the advisory names a separate SQL injection, a compromised admin CSV import, or a lower-privilege admin panel - and a usable gadget chain must also be present, which is why the assessed severity is High (7.5) but with AC:H and PR:L and the current priority is 'this week' rather than emergency. No public exploit code and no confirmed active exploitation were identified at time of analysis; vendor-released patch: Chamilo LMS 2.0.1.
RemediationAI
Vendor-released patch: upgrade Chamilo LMS to 2.0.1, which replaces both native unserialize() calls with UnserializeApi::unserialize('not_allowed_classes', ...) as shown in commit https://github.com/chamilo/chamilo-lms/commit/4da33d8fd317fe5d58041f3202dddc62282ef2fb and the v2.0.1 release notes (https://github.com/chamilo/chamilo-lms/releases/tag/v2.0.1); full details are in advisory GHSA-pr59-4rm7-ghwx. If upgrading cannot be done immediately, the effective controls target the database-write prerequisite rather than the sink: remediate any SQL injection reachable by the same users, restrict who can run the import_csv.php career-results cron and who holds the admin roles able to populate user_career records, and audit/clean existing user_career.extra_data rows for serialized payloads containing class names - with the trade-off that tightening admin and cron access reduces legitimate administrative functionality, and rewriting extra_data rows can corrupt career data that the application still needs to read back. Note that Chamilo 2.0.1's fix routes these values through the whitelist wrapper, so after upgrading verify that legitimately written extra_data records still decode under the restricted class policy. No vendor workaround beyond updating is described in the supplied sources.
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) in a PHP application. Chamilo stores per-user career data as a serialized PHP blob in the user_career.extra_data column; the two affected locations passed that blob straight to PHP's native unserialize() without the allowed_classes => false option, meaning any class name embedded in the payload is instantiated and its magic methods (__wakeup, __destruct, __toString) execute. Because the Composer autoloader pulls in Symfony, Doctrine and Monolog, POP gadget chains from those components become reachable and can be chained to OS command execution as the web server user. Notably the same file already contained a hardened wrapper - public/main/inc/lib/UnserializeApi.php, which enforces an allowed-class whitelist, and is used correctly at career.lib.php line 475 for a different field - so this is an inconsistency in applying an existing safe API rather than a missing capability. The fix commit 4da33d8fd317fe5d58041f3202dddc62282ef2fb replaces both native unserialize() calls with UnserializeApi::unserialize('not_allowed_classes', ...), and adds an emptiness guard in the cron path. The CPE cpe:2.3:a:chamilo:chamilo-lms:*:*:*:*:*:*:*:* is unversioned, but the package metadata and advisory scope the flaw to Composer package chamilo/chamilo-lms 2.0.0, fixed in 2.0.1. The trigger is not a network-reachable parse of attacker-supplied request data; the deserialization only fires on data already persisted in the database, which is why the attack path hinges on a separate database-write primitive.
Know when Chamilo Lms 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:H/PR:L/UI:N/S:U/C:H/I:H/A:H
AC:H and PR:L because exploitation requires a chained write primitive via an authenticated low-privilege account or injection, not a direct request; full C/I/A impact from RCE as the web server user.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Chamilo LMS is an open-source learning management system. Prior to 2.0.1, public/main/inc/lib/career.lib.php and public/main/cron/import_csv.php call PHP's native unserialize() on user_career.extra_data retrieved from the database without the allowed_classes: false safety option. An attacker able to write crafted serialized PHP objects to that column, for example through a separate SQL injection, a compromised admin CSV import, or a lower-privilege admin panel, can instantiate arbitrary PHP objects and trigger POP gadget chains in autoloaded Symfony, Doctrine, or Monolog components. This permits arbitrary OS commands as the web server user, compromising server confidentiality, integrity, and availability. This issue is fixed in version 2.0.1.
Technical POC Analysis
CWE-502 (Deserialization of Untrusted Data).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Chamilo LMS 2.0.0 contains a high-severity vulnerability (CVE-2026-45145) that could allow an attacker with some level of access to escalate to remote code execution. This affects organizations using Chamilo for learning management, potentially compromising sensitive data and system integrity. Leadership should care because exploitation requires a pre-existing foothold, but successful attacks could lead to full system compromise.
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
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
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.
More in Chamilo Lms
View allChamilo LMS prior to 1.11.28 has a code injection through SOAP request parameters enabling remote code execution.
Chamilo LMS prior to 1.11.30 has a time-based SQL injection in a different endpoint, providing an additional database ex
Chamilo LMS prior to 1.11.30 has an error-based SQL injection enabling database extraction.
Chamilo LMS v1.11.x was discovered to contain a SQL injection via the doc parameter in main/plagiarism/compilatio/upload
Chamilo LMS 1.11.8 and 2.x allows remote code execution through an lp_upload.php unauthenticated file upload feature. Ra
Chamilo LMS prior to 1.11.30 has a blind SSRF vulnerability enabling internal network reconnaissance from the learning p
Unrestricted file upload in big file upload functionality in `/main/inc/lib/javascript/bigupload/inc/bigUpload.php` in C
Chamilo is a learning management system. [CVSS 8.8 HIGH]
Chamilo is a learning management system. Prior to version 1.11.30, an input validation vulnerability exists when importi
Chamilo LMS 1.11.26 is vulnerable to Incorrect Access Control via main/auth/profile. Rated high severity (CVSS 8.8), thi
Unrestricted file upload in `/main/inc/ajax/work.ajax.php` in Chamilo LMS <= v1.11.24 allows authenticated attackers wit
Unrestricted file upload in `/main/inc/ajax/exercise.ajax.php` in Chamilo LMS <= v1.11.24 allows authenticated attackers
EUVD-2026-113997
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB