EGroupware에는 원격 코드 실행 취약점이 있습니다
원격 코드 실행(RCE)으로 이어질 수 있는 심각한 취약점이 EGroupware에서 확인되었습니다. 이 문제로 인해 인증된 공격자가 서버에서 임의의 명령을 실행할 수 있습니다. 사용자 자가 등록이 활성화된 경우 사전 인증 없이 취약점이 악용될 수 있습니다.
이 취약점은 파일 쓰기 기본 요소 및 임의 파일 읽기 취약점과 결합된 부적절한 인증 검사로 인해 발생하며, 이는 함께 전체 시스템을 손상시킬 수 있습니다.
취약점은 다음에서 발생합니다.
EGroupware\SmallParT\Widgets\SmallPartMediaRecorder::ajax_upload()
이 함수는 파일 업로드를 허용하기 전에 현재 사용자가 지정된 코스 ID의 교사인지 확인하려고 시도합니다.
중요한 인증 확인은 코스 ACL(액세스 제어 목록)에 다음이 포함되어 있는지 확인합니다.
$required_acl (self::ROLE_TEACHER, 즉, 3)
그러나 course_acl 값은 사용자가 제어하는 요청 데이터에서 파생됩니다.
우회 기법
조작된 요청은 요청 본문 내의 participant_role 값을 조작할 수 있습니다.
``json { "동영상": { "강좌_ID": { "참가자": [ { "계정_ID": "7", "이름": "테스트", "joined_at": "2026-01-10", "participant_role": 3 } ], "계정_ID": "7", "강좌_ID": "1" }, "video_hash": ".", "video_type": "파일_여기" } }
코스 ACL은 `participant_role`에서 가져오기 때문에 이를 3으로 설정하면 `isTeacher` 검사를 우회할 수 있습니다.
### 2. 임의 파일 쓰기
인증을 우회한 후 이 기능은 제공된 파일을 제어 가능한 파일 경로에 업로드합니다.
파일 경로는 `video_type`(또는 video_path) 값에서 파생되어 경로 순회를 활성화합니다.
파일 권한 제한(www-data로 실행되는 서버)으로 인해 쓰기 가능한 대상이 제한됩니다. 실행 가능한 대상 중 하나는 `./header.inc.php`입니다.
### 3. 제약
간단한 PHP 웹셸 작성은 OPcache로 인해 즉시 실행되지 않을 수 있습니다.
잘못된 `header.inc.php` 파일은 시스템을 중단시키고 서버 실행을 방해합니다.
따라서 유효한 파일 구조가 보존되어야 합니다.
### 4. 임의 파일 읽기
두 번째 취약점은 다음을 통해 임의 파일 읽기를 허용합니다.
`/egroupware/index.php?menuaction=importexport.importexport_export_ui.download&_filename=../../../usr/share/egroupware/header.inc.php&_suffix=txt&_type=text/plain&filename=leak`
문제는 다음 위치에 있습니다.
`importexport_export_ui::다운로드`
`_filename` 매개변수는 사용자가 제어하며 임의의 파일을 읽는 데 사용됩니다.
이를 통해 원본 `header.inc.php` 콘텐츠를 검색할 수 있습니다.
### 5. 원격 코드 실행 달성
결합: 임의의 파일 읽기(유효한 header.inc.php를 검색하기 위해) 임의의 파일 쓰기(수정된 콘텐츠로 덮어쓰기)를 통해 공격자는 파일 유효성을 유지하면서 제어된 PHP 코드를 삽입할 수 있습니다.
이로 인해 서버를 다시 시작하거나 OPcache가 만료된 후 원격 코드 실행이 발생합니다. 대체 영향에는 전체 시스템 제어권을 얻기 위해 관리자 설정 비밀번호를 수정하는 것이 포함됩니다.
## 영향
원격 코드 실행
전체 시스템 손상
임의의 파일 읽기
임의의 파일 쓰기
E그룹웨어 인스턴스 완전 인수 가능성
## 신고자
이 발견은 Cenobe Security의 Huong Kieu(https://cenobe.com/)에 의해 발견되었습니다.
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도(심각도 등급 추정치) | 95.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 95.00 |
VPI 공식 vpi-v1 기준