3. CVE-2020-8420: 1-click RCE
Phân tích hàm less():

Chức năng này nhận vào các tham số:
- $id : id của template ( protostar hoặc beez, hoặc tự custom )
- $file : file mà ta cần xử lý.
Chức năng dùng xem nội dung của $file. Nếu kết hợp với lỗi CSRF thì rất khó để có thể khai thác vì nội dung của $file chỉ hiển thị ở trang của admin. Tiếp tục phân tích hàm compileLess($file):

Tham số $file truyền vào được kiểm tra nếu có kí tự “/” thì sẽ cắt $file thành mảng dựa theo "/" và lấy giá trị cuối của mảng , như vậy có thể chống được Path Traversal ở máy chủ chạy hệ điều hành Linux. Tuy nhiên với máy chủ chạy hệ điều hành Windows có thể bypass với kí tự “\”. Như vậy chức năng bị lỗi Path Traversal nhưng chỉ áp dụng với hệ điều hành Windows.
Phân tích hàm compileFile($fname,$outFname) trong đó có tham số $fname được tạo từ phép cộng chuỗi $path và $infile , trong đó:
- $path thư mục của template tương ứng với $id.
- $infile là $file sau khi giải mã base64.

Hàm kiểm tra nếu như $fname truyền vào tồn tại trên máy chủ, nếu không sẽ raise exception “load error: failed to find.”$fname.

Do hàm compileLess($input) dùng try catch để handle exception nên sẽ gọi đến hàm enqueueMessage() khi có exception xảy ra.



Thông báo lỗi không được escape, như vậy với $file = base64_encode(“<script>alert(1)”), mã độc javascript được hiển thị trực tiếp ra màn hình dẫn đến lỗi XSS.


Mã khai thác:
Ngoài ra khi phát hiện lỗi Path traversal ở Windows như trên, thử thêm kịch bản là đã upload được file chứa mã độc javascript lên máy chủ là payload.js



Biến $string là nội dung của file payload.js.

Hàm parse() sẽ gọi đến một parser trong core ở file JOOMLA_PATH\libraries\vendor\leafo\lessphp\lessc.inc.php. Tương tự trả về thông báo lỗi chứa nội dung là mã độc javascript.



Từ những kịch bản như trên, có 2 cách để ta khai thác chiếm quyền máy chủ:
- Cách 1:
Ø Upload mã độc javascript lên server thông qua local attack hoặc ftp-anon.
Ø Dùng path traversal gọi mã độc (Chỉ áp dụng cho Windows).
Ø Lừa admin truy cập liên kết chứa mã độc ( Open redirect, Phishing).
- Cách 2:
Ø Lừa admin truy cập liên kết chứa mã độc ( Open redirect , Phishing).
Cách 1 thực hiện khai thác tương tự như bài viết ở phần 2. Ở đây định dạng file không quan trọng, chỉ cần upload được file chứa mã độc lên server ( pdf , txt , .... ).
Demo khai thác theo cách 2
Chức năng template cho phép sửa nội dung của file bất kì ở template với request như sau

Để thực hiện ta cần csrf.token.
csrf.token nằm ở nội dung trang html của admin ở file hợp lệ thuộc đường dẫn http://victim/administrator/* ( Ví dụ index.php ).

Viết mã độc javascript ghi mã độc php thực hiện lệnh whoami lên file error.php ở template protostar dựa vào request ghi file ở hình 32: https://gist.github.com/komang4130/0ed6f8cffd3e57d20cfd6052f6db2e8c
Mã khai thác:
Minh họa lỗi:

Author: Le Quang Thao