Lỗ hổng PHP mới có thể cho phép kẻ tấn công hack các trang web chạy trên máy chủ Nginx

26 tháng 10 năm 2019Mohit Kumar

khai thác hack nginx php-fpm

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 một lỗ hổng mới được tiết lộ có thể cho phép những kẻ tấn công trái phép tấn công máy chủ trang web của bạn từ xa.

Lỗ hổng, được theo dõi như 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 trong thực tế và có thể bị khai thác dễ dàng vì khai thác bằng chứng khái niệm (PoC) cho lỗ hổng đã được phát hành công khai.

PHP-FPM là một triển khai PHP FastCGI thay thế cung cấp khả năng 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à sự cố hỏng bộ nhớ tràn “env_path_info” trong mô-đun PHP-FPM và việc kết hợp sự cố này cùng với các sự cố 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 thươ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 trong khi tìm kiếm các lỗi trong cuộc thi Capture The Flag, sau đó được hai nhà nghiên cứu đồng nghiệp của ông, Omar Ganiev và Emil Lerner, vũ khí hóa để phát triển một khai thác thực thi mã từ xa hoạt động đầy đủ. .

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ể đến các máy chủ dễ bị tổn thương chạy phiên bản PHP 7+, nhưng lỗi tràn PHP-FPM cũng ảnh hưởng đến các phiên bản PHP cũ hơn 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,
  • fastcgi_split_path_info chỉ thị 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 nào như try_files $uri =404 hoặc if (-f $uri) để xác định xem tệp có tồn tại hay không.

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

hack nginx php-fpm

Ở đây, lệnh 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 phần giúp công cụ 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ó.

Khai thác PoC RCE 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 chỉ thị fastcgi_split_path_info, như được hiển thị, có thể được thao tác 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 trống.

HỘI THẢO TRỰC TUYẾN THN

Trở thành Chuyên gia ứng phó sự cố!

Mở khóa các bí mật để ứng phó với sự cố chống đạn – Nắm vững quy trình 6 Giai đoạn với Asaf Perlman, Trưởng nhóm IR của Cynet!

Đừng bỏ lỡ – Tiết kiệm chỗ ngồi của bạn!

Tiếp theo, vì có một con trỏ số học trong mã FPM giả định sai rằng env_path_info có tiền tố bằng với đường dẫn đến tập lệnh php mà 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ể lợi dụng vấn đề này để 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 của các trang web được nhắm mục tiêu.

hack php-fpm

hack thực thi mã php-fpm

Trong nền, khai thác PoC [1 (PHuiP-FPizdaM), 2 ] các nhà nghiên cứu đã phát hành chuỗi cùng lúc cả hai vấn đề này để thao túng bộ nhớ và thêm các giá trị php.ini tùy chỉnh, như được hiển thị trong ảnh chụp màn hình, trong tệp cấu hình PHP-FPM của 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 trình bao web.

tin tặc

“Bằng cách sử dụng độ dài được chọn cẩn thận của đường dẫn URL và chuỗi truy vấ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 cấu trúc _fcgi_data_seg. Đặt số 0 vào đó sẽ di chuyển trường `char* pos` về phía sau và theo sau FCGI_PUTENV sẽ ghi đè lên một số dữ liệu (bao gồm các biến cgi nhanh khác) với đường dẫn tập lệnh,” các nhà nghiên cứu cho biết trong một báo cáo lỗi được gửi tới dự án PHP.

“Khi sử dụng kỹ thuật này, tôi có thể tạo một biến PHP_VALUE fcgi 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 mã.”

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 vì các cấu hình dễ bị tổn thươ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 PHP FPM.

Một nhà cung cấp dịch vụ lưu trữ web bị ảnh hưởng như vậy là Nextcloud, người đã đưa ra lời khuyên ngày hôm qua cảnh báo người dùng của mình 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ị quản trị viên hệ thống thực hiện các hành động ngay lập tức.

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

Vì khai thác PoC đã có sẵn và bản vá mới được phát hành ngày hôm qua, nên có khả năng tin tặc đã 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 nên cập nhật PHP lên phiên bản PHP 7.3.11 và PHP 7.2.24 mới nhất. Chỉ cần làm điều đó, ngay cả khi bạn không sử dụng cấu hình dễ bị tấn công.

Tìm thấy bài viết này thú vị? Theo dõi chúng tôi tại Twitter và LinkedIn để đọc thêm nội dung độc quyền mà chúng tôi đăng.

Leave a Reply