4. CVE-2020-8419

Dựa theo kết quả của script csrf_check ở phần 2.

Lỗi CSRF xảy ra ở controller Redirect, action purge() ở file administrator\components\com_redirect\controllers\links.php do không có kiểm tra CSRF token ở chức năng của admin.

Hình 1 action purge() ở controller redirect.

Mã khai thác: http://your_joomla/administrator/index.php?option=com_redirect&view=links&list%5Bfullordering%5D=a.old_url+ASC&list%5Blimit%5D=20&filter%5Bstate%5D=1&filter%5Bhttp_status%5D=&limitstart=0&new_url=&comment=&batch_urls=&task=links.purge&boxchecked=1

Tương tự, mình tìm được thêm 3 chỗ lỗi tương tự

Action purge()administrator\components\com_languages\controllers\overrides.php

Hình 2 action purge ở controller languages

Mã khai thác: http://your_joomla/administrator/index.php?option=com_languages&view=overrides&language_client=vi-VN1&filter%5Bsearch%5D=&list%5Blimit%5D=20&limitstart=0&task=overrides.purge&boxchecked=0&list%5Bfullordering%5D=null+ASC

Action purge() và clean() ở administrator\components\com_associations\controllers\associations.php

Hình 3 action purge và clean ở controller associations

Mã khai thác action purge(): http://your_joomla/administrator/index.php?option=com_associations&task=associations.purge&itemtype=&language=vi-VN&filter%5Bsearch%5D=&list%5Bfullordering%5D=id+ASC&list%5Blimit%5D=25&filter%5Bstate%5D=&filter%5Bcategory_id%5D=&filter%5Bmenutype%5D=&filter%5Baccess%5D=&filter%5Blevel%5D=

Mã khai thác action clean():

http://your_joomla/administrator/index.php?option=com_associations&task=associations.clean&itemtype=&language=vi-VN&filter%5Bsearch%5D=&list%5Bfullordering%5D=id+ASC&list%5Blimit%5D=25&filter%5Bstate%5D=&filter%5Bcategory_id%5D=&filter%5Bmenutype%5D=&filter%5Baccess%5D=&filter%5Blevel%5D=

Như vậy để khai thác lỗ hổng này, ta phải lừa được người quản trị click vào liên kết độc hại, tuy nhiên không phải lúc nào ta cũng có thể làm được nếu người quản trị viên có kiến thức về security.  Vậy liệu có cách nào đó làm cho họ phải click mà không nghi ngờ gì không? Lúc này mình nghĩ đến chức năng check-in của admin.

Chức năng này tựa như là thông báo khi có bài viết mới và người quản trị viên thường sẽ click vào đọc mà không nghi ngờ gì.

Như vậy ta cần một tài khoản có quyền tạo bài viết, ở chức năng tạo bài viết của Joomla cho phép ta chèn image và sửa css ở thẻ style tuy nhiên lại không kiểm tra dữ liệu người dùng dẫn đến bị lỗi CSS Injection và có thể dẫn đến account takeover để đánh cắp số lượng lớn tài khoản người dùng nếu như server joomla đã bị kẻ tấn công chiếm quyền.

Ví dụ:

Hình 4 Tạo image với style với mã khai thác như hình

Mỗi khi người dùng truy cập vào bài viết thì kẻ tấn công có thể lấy được phiên làm việc của người dùng và đăng nhập.

Hình 5 phiên làm việc của người dùng.

Tương tự khi admin thấy thông báo có bài viết mới và check in thì phiên làm việc của admin cũng bị lộ.

Hình 6 Admin check-in bài viết
Hình 7 phiên làm việc của admin.

Tuy nhiên lỗi này chỉ khai thác dẫn đến lỗi Account takeover với các điều kiện:

-          Kẻ tấn công đã chiếm quyền máy chủ Joomla từ trước ( thông qua local-attack , …. )

-          Kẻ tấn công có tài khoản với quyền tạo bài viết.

Nhưng mà không phải lúc nào ta cũng chiếm quyền được máy chủ từ trước, vì khi đã chiếm quyền được máy chủ ta có thể làm nhiều việc khác thay vì chỉ takeover account. Tuy nhiên với các lỗi CSRF và ở phương thức GET, ta có thể kết hợp với CSS Injection để khai thác và chỉ cần điều kiện cần tài khoản với quyền tạo bài viết.

Như vậy, ví dụ trường hợp cụ thể , ta muốn xóa TOÀN BỘ bài viết được associations sang ngôn ngữ khác của người dùng. Ta sẽ tạo bài viết mới, chèn thẻ image và ở thẻ style chèn mã khai thác css injection.

Ví dụ hiện tại ta thấy có 3 bài viết tiếng Việt được associations sang tiếng Anh , có 2 public và 1 chưa public:

Hình 8 danh sách các bài viết association hiện tại ở Joomla

Để khai thác, tạo bài viết chứa mã độc:

Hình 9 Tạo bài viết chứa mã độc

Admin khi online sẽ nhận được thông báo có bài viết mới:

Hình 10 thông báo nhận bài viết mới từ người dùng

Khi admin click vào check in, ta thấy sẽ có request đến action purge.

Hình 11 Admin truy cập để đọc bài viết mới.
Hình 12: request được tạo từ css injection gửi đến action purge.
Hình 13 Toàn bộ bài viết association đều đã bị xóa

Lỗi này còn có có thể được chain với CVE-2019-18650 hoặc bất cứ lỗ hổng có thể được khai thác ở phương thức GET ( trừ các lỗ hổng cần hiển thị nội dung trang html như XSS ) và để khai thác kẻ tấn công chỉ cần quyền người dùng có thể tạo bài viết.