Lỗ hổng mới trong PHP khiến các web chạy máy chủ NGINX bị hack

https://whitehat.vn/attachments/upload_2019-10-28_17-7-44-png.5442/

Nếu người dùng đang chạy bất kỳ website nào sử dụng nền tảng PHP trên máy chủ NGINX và có bật tính năng PHP-FPM nhằm mang lại hiệu suất tốt hơn thì hãy cẩn thận với một lỗ hổng được tiết lộ gần đây có thể khiến tin tặc tấn công máy chủ website từ xa.

Lỗ hổng được định danh CVE-2019-11043 ảnh hưởng đến các wesbite có cấu hình PHP-FPM nhất định không hiếm gặp trên thực tế và có thể dễ dàng bị khai thác vì mã khai thác (PoC) cho lỗ hổng này đã được công bố công khai.

PHP-FPM là viết tắt của FastCGI Process Manager cung cấp các tính năng giúp tối ưu quá trình xử lý thông tin nhằm tăng tốc độ các website viết bằng ngôn ngữ lập trình PHP.

Lỗ hổng chính nằm ở biến env_path_info trong module PHP-FPM, biến đó khi bị tràn số sẽ có thể khai thác và cho phép kẻ tấn công thực thi lệnh từ xa trên máy chủ web.

Những website nào tiềm ẩn nguy cơ bị khai thác từ lỗ hổng trên?

Qua mã khai thác được công bố, việc khai thác này nhằm vào các máy chủ chạy các phiên bản PHP 7+, lỗi underflow PHP-FPM cũng ảnh hưởng đến các phiên bản PHP trở về trước.

Cụ thể, một website có thể dính lỗ hổng này, nếu:

  • NGINX được cấu hình đề chuyển tiếp yêu cầu của các trang PHP đến PHP-EPM xử lý
  • fastcgi_split_path_info directive tồn tại trong cấu hình và bao gồm một biểu thức chính quy bắt đầu bằng ký tự ‘^’ và kết thúc bằng ký tự ‘$’
  • Biến PATH_INFO được định nghĩa với fastcgi_param directive
  • Không có kiểm tra như ‘try_files $uri =404’ hoặc if (-f $uri) nhằm xác định liệu một file có tồn tại không

Ví dụ:

upload_2019-10-28_17-8-16.pngLỗ hổng thực thi code trên PHP FPM hoạt động như thế nào?

Theo các nhà nghiên cứu, biểu thức chính quy trong ‘fastcgi_split_path_info’ directive có thể bị phá vỡ bằng bằng cách sử dụng ký tự tạo dòng mới (newline character) %0a. Biểu thức chính quy bị phá vỡ dẫn đến PATH_INFO rỗng, gây ra lỗi.

Đoạn sau trong mã nguồn, giá trị path_info[0] được đặt thành 0, sau đó FCGI_PUTENV được gọi. Sử dụng một URL với đường dẫn và chuỗi truy vấn có độ dài được lựa chọn cẩn thận, kẻ tấn công có thể làm cho path_info trỏ chính xác đến byte đầu tiên của _fcgi_data_seg structure. Đặt 0 vào nó di chuyển trường ‘char* pos’ về sau, và tiếp theo FCGI_PUTENV ghi đè một số dữ liệu (bao gồm các biến fast cgi khác) với đường dẫn của script. Sử dụng kỹ thuật này nhà nghiên cứu có thể tạo một biến fcgi PHP_VALUE giả và sau đó sử dụng một chuỗi các giá trị cấu hình được lựa chọn cẩn thận để thực thi code.

upload_2019-10-28_17-9-8.png
Bản cập nhật PHP 7 đã được phát hành để vá lỗ hổng FPMDanh sách các điều kiện tiên quyết để khai thác lỗ hổng thành công như đã đề cập ở trên không phải là hiếm bởi các cấu hình có lỗ hổng được một số nhà cung cấp máy chủ web sử dụng và sẵn có trên mạng là một phần trong nhiều hướng dẫn về PHP FPM.Một trong những nhà cung cấp dịch vụ máy chủ web là Nextcloud, đã phát đi cảnh báo người dùng các cấu hình Nextcloud NGINX mặc định cũng có thể bị tấn công và khuyến cáo quản trị hệ thống cập nhật bản vá ngay lập tức.

Vì mã khai thác lỗ hổng này được công bố và bản vá chỉ mới được phát hành gần đây nên những kẻ tấn công có thể bắt đầu quét mạng nhằm tìm kiếm các wesbite dính lỗ hổng.

Người dùng được khuyến cáo ngay lập tức cập nhật lên phiên bản PHP 7.3.11 và PHP 7.2.24 mới nhất kể cả khi không sử dụng cấu hình có lỗ hổng.

Nguồn whitehat.vn