Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network-reachable HTTP chain with low complexity and no user interaction; PR:L reflects the required low-privilege account (self-registration can lower it), and file overwrite of header.inc.php yields full C/I/A impact.
Primary rating from Vendor (https://github.com/EGroupware/egroupware).
CVSS VectorVendor: https://github.com/EGroupware/egroupware
Lifecycle Timeline
5DescriptionCVE.org
Summary
A critical vulnerability has been identified in EGroupware that may lead to Remote Code Execution (RCE). The issue allows an authenticated attacker to execute arbitrary commands on the server. If user self-registration is enabled, the vulnerability may be exploitable without prior authentication.
The vulnerability stems from improper authorization checks combined with a file write primitive and an arbitrary file read vulnerability, which together enable full system compromise.
Details
1. Improper Authorization in SmallPartMediaRecorder::ajax_upload()
The vulnerability originates in:
EGroupware\SmallParT\Widgets\SmallPartMediaRecorder::ajax_upload()
The function attempts to verify whether the current user is a teacher of the specified course ID before allowing a file upload.
The critical authorization check ensures that the course access control list (ACL) contains:
$required_acl (self::ROLE_TEACHER, i.e., 3)
However, the course_acl value is derived from user-controlled request data.
_Bypass Technique_
A crafted request can manipulate the participant_role value inside the request body:
{
"video": {
"course_id": {
"participants": [
{
"account_id": "7",
"name": "Test",
"joined_at": "2026-01-10",
"participant_role": 3
}
],
"account_id": "7",
"course_id": "1"
},
"video_hash": ".",
"video_type": "file_here"
}
}Because the course ACL is taken from participant_role, setting it to 3 allows bypassing the isTeacher check.
2. Arbitrary File Write
After bypassing authorization, the function uploads the provided file into a controllable file path.
The file path is derived from the video_type (or video_path) value, enabling path traversal.
Due to file permission restrictions (server running as www-data), writable targets are limited. One viable target is ./header.inc.php
3. Constraints
Writing a simple PHP webshell may not immediately execute due to OPcache.
An invalid header.inc.php file will break the system and prevent the server from running.
Therefore, a valid file structure must be preserved.
4. Arbitrary File Read
A second vulnerability allows arbitrary file read via:
/egroupware/index.php?menuaction=importexport.importexport_export_ui.download&_filename=../../../usr/share/egroupware/header.inc.php&_suffix=txt&_type=text/plain&filename=leak
The issue resides in:
importexport_export_ui::download
The _filename parameter is user-controlled and used to read arbitrary files.
This allows retrieving the original header.inc.php content.
5. Achieving Remote Code Execution
By combining: Arbitrary file read (to retrieve valid header.inc.php); Arbitrary file write (to overwrite it with modified content), an attacker can inject controlled PHP code while preserving file validity.
This results in Remote Code Execution after server restart, or OPcache expiration. An alternative impact includes modifying the admin setup password to gain full system control.
Impact
Remote Code Execution Full system compromise Arbitrary file read Arbitrary file write Potential complete takeover of EGroupware instance
Reported by
This finding was discovered by Huong Kieu of Cenobe Security (https://cenobe.com/)
Articles & Coverage 1
AnalysisAI
Remote code execution in EGroupware (composer package egroupware/egroupware) lets an authenticated low-privilege user chain an authorization bypass, an arbitrary file write, and an arbitrary file read to fully compromise the server. An attacker forges the participant_role value in a SmallPartMediaRecorder::ajax_upload() request to impersonate a course teacher, then uses path traversal to overwrite header.inc.php with attacker-controlled PHP while preserving a valid file structure recovered via the importexport download read primitive. Where user self-registration is enabled the entire chain can be reached without pre-existing credentials; no public exploit code is identified at time of analysis despite a detailed vendor advisory, and the flaw is not in CISA KEV.
Technical ContextAI
EGroupware is a PHP-based collaborative groupware suite (calendar, mail, CRM, e-learning via the SmallParT module) distributed as the Composer package egroupware/egroupware. The root cause class is CWE-22 (improper limitation of a pathname to a restricted directory, i.e., path traversal), compounded by a broken authorization model. In SmallPartMediaRecorder::ajax_upload() the teacher check reads the course ACL role from the request body's participant_role field rather than from a server-side trusted source, so client-supplied JSON dictates the privilege decision. The subsequent upload derives its destination from the user-controlled video_type/video_path value, permitting directory traversal to sensitive targets such as header.inc.php (the central EGroupware configuration bootstrap). A separate flaw in importexport_export_ui::download uses the user-controlled _filename parameter to read arbitrary files, allowing the attacker to exfiltrate the legitimate header.inc.php so a modified-but-valid replacement can be written without breaking the application. OPcache means injected PHP executes after a server restart or cache expiration.
RemediationAI
Vendor-released patch: upgrade to EGroupware 26.2.20260224 on the 26.x line, or to 23.1.20260224 on the 23.x line, per GHSA-h9qx-v5xp-ph8p (https://github.com/EGroupware/egroupware/security/advisories/GHSA-h9qx-v5xp-ph8p). Until patched, disable user self-registration to preserve the authentication barrier and prevent unauthenticated reach of the chain (side effect: new users must be provisioned manually by admins). Where feasible, disable or restrict access to the SmallParT module and block or ACL-restrict the ajax_upload endpoint and the importexport export download action (menuaction=importexport.importexport_export_ui.download) at a reverse proxy or WAF, since these carry the write and read primitives (trade-off: e-learning media recording and import/export features become unavailable to legitimate users). Ensure filesystem permissions prevent the www-data account from writing to header.inc.php and the EGroupware source tree, which removes the file-write target (verify this does not break legitimate config updates). After patching, rotate the admin/setup password and review header.inc.php for tampering, since the advisory notes password modification as an alternate impact.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
Same weakness CWE-22 – Path Traversal
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-45976
GHSA-h9qx-v5xp-ph8p