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 ý.
(1)
Kiểm
tra trên hệ thống có tồn tại tập tin txtSendmailPath hay không (Ref: https://github.com/orangehrm/orangehrm/blob/1e08ce618a6e551efe08132f1ab65193f5862757/symfony/plugins/orangehrmAdminPlugin/modules/admin/actions/isFileExistsAction.class.php#L37)
(2)
Tham
số txtSendmailPath được lưu vào hệ thống (Ref: https://github.com/orangehrm/orangehrm/blob/d5b3dbb040e3691c413bb7ff0575e5b7ef8c5ce8/symfony/apps/orangehrm/lib/form/admin/EmailConfigurationForm.php#L124)
(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.
Nhận xét
Đăng nhận xét