Nếu bạn đang chạy bất kỳ trang web dựa trên PHP nào trên máy chủ NGINX và bật tính năng PHP-FPM để có hiệu suất tốt hơn, thì hãy cẩn thận với lỗ hổng mới được tiết lộ có thể cho phép kẻ tấn công trái phép hack máy chủ trang web của bạn từ xa. 

Lỗ hổng, được theo dõi là CVE-2019-11043, ảnh hưởng đến các trang web có cấu hình nhất định của PHP-FPM được cho là không phổ biến và có thể bị khai thác dễ dàng với bằng chứng khái niệm (PoC).

PHP-FPM là một triển khai PHP FastCGI thay thế, cung cấp xử lý nâng cao và hiệu quả cao cho các tập lệnh được viết bằng ngôn ngữ lập trình PHP.

Lỗ hổng chính là vấn đề lạm dụng bộ nhớ “env_path_info” trong mô-đun PHP-FPM, và việc kết hợp nó với các vấn đề khác có thể cho phép kẻ tấn công thực thi mã tùy ý từ xa trên các máy chủ web dễ bị tấn công.

Lỗ hổng được phát hiện bởi Andrew Danau, một nhà nghiên cứu bảo mật tại Wallarm khi đang tìm kiếm lỗi trong cuộc thi Capture The Flag, sau đó được hai nhà nghiên cứu của ông, Omar Ganiev và Emil Lerner, “vũ khí hóa” để phát triển khai thác mã thực thi từ xa.

Những trang web dựa trên PHP nào dễ bị tin tặc tấn công?

Mặc dù khai thác PoC được phát hành công khai được thiết kế để nhắm mục tiêu cụ thể các máy chủ dễ bị tổn thương chạy các phiên bản PHP 7+, lỗi tràn dòng PHP-FPM cũng ảnh hưởng đến các phiên bản PHP trước đó và có thể được vũ khí hóa theo một cách khác.

Tóm lại, một trang web dễ bị tấn công, nếu:

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

Cấu hình NGINX và PHP-FPM dễ bị tổn thương này trông giống như ví dụ sau:

hack nginx php-fpm

Ở đây, chỉ thị fastcgi_split_path_info được sử dụng để chia URL của các trang web PHP thành hai phần, giá trị của một công cụ trợ giúp PHP-FPM để tìm hiểu tên tập lệnh và phần còn lại chứa thông tin đường dẫn của nó.

PoC RCE khai thác cho PHP FPM hoạt động như thế nào?

Theo các nhà nghiên cứu, biểu thức “chính quy mẫu”, định nghĩa fastcgi_split_path_info, có thể được xử lý bằng cách sử dụng ký tự dòng mới, theo cách mà hàm phân tách cuối cùng sẽ đặt thông tin đường dẫn.

Tiếp theo, do có một con trỏ trong mã FPM không thực sự xác minh sự tồn tại của tệp trên máy chủ, nên kẻ tấn công có thể khai thác vấn đề để ghi đè lên dữ liệu trong bộ nhớ, bằng cách yêu cầu các URL được tạo đặc biệt trên các trang web được nhắm mục tiêu.

hack php-fpm
Mã thực thi mã php-fpm

Các nhà nghiên cứu khai thác PoC đã phát hành các chuỗi cho cả hai vấn đề này để thao tác với bộ nhớ và thêm các giá trị tùy chỉnh vào tệp php.ini , như trong ảnh chụp màn hình, trong tệp cấu hình PHP-FPM của một máy chủ được nhắm mục tiêu, cho phép kẻ tấn công thực thi mã tùy ý bằng cách sử dụng web-shell.

“Sử dụng độ dài của đường dẫn URL và chuỗi truy vấn được chọn cẩn thận, kẻ tấn công có thể tạo đường dẫn chính xác tới byte đầu tiên của cấu trúc _fcgi_data_seg. Đặt số 0 vào, nó sẽ di chuyển trường `char *pos` và theo sau FCGI_PUTENV, ghi đè lên một số dữ liệu các biến cgi khác với đường dẫn kịch bản “, các nhà nghiên cứu cho biết trong một báo cáo lỗi được gửi cho dự án PHP.

“Sử dụng kỹ thuật này, tôi đã có thể tạo biến fcgi PHP_VALUE giả và sau đó sử dụng một chuỗi các giá trị cấu hình được chọn cẩn thận để thực thi mã tùy ý.”

Bản cập nhật PHP 7 được phát hành để vá lỗ hổng FPM

Danh sách các điều kiện tiên quyết để khai thác thành công, như đã đề cập ở trên, không phải là hiếm bởi vì các cấu hình dễ bị tấn công đang được một số nhà cung cấp dịch vụ lưu trữ web sử dụng và có sẵn trên Internet như một phần của nhiều hướng dẫn về FPM của PHP.

Một nhà cung cấp dịch vụ lưu trữ web bị ảnh hưởng như vậy là Nextcloud, họ đã đưa ra một lời khuyên để cảnh báo người dùng rằng “cấu hình NGINX mặc định của Nextcloud cũng dễ bị tấn công” và khuyến nghị các quản trị viên hệ thống nên có hành động ngay lập tức.

Một bản vá cho lỗ hổng này đã được phát hành, gần một tháng sau khi các nhà nghiên cứu báo cáo nó cho nhóm phát triển PHP.

Do khai thác PoC đã có sẵn và bản vá mới được phát hành, có khả năng cao tin tặc có thể đã bắt đầu quét Internet để tìm kiếm các trang web dễ bị tấn công.

Vì vậy, người dùng được khuyên nên cập nhật PHP lên PHP 7.3.11 và PHP 7.2.24 mới nhất.

LEAVE A REPLY

Please enter your comment!
Please enter your name here