PoC khai thác lỗ hổng RCE trong các thiết bị QNAP

sImplePerson

Member
23/03/2020
11
28 bài viết
PoC khai thác lỗ hổng RCE trong các thiết bị QNAP
Trong bài viết này, mình sẽ chia sẻ cách khai thác lỗ hổng RCE trong các thiết bị QNAP còn tồn tại các lỗ hổng.

QNAP.png

Đây là bài viết mình tham khảo trên trang medium và đã thực hành thành công. Bài viết chỉ mang tính chất học tập, không khuyến khích các bạn áp dụng trên thực tế.

Cách thức khai thác

Lỗ hổng 1: Tiết lộ tệp local trước khi xác thực
(Pre-Auth Local File Disclosure) (Hiệu quả là bỏ qua đăng nhập)

Lỗ hổng này cho phép kẻ tấn công đọc các tệp tùy ý trên máy chủ QNAP mà không cần xác thực.

Đoạn code dễ bị tấn công :

Đoạn code dễ bị tấn công nằm trong đường dẫn /p/api/video.php :

1.png

Hình 1. Đoạn code dễ bị tấn công

exportFile chỉ đơn giản là xuất nội dung tệp của [imath]source_file[/B], được kiểm soát hoàn toàn bởi tệp tham số [B]GET/POST. [/B]Do đó, chúng ta có thể đọc các tệp tùy ý bằng cách chỉ định, VD: [B]=./../etc/passwd[/B], ta có thể tạo [B][/imath]source_file thành /share/./../etc/passwd, tương đương với /etc/passwd.

Tuy nhiên, để khai thác được đoạn code dễ bị tấn công ở trên, chúng ta cần qua mặt được hàm kiểm tra CHECK_ACCESS_CODE:

2.png

Hình 2. Kiểm tra mã truy cập trước lỗ hổng

Dưới đây là cấu trúc của hàm kiểm tra CHECK_ACCESS_CODE :

3.png

Hình 3. Cấu trúc hàm CHECK_ACCESS_CODE

Để làm được điều này, chúng ta cần tránh exit (). Cụ thể :

- Nhận ID album và mã truy cập của 1 album có thể truy cập công khai

- Tải mã truy cập album đó vào $ _SESSION['access_code']

- Nhận giá trị của $ _SESSION ['access_code']

Có thể thực hiện tất cả các bước trên rất dễ dàng mà KHÔNG cần xác thực

Dưới đây là các bước để vượt qua hàm CHECK_ACCESS_CODE:

Bước 1: Tạo và lấy mã ID của album mẫu

Yêu cầu dưới đây tạo một album mẫu và trả về ID album của đó. API dành cho các album mẫu, do đó, nó có thể truy cập công khai, và không yêu cầu xác thực:

4.png

Hình 4. Tạo album mẫu và truy xuất ID album

Sau khi gửi yêu cầu tạo album mẫu và truy xuất ID album, mình đã nhận được 1 phản hồi như dưới đây:

5.png

Hình 5. Phản hồi chứa ID của Album mẫu đã được tạo

Với việc gửi yêu cầu tạo album mẫu, server đã tạo thành công và gửi lại 1 ID album cho mình là: cJinsP

Bước 2: Sử dụng ID của Album để nhận được $_SESSION['access_code']

Tiếp đó, mình sẽ gửi 1 request về phía server với mã truy cập của album mà mình đã tạo (?Album=cJinsP)

6.png

Hình 6. Gửi Request về server với ID album đã được tạo

Sau khi nhận được phản hồi từ phía server, mình đã tìm thấy $_SESSION['access_code'] trong đoạn Javascrip có trong html mà phía server phản hồi lại.

7.png

Hình 7. Phản hồi cho /photo/slideshow.php - Giá trị của $ _SESSION [‘access_code’]

Giá trị nhận được là “MHwxfDE1OTExNjI0NDQ=” .Với ID album và mã truy cập, mình có thể bỏ qua CHECK_ACCESS_CODE và đọc các tệp tùy ý mà không cần xác thực bằng cách gửi các yêu cầu về phía server như dưới đây:

8.png

Hình 8. Gửi request đến server để đọc thư mục passwd

9.png

Hình 9. Kết quả nhận được khi khai thác thành công

Lỗ hổng 2: Giả mạo phiên xác thực - Viết mã PHP vào phiên

Được xác thực là người sử dụng, cho phép mình truy cập vào cài đặt SMTP. Ví dụ, bằng cách đặt email đến <? = `$ _POST [c]`?> @ Evil.com, mình đã được xác thực và có thể viết mã PHP tùy ý vào phiên.

10.png

Hình 10. Viết mã PHP vào $ _SESSION

Lỗ hổng 3: Viết mã PHP vào vị trí tùy ý

Lỗ hổng này cho mình ghi nội dung ($ _SESSION) vào một vị trí tùy ý trên máy chủ mà không cần xác thực.

Đoạn mã bị khai thác:

11.png

Hình 11. Đoạn mã bị khai thác để tạo file trên server.

Session_id () hoàn toàn có thể kiểm soát thông qua cookie QMS_SID. Do đó, dòng mình đánh dấu sẽ ghi một phiên được mã hóa (tuần tự hóa) vào tệp mà mình chỉ định.

Để khai thách lỗ hổng này mình gửi một request đến server có dạng như sau

12.png

Hình 12. Gửi Request đến server để tạo 1 file a.php

Sử dụng đoạn mã “ $musicStationSessionPath . ‘/sess_' . session_id() “ để tạo /share/photostation/session/qts/sess_xxxxx/../../../../../mnt/ext/opt/photostation2/a.php. Sau khi tạo mã php thành công, bạn có thể truy cập đường dẫn đường dẫn /photo/a.php.

Với lỗ hổng này, mình có thể viết một đoạn mã PHP bị nhiễm mã độc vào thư mục web của Photo Station để tạo webshell.

Phiên bản bị ảnh hưởng

Tất cả các phiên bản có thể tải xuống trước các phiên bản cố định (6.0.3, 5.2.11, 5.4.9) đều bị ảnh hưởng.

Truy cập link, để biết chi tiết về thông tin phiên bản và cách khắc phục các lỗ hổng.

Ba lỗ hổng trên hoạt động trên tất cả các mô hình NAS QNAP. Với việc, QNAP chạy máy chủ web với quyền root, hy vọng họ sẽ đưa ra bản vá cho việc này, nếu không mình khá chắc chắn rằng sẽ có nhiều lỗ hổng CVE với điểm CVSS cao.

QNAP có thể cần tiến hành kiểm tra bảo mật kỹ lưỡng về cơ sở và cấu hình mã của họ, vì các chương trình CGI và mã PHP của họ chứa rất nhiều trường hợp nối chuỗi không đúng cách.

QNAP đã đưa ra các bản update mới để vá những lỗ hổng trên, những cá nhân hoặc tổ chức đang sử dụng dịch vụ này, hãy update lên phiên bản mới nhất hoặc sử dụng tường lửa để hạn chế những truy cập từ bên ngoài.
 
Chỉnh sửa lần cuối bởi người điều hành:
Thẻ
khai thác rce qnap rce trong qnap
Bên trên