Cảnh báo: Lỗ hổng mới có thể hủy hoại website WordPress

LiLy Le
-

Ai là người chịu thiệt?

Tính đến thời điểm hiện tại, hướng ngăn chặn lỗ hổng này vẫn chưa được tìm ra. Tất cả các phiên bản của WordPress, bao gồm cả bản mới nhất là 4.9.6 cũng vẫn dính phải mã độc này.

Để khai thác được từ lỗ hổng này, các tin tặc cần được phép chỉnh sửa và xóa các file đa phương tiện trước. Vì vậy, lỗ hổng chỉ có thể được sử dụng để thực hiện những hành vi vượt quyền sau khi có được tài khoản với tư cách như một author, hoặc được lợi dụng kết hợp với  một lỗ hổng khác.

Những tác hại gây ra bởi tin tặc

Từ lỗ hổng này, tin tặc sẽ được quyền xóa bất cứ file nào trong bộ cài đặt WordPress, hoặc trong máy chủ khi người dùng được  quyền xóa thông qua quá trình PHP. Bên cạnh khả năng xóa toàn bộ bộ cài đặt WordPress – điều có thể gây ra hệ quả nghiêm trọng nếu không sao lưu kịp thời, các tin tặc sẽ lợi dụng khả năng xóa file bất kì để phá hỏng hàng rào bảo mật và thực thi mã độc trên trình duyệt web của bạn. Cụ thể, những loại file có thể bị xóa bao gồm:

  • .htaccess: việc xóa file này thường sẽ không gây ra lỗi bảo mật, nhưng trong một vài trường hợp những cưỡng chế về bảo mật đối với một số thư mục sẽ bị gỡ bỏ để phục vụ tin tặc.
  • index.php: thường thì các file index.php trống sẽ được đặt vào các thư mục để ngăn máy chủ liệt kê ra những đường dẫn con trong đó. Việc xóa đi các file này đồng nghĩa với việc cho phép tin tặc liệt kê ra những danh mục được bảo vệ theo phương pháp này.
  • wp-config.php: việc xóa đi file này sẽ kích hoạt lại quá trình cài đặt ban đầu trong lần truy cập kế tiếp. Đó là bởi các file này có chứa những dữ liệu quan trọng của người dùng, và khi nó bị mất đi, WordPress sẽ hiểu là trang web chưa được thiết lập. Tin tặc có thể xóa file này đi, thực hiện quá trình cài đặt lại với thông tin đăng nhập mới, có tài khoản admin và cuối cùng sẽ là chạy ngầm những đoạn mã độc đến máy chủ

Thông số kỹ thuật

Một lỗ hổng xóa file tùy ý sẽ xuất hiện khi thêm dữ liệu đầu vào chưa chuẩn hóa vào quá trình xóa file. Trong PHP, điều này xảy ra khi hàm  unlink() được khởi chạy và dữ liệu đầu vào của người dùng có thể tác động đến các thành phần của tham số $filename mà không trải qua quá trình chuẩn hóa

Dưới đây là đoạn mã chứa lỗ hổng trong lõi WordPress được tìm thấy ở file wp-include/post.php: 

xoá file WordPress

Trong hàm wp_delete_attachement(), nội dung của $meta[‘thumb’] được dùng khi gọi hàm unlink() mà không qua chuẩn hóa. Đoạn mã này được dùng để xóa file thumb của một ảnh cùng lúc với việc xóa ảnh đó. Ảnh được upload qua trình quản lý media của WordPress được coi là một loại tệp đính kèm. Giá trị $meta[‘thumb’] được lưu là một Custom Field của ảnh. Vậy nên khi lấy giá trị đại diện cho tên file thumb dùng cho gọi hàm unlink() từ cơ sở dữ liệu đã không trải qua quá trình chuẩn hóa hay kiểm tra nào. Nếu cũng không có quá trình bảo mật nào khác trước khi được lưu vào cơ sở dữ liệu như ảnh dưới đây chỉ ra, sẽ tồn tại một lỗ hổng xóa tệp tùy ý.

Có thể thấy được từ đoạn code phía sau thuộc /wp-admin/post.php cách mà tên file nằm  trong tệp đính kèm đã bị cài vào cơ sở dữ liệu. Giữa quá trình lấy giá trị $_POST[‘thumb’] và lưu vào cơ sở dữ liệu wp_update_attachment_mededata() không có biện pháp bảo mật để đảm bảo giá trị này thực sự là của file thumb của tệp đính kèm. Giá trị  $_POST[‘thumb’] có thể chứa đường dẫn của bất kì file nào và khi tệp đính kèm bị xóa, file với giá trị này sẽ bị xóa theo.

Hotfix tạm thời

Lỗ hổng này, như đã đề cập trên đây, tính đến nay vẫn chưa được khắc phục. Bởi vậy, chúng tôi đã phát triển một cách thức sửa lỗi tạm thời và sẽ nói rõ hơn dưới đây. Cách này có thể tích hợp với bộ cài đặt WordPress bằng cách thêm vào file functions.php của chủ đề hoặc chủ đề con.

Các Hotfix sẽ bám vào wp_update_attachment_metadata() và đảm bảo là các dữ liệu cung cấp cho meta-value thumb không có bất cứ phần nào sơ hở. Từ đó, sẽ không có file nào liên quan đến bảo mật bị xóa mất.

Nhưng hướng sửa chữa này chỉ có thể xem như một hình thức sửa chữa tạm thời để phòng chống tin tặc tấn công. Chúng tôi không thể lường trước được hết những vấn đề với các plugin của WordPress.

Timeline

Thời gianSự kiện
20/11/2017Lỗ hổng được báo cáo với đội ngũ bảo mật WordPress tại Hackerone.
22/11/2017Lỗ hổng được rà soát và xác minh bởi đội ngũ bảo mật.
12/12/2017Yêu cầu báo cáo tiến trình
18/12/2017WordPress đang tìm cách khắc phục. Khi được hỏi về ngày cập nhật bản mới thì không nhận được câu trả lời.
9/1/2018Tiếp tục yêu cầu báo cáo tiến trình. Không phản hồi.
20/1/2018Nhờ Hackerone có hành động can thiệp do tính nghiêm trọng của lỗi và im lặng của phía WordPress
24/1/2018Đội ngũ bảo mật WordPress ước tính thời gian khắc phục sẽ là 6 tháng.
24/5/2018Tiếp tục yêu cầu báo cáo tiến trình và/hoặc phương thức giải quyết lỗi này, và cảnh báo việc chúng tôi sẽ buộc phải công bố lỗ hổng trong thời gian gần. Nhưng không có phản hồi nào.
24/5/2018Một tin nhắn twitter được gửi đến một thành viên của đội bảo mật để đảm bảo rằng họ không vô tình bỏ qua tin trên Hackerone.
26/6/2018Lỗ hổng vẫn chưa được khắc phục sau 7 tháng kể từ khi được báo cáo.

Tổng kết

Như vậy, trong bài viết này, chúng tôi đã đề cập đến lỗ hổng xóa file bất kì của lõi WordPress, khiến cho bất cứ người dùng nào có quyền như một Author có thể kiểm soát hoàn toàn trang WordPress cũng như thực thi những mã độc tùy ý lên máy chủ. Lỗ hổng này đã được báo cáo tới đội ngũ bảo mật WordPress từ năm ngoái nhưng đến nay vẫn chưa được khắc phục.

Với mục đích cảnh báo về lỗ hổng này với người dùng, chúng tôi đã quyết định công bố nó cũng như đưa ra một hotfix. Lỗ hổng này chắc chắn tạo ra ảnh hưởng xấu đến danh tiếng đội ngũ bảo mật của WordPress, và họ cũng hiểu rằng giới nghiên cứu hầu như đã biết được tin này. Mặc dù việc yêu cầu có một tài khoản Author đã ngăn chặn quy mô của việc tin tặc khai thác từ các tài khoản WordPress tùy ý, nhưng những trang web có nhiều chủ tài khoản thì vẫn nên lắp đặt một hotfix.

>>Plugin bảo mật WordPress tốt nhất

RIPSTECH