CVE-2019-12839: Lỗ hổng thực thi mã lệnh tùy ý trên OrangeHRM CMS

Tổng quan


-       Ứng dụng bị lỗ hổng: OrangeHRM | Open Source Human Resource Management System

-       Phiên bản ảnh hưởng: 4.3.1 và trước đó.

-       Mã CVE: CVE-2019-12839

Giới thiệu OrangeHRM


OrangeHRM là một hệ thống quản lý nguồn nhân lực có thể được dùng để theo dõi các thông tin khác nhau liên quan đến nguồn nhân lực trong một tổ chức.

Chi tiết lỗ hổng


Khi thực hiện chức cài đặt các tham số gửi Mail của hệ thống thông qua menu Admin à Configuration à Email Configuration



Chọn “Sending method” là Sendmail, lúc này tham số “Path to Sendmail” sẽ là đường dẫn tuyệt đối đến tập tin thực thi sendmail có trên hệ thống (ví dụ /usr/sbin/sendmail). Sendmail là một tiện ích dùng để gửi mail rất phổ biến trên các hệ thống Unix/Linux.


OrangeHRM không kiểm tra tính hợp lệ của tập tin Sendmail người dùng gửi lên máy chủ, dẫn đến lỗ hổng thực thi mã lệnh tùy ý trên máy chủ. Trong trường hợp này tham số tạo ra lỗ hổng là txtSendmailPath

Các tham số sẽ được gửi đến URL /symfony/web/index.php/admin/listMailConfiguration. Ta sẽ phân tích quá trình OrangeHRM xử lý tham số txtSendmailPath dẫn đến cho phép Attacker thực thi mã lệnh tùy ý.







(3)   txtSendmailPath sẽ được sử dụng làm tham số khởi tạo thư viện Swift Mailer (Ref: https://github.com/orangehrm/orangehrm/blob/1e08ce618a6e551efe08132f1ab65193f5862757/symfony/apps/orangehrm/lib/model/core/Service/EmailService.php#L174)



(4)   Khi thực hiện gửi mail, nếu txtSendmailPath có chứa chuỗi -bs  thì Swifter Mailer sẽ thực thi thao tác gửi mail ngay lập tức. (Ref: https://github.com/swiftmailer/swiftmailer/blob/b22e508d2db967630445c553572d1e9eb997ecef/lib/classes/Swift/Transport/SendmailTransport.php#L49)



(5)   Khi Swift Mailer thực hiện gửi mail. Hàm proc_open sẽ thực thi tập tin txtSendmailPath (Ref: https://github.com/swiftmailer/swiftmailer/blob/b22e508d2db967630445c553572d1e9eb997ecef/lib/classes/Swift/Transport/StreamBuffer.php#L296)



Tổng hợp lại ta có thể tạo được một Payload tấn công đơn giản như sau

/bin/cat /etc/passwd " -bs" > hacked.txt


Chọn “Send Test Email”, điền địa chỉ email tùy ý vào “Test Email Address”. Sau khi nhấn Save mã độc sẽ thực thi ngay lập tức



Trên Server sẽ tạo ra một tập tin hacked.txt chứa nội dung của /etc/passwd, chừng tỏ mã độc đã thực thi.



Khuyến cáo


Hiện OrangeHRM đã vá lỗ hổng này, chỉ nhận đầu vào là các tập tin Sendmail của hệ thống, người dùng nên cập nhật phiên bản mới nhất.

Tham khảo


Nhận xét

Bài đăng phổ biến từ blog này

[Steganography] Kỹ thuật che dấu thông tin - Phần 2

PHP Race Condition Vulnerability Example