Chỉ hai ngày sau đợt vá khẩn PHP2Shell, dự án PHP công bố thêm một lỗ hổng PHP CVE-2026-115560. Lỗi nằm ở tính năng session upload progress và có thể dẫn tới thực thi mã từ xa. Thông báo đăng trên php.net ngày 23/10/2026 cho biết lỗi chưa có bản vá. PHP khuyên đặt session.upload_progress.enabled=0 cho đến bản phát hành định kỳ tiếp theo.

Tóm tắt nhanh

  • Lỗi gì: một hướng RCE mà PHP gọi là "khó xảy ra" (unlikely), liên quan đến việc đổi trình tuần tự hóa session lúc chạy.
  • Trạng thái: chưa có bản vá, chưa công bố điểm CVSS và dải phiên bản bị ảnh hưởng. Một số nguồn cho biết cả bản 8.5.12 vừa phát hành vẫn bị ảnh hưởng.
  • Cách giảm thiểu: tắt session upload progress ở cấp php.ini, pool PHP-FPM hoặc cấu hình máy chủ.
  • Khai thác: các nguồn chúng tôi tham khảo chưa ghi nhận khai thác thực tế với riêng lỗi này.

Điều kiện để lỗ hổng CVE-2026-115560 xảy ra

Theo thông báo của PHP, lỗi chỉ xuất hiện khi có "một tổ hợp bất thường giữa cấu hình và mã ứng dụng". Cần đủ cả ba điều kiện:

  1. session.serialize_handler được đặt là php_binary hoặc php_serialize trong cấu hình. Giá trị mặc định là php, nên cấu hình mặc định không thỏa điều kiện này.
  2. Mã ứng dụng gọi ini_set() để đổi trình tuần tự hóa về php lúc chạy, trước khi gọi session_start().
  3. Session upload progress vẫn bật. Đây là giá trị mặc định.

Ứng dụng không bao giờ đổi serialize handler lúc chạy thì không bị ảnh hưởng. Tuy vậy, trên máy chủ chạy nhiều site hoặc mã nguồn cũ, bạn khó chắc chắn không có đoạn mã nào làm việc này. Vì thế tắt tính năng là cách an toàn hơn.

Khác gì PHP2Shell?

PHP2Shell là tên gọi của hai lỗi CVE-2026-109618 và CVE-2026-109619, được vá ngày 21/10/2026 trong các bản PHP 8.5.12, 8.4.27, 8.3.36 và 8.2.35. CVE-2026-115560 là lỗi riêng. Các bản 21/10 không sửa nó.

Điểm chung là biện pháp giảm thiểu. Với CVE-2026-109619, PHP từng khuyên tắt session upload progress. PHP cho biết nếu bạn đã áp dụng biện pháp đó, hãy giữ nguyên và không cần làm gì thêm. Lưu ý: tắt tính năng này không thay thế việc nâng cấp để vá PHP2Shell.

Về bối cảnh, BleepingComputer dẫn Amazon Threat Intelligence cho biết PHP2Shell bị dò quét từ bốn ngày trước khi có bản vá. Dataminr thì nhận định hoạt động chủ yếu là quét và dùng mã khai thác không chạy được, chưa ghi nhận vụ xâm nhập nào. Hai nhận định này khác nhau về mức độ, nên bạn vẫn cần vá sớm.

Cách tắt session upload progress đúng cách

PHP và các nguồn bảo mật đều nhấn mạnh: phải đặt giá trị ở cấp cấu hình được nạp trước khi xử lý request. Không dựa vào ini_set() trong mã, và theo khuyến cáo của PHP cho CVE-2026-109619, không dùng .user.ini.

# php.ini (đường dẫn tùy bản phân phối, ví dụ /etc/php/8.3/fpm/php.ini)
session.upload_progress.enabled = 0

# Hoặc trong pool PHP-FPM, ví dụ /etc/php/8.3/fpm/pool.d/www.conf
php_admin_flag[session.upload_progress.enabled] = off

# Apache dùng mod_php (trong VirtualHost hoặc cấu hình chung)
php_admin_flag session.upload_progress.enabled off

Dạng php_admin_flag có ưu điểm là mã ứng dụng không ghi đè được. Sau khi sửa, cần khởi động lại tiến trình, không chỉ reload:

sudo systemctl restart php8.3-fpm
# hoặc với Apache mod_php
sudo systemctl restart apache2

Kiểm tra cấu hình và mã nguồn

Kiểm tra trên SAPI đang phục vụ web, không phải CLI. Lệnh php -i đọc cấu hình CLI nên có thể cho kết quả sai.

# Xem phiên bản PHP-FPM và giá trị đang áp dụng (tên binary tùy hệ thống)
php-fpm8.3 -v
php-fpm8.3 -i | grep -i "session.upload_progress.enabled"

# Tìm mã đổi serialize handler lúc chạy trong thư mục web
grep -rn "session.serialize_handler" /var/www/ --include="*.php"

# Tìm cấu hình đang đặt php_binary hoặc php_serialize
grep -rn "serialize_handler" /etc/php/ 2>/dev/null

Cách chắc nhất là tạo tạm một trang phpinfo() qua web server, xem giá trị "session.upload_progress.enabled" ở cột Local Value, rồi xóa trang đó ngay.

Việc cần làm ngay

Với chủ VPS và quản trị máy chủ

  1. Đảm bảo đã lên PHP 8.5.12, 8.4.27, 8.3.36 hoặc 8.2.35 (hoặc bản có backport của bản phân phối) để vá PHP2Shell.
  2. Đặt session.upload_progress.enabled=0 cho mọi phiên bản PHP và mọi pool FPM đang chạy, rồi khởi động lại dịch vụ.
  3. Rà mã nguồn tìm ini_set đổi session.serialize_handler.
  4. Theo dõi php.net để cập nhật ngay khi bản vá CVE-2026-115560 phát hành. Giữ tính năng tắt nếu bạn không cần nó.

Với khách hàng shared hosting

  • Bạn thường không sửa được php.ini cấp máy chủ. Hãy hỏi nhà cung cấp hosting đã tắt session upload progress và đã vá PHP2Shell chưa.
  • Trong cPanel hoặc DirectAdmin, chọn phiên bản PHP được hỗ trợ (8.2 trở lên). PHP 8.1 trở về trước đã hết hỗ trợ chính thức.
  • Nếu tự viết mã có đổi serialize handler lúc chạy, hãy bỏ đoạn đó.

Nguồn tham khảo