
Moodle 5.2.3 - 높음 - 원격 - 경로 - Blackboard img src가 가져오기 트리 외부의 파일을 복사함
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · moodle-blackboard-img
Moodle LMS 5.2.3 - Moodle
분류: 파일 읽기 도달 범위: 원격
qformat_blackboard_six_base::text_field는 img src를 PARAM_PATH 없이 $this->filebase에 결합합니다. 그런 다음 store_file_for_text_field가 해당 경로를 사용자 초안 파일 영역으로 복사합니다. 같은 계열의 get_filecontent는 이미 clean_param($path, PARAM_PATH)로 격리하고 있습니다. MSA-26-0012는 데이터베이스 활동 가져오기를 PARAM_FILE로 격리했습니다. Blackboard img src는 그 대상에 포함되지 않았습니다.
Blackboard zip을 가져올 수 있는 교사가 <img src="https://raw.githubusercontent.com/html/config.php">를 심습니다. 초안 "이미지"는 config.php입니다. 학생은 가져올 수 없습니다.
| ID | 아직 CVE 없음 |
| CWE | CWE-22 / CWE-73 |
| CVSS | Medium: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| 제품 | Moodle |
| 영향 받는 버전 | 5.2.3 태그 v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116) |
| 인증 | 교사 (문제 은행 / 레슨 Blackboard 가져오기) |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1 전용 |
작성자: 문제 은행(또는 레슨)에 Blackboard zip을 가져올 수 있는 교사. 일반적인 목표는 PHP 사용자로서의 config.php(DB 비밀번호)입니다. 두 번째 잔여 취약점을 연쇄하지 않는 한 RCE는 아닙니다. LPE도 아닙니다.
| 권한 | 메서드 / 싱크 | 정찰 / 무결성 / 가용성 | 랩 검증 또는 추론 |
|---|---|---|---|
img src의 ../를 통해 PHP 사용자가 열 수 있는 파일 읽기 | text_field가 $this->filebase . '/' . $path를 결합; store_file_for_text_field가 초안 영역으로 복사 | 정찰 (파일 바이트) | 랩 검증. 초안 바이트가 /var/www/html/config.php와 일치하며 MOODLE-BLACKBOARD-IMG-WITNESS를 포함 |
| 해당 초안을 "이미지"로 다운로드 | 초안 itemid + 재작성된 @@PLUGINFILE@@ 파일명 | 정찰 | 랩 검증. GET /draft가 298바이트를 반환했고 sha256이 config.php와 동일 |
| 나중에 가져온 문제를 열 수 있는 사람 | 동일한 초안 / pluginfile | 정찰 | 추론. 랩은 교사 초안 일치에서 중단됨 |
| 학생 가져오기 | 동일한 zip, role=student | 해당 없음 | 랩 검증 차단됨. HTTP 403 teacher-only |
clean_param($path, PARAM_PATH)를 통한 동일 경로 | 가젯 jail=1 | 해당 없음 | 랩 검증 차단됨. 일치 없음, witness 없음, 경로가 filebase 아래에 유지됨 |
| PHP RCE / OS LPE | 해당 없음 | 해당 없음 | 차단됨. 이 잔여 취약점은 파일 바이트를 초안으로 복사합니다. 실행하지는 않습니다 |
Blackboard 가져오기가 없는 기본 Moodle은 이 버그에 해당하지 않습니다. MSA-22-0016은 baseurl만 정리했습니다.
동일 핀의 다른 잔여 취약점: enrol_database SQLi, grades feedback IDOR, hidden grade items.
MSA-26-0042/0043 이후 moodle/moodle v5.2.3을 핀했습니다. MSA-26-0012는 데이터베이스 활동 가져오기를 격리했습니다. get_filecontent()는 이미 PARAM_PATH를 알고 있었지만 text_field()는 여전히 원시 결합을 수행했기 때문에 다음으로 Blackboard를 살펴보았습니다.
이미 기록된 잘못된 방향: 학생 가져오기를 유출로 간주(403임); 복사된 파일이 PHP이기 때문에 RCE라고 부름(초안은 바이트를 저장할 뿐 include하지 않음); MSA-22-0016이 작업을 완료했다고 가정(baseurl만 해당). 리버스 셸. 연극.
핀의 text_field / store_file_for_text_field를 충실히 재현한 가젯이며, 전체 Moodle PHP 앱이 아닙니다. how=gadget.
python3 moodle-blackboard-img-Abraxas-Labs.py
또는
cd lab
./run.sh
오직 http://127.0.0.1:19560만 대상으로 합니다. Compose 프로젝트 moodle-blackboard-img. 실행 후 스택은 해체됩니다.
SUCCESS moodle-blackboard-img how=gadget pin=v5.2.3 teacher-import=yes draft-match-config=yes student=403 param-path-jail=yes MOODLE-BLACKBOARD-IMG-WITNESS
img src에 clean_param($path, PARAM_PATH)를 적용한 다음, realpath가 realpath($this->filebase) 아래에 유지되어야 합니다. get_filecontent()와 동일한 형태입니다.
formatbase.php (text_field, store_file_for_text_field)format.php (get_filecontent는 이미 PARAM_PATH를 사용)GNU Affero GPL v3.0. LICENSE 참조. 루프백 랩 전용. 보증 없음.