GHSA-h9qx-v5xp-ph8p

Suggest an improvement
Source
https://github.com/advisories/GHSA-h9qx-v5xp-ph8p
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-h9qx-v5xp-ph8p/GHSA-h9qx-v5xp-ph8p.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-h9qx-v5xp-ph8p
Aliases
  • CVE-2026-27823
Published
2026-07-07T13:01:01Z
Modified
2026-07-07T13:15:15.691343503Z
Severity
  • 9.3 (Critical) CVSS_V4 - CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N CVSS Calculator
Summary
EGroupware has a Remote Code Execution Vulnerability
Details

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_aclvalue is derived from user-controlled request data.

Bypass Technique

A crafted request can manipulate the participant_rolevalue 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 isTeachercheck.

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 _filenameparameter 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/)

Database specific
{
    "cwe_ids": [
        "CWE-22",
        "CWE-639",
        "CWE-94"
    ],
    "severity": "CRITICAL",
    "github_reviewed": true,
    "nvd_published_at": null,
    "github_reviewed_at": "2026-07-07T13:01:01Z"
}
References

Affected packages

Packagist / egroupware/egroupware

Package

Name
egroupware/egroupware
Purl
pkg:composer/egroupware%2Fegroupware

Affected ranges

Type
ECOSYSTEM
Events
Introduced
26.0.20251208
Fixed
26.2.20260224

Affected versions

26.*
26.0.20251208
26.0.20251216
26.0.20260108
26.0.20260113
26.0.20260123
26.1.20260130
26.2.20260203
26.2.20260207
26.2.20260209
26.2.20260216

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-h9qx-v5xp-ph8p/GHSA-h9qx-v5xp-ph8p.json"

Packagist / egroupware/egroupware

Package

Name
egroupware/egroupware
Purl
pkg:composer/egroupware%2Fegroupware

Affected ranges

Type
ECOSYSTEM
Events
Introduced
0Unknown introduced version / All previous versions are affected
Fixed
23.1.20260224

Affected versions

14.*
14.2.20150121
14.2.20150206
14.2.20150210
14.2.20150212
14.2.20150218
14.2.20150310
14.2.20150402
14.2.20150421
14.2.20150428
14.2.20150429
14.2.20150501
14.2.20150603
14.2.20150707
14.2.20150717
14.3.20150728
14.3.20150729
14.3.20150811
14.3.20150821
14.3.20150826
14.3.20150908
14.3.20151012
14.3.20151027
14.3.20151028
14.3.20151029
14.3.20151030
14.3.20151110
14.3.20151130
14.3.20151201
14.3.20160112
14.3.20160113
14.3.20160304
14.3.20160428
14.3.20160512
14.3.20160522
14.3.20160524
14.3.20160525
14.3.20160708
16.*
16.1.20160603
16.1.20160621
16.1.20160627
16.1.20160630
16.1.20160708
16.1.20160715
16.1.20160801
16.1.20160810
16.1.20160905
16.1.20161006
16.1.20161102
16.1.20161107
16.1.20161208
16.1.20170118
16.1.20170203
16.1.20170315
16.1.20170415
16.1.20170612
16.1.20170613
16.1.20170703
16.1.20170922
16.1.20171106
16.1.20180116
16.1.20180130
17.*
17.1.20171023
17.1.20171106
17.1.20171115
17.1.20171129
17.1.20171130
17.1.20171218
17.1.20180118
17.1.20180130
17.1.20180209
17.1.20180321
17.1.20180413
17.1.20180523
17.1.20180625
17.1.20180720
17.1.20180831
17.1.20181018
17.1.20181204
17.1.20181205
17.1.20190111
17.1.20190214
17.1.20190222
17.1.20190402
17.1.20190529
17.1.20190808
19.*
19.1.20190716
19.1.20190717
19.1.20190726
19.1.20190806
19.1.20190813
19.1.20190822
19.1.20190917
19.1.20190925
19.1.20191031
19.1.20191119
19.1.20191220
19.1.20200130
19.1.20200318
19.1.20200409
19.1.20200430
19.1.20200605
19.1.20200701
20.*
20.1.20200525
20.1.20200613
20.1.20200628
20.1.20200710
20.1.20200716
20.1.20200728
20.1.20200731
20.1.20200810
20.1.20200812
20.1.20200818
20.1.20200901
20.1.20200914
20.1.20201005
20.1.20201020
20.1.20201028
20.1.20201202
20.1.20201217
20.1.20210125
20.1.20210324
20.1.20210503
21.*
21.1.20210318
21.1.20210329
21.1.20210406
21.1.20210420
21.1.20210504
21.1.20210521
21.1.20210629
21.1.20210723
21.1.20210923
21.1.20211130
21.1.20220207
21.1.20220406
21.1.20220408
21.1.20220905
21.1.20220916
21.1.20221202
21.1.20230210
22.*
22.1.20220920
23.*
23.1.20230110
23.1.20230114
23.1.20230125
23.1.20230210
23.1.20230228
23.1.20230314
23.1.20230328
23.1.20230412
23.1.20230428
23.1.20230503
23.1.20230524
23.1.20230620
23.1.20230726
23.1.20230728
23.1.20230824
23.1.20230911
23.1.20231110
23.1.20231122
23.1.20231129
23.1.20231201
23.1.20231219
23.1.20231220
23.1.20240125
23.1.20240304
23.1.20240430
23.1.20240624
23.1.20240905
23.1.20240930
23.1.20241008
23.1.20241111
23.1.20241128
23.1.20241214
23.1.20250113
23.1.20250307
23.1.20250416
23.1.20250506
23.1.20250715
23.1.20250902
23.1.20251021
23.1.20251119
23.1.20251222
23.1.20260108
23.1.20260113
23.1.20260131

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/07/GHSA-h9qx-v5xp-ph8p/GHSA-h9qx-v5xp-ph8p.json"