English

Tất cả lỗ hổng

Hai lỗi bộ nhớ trong PHP core: dữ liệu request còn được đọc sau khi đã giải phóng

Hai lỗi riêng trong PHP core, cùng nằm ở bước dọn dẹp request: bộ nhớ của request này còn được đọc khi xử lý request sau. Đường vào là bất kỳ request nào tới được PHP — không cần đăng nhập, không cần một route đặc biệt.

Nghiêm trọng CVSS 9.2 CVE-2026-109618 · Nghiêm trọng CVSS 9.2 CVE-2026-109619

Chuyện gì xảy ra

CVE-2026-109618: khi gặp lỗi hết bộ nhớ, PHP dùng longjmp() để thoát khỏi ngữ cảnh hiện tại. Một số ngữ cảnh không tính tới việc này, để bộ nhớ request ở trạng thái chưa khởi tạo, rồi bước dọn dẹp đọc hoặc rẽ nhánh theo vùng nhớ đó.

CVE-2026-109619: trạng thái toàn cục của PHP có lúc trỏ vào bộ nhớ request. Nếu không được đặt lại đúng, request sau đọc trạng thái cũ đã bị giải phóng.

Cả hai là lỗi trong mã lõi, không phải trong một extension, và NVD xếp CVSS 9.2. Một request dị dạng có thể dẫn tới chạy mã.

Đường vào

  • Bất kỳ request nào tới được PHP. Lỗi nằm ở đường dọn dẹp request, nên không cần đăng nhập và không cần một route đặc biệt để chạm tới.
  • Một đường được chỉ ra: session.upload_progress. Phân tích độc lập chỉ vào handler php_session_rfc1867_callback trong ext/session/session.c. Đó là một đường, không phải đường duy nhất.
  • Shared hosting: một pool FPM phục vụ nhiều site, nên request của site này có thể là request dị dạng với site khác trong cùng pool.

Bản PHP nào

  • Bản của distro: gói php8.x-fpm từ kho của distro hoặc từ PPA. Vá bằng apt khi nhà cung cấp phát hành bản mới.
  • Bản trong container: ảnh php:8.x-fpm hoặc ảnh tự dựng. Phải dựng lại ảnh; apt upgrade trên máy chủ không chạm tới PHP trong ảnh.
  • Bản trong ảnh ứng dụng: nếu ảnh có PHP riêng thì php -v trên máy chủ không nói gì về nó.

Đang chạy, không phải đã cài

  • FPM nạp mã khi khởi động: sau khi nâng gói phải kill -USR2 tiến trình master (nạp lại êm) hoặc khởi động lại dịch vụ. Gói đã nâng mà chưa nạp lại thì tiến trình vẫn chạy mã cũ.
  • Cấu hình cũng phải đọc từ đúng SAPI: CLI và FPM đọc hai bộ php.ini khác nhau, và FPM mới là bản phục vụ request.

Bản bị ảnh hưởng và bản vá

Sản phẩmCVEBản bị ảnh hưởngBản vá
PHPCVE-2026-109618>=7.3.0 <8.2.35 · >=8.3.0 <8.3.36 · >=8.4.0 <8.4.27 · >=8.5.0 <8.5.128.2.35 · 8.3.36 · 8.4.27 · 8.5.12
PHPCVE-2026-109619>=5.4.0 <8.2.35 · >=8.3.0 <8.3.36 · >=8.4.0 <8.4.27 · >=8.5.0 <8.5.128.2.35 · 8.3.36 · 8.4.27 · 8.5.12

Tóm tắt giữ nguyên tiếng Anh như trong cảnh báo gốc.

Mô tả gốc (PHP · CVE-2026-109618): PHP uses longjmp() for out-of-memory (OOM) errors to exit the current context and abort handling of the request. Some contexts may not properly account for this scenario and leave request memory in an uninitialized state before performing an allocation. The subsequent request cleanup procedure may read or branch on this memory. Multiple OOM strategies can consistently trigger this condition and …

Mô tả gốc (PHP · CVE-2026-109619): PHP has various global state that temporarily points into request memory. In some scenarios, global state may not be correctly reset, or may be repopulated after being reset. The global state may then refer to request memory even after it has been freed. Subsequent requests may read or branch on this stale state before it is fully initialized. Multiple strategies can trigger this condition and …

Cách xử lý

  • Nâng lên bản vá của từng nhánh — danh sách trong bảng ở trên, lấy từ dải phiên bản của dữ liệu.
  • Nhánh đã hết hỗ trợ (8.1 trở xuống) không có bản vá từ dự án: chỉ còn cách chuyển sang nhánh còn hỗ trợ, hoặc dùng biện pháp giảm thiểu bên dưới.
  • Giảm thiểu: đặt session.upload_progress.enabled = Off bằng một tệp drop-in trong conf.d — không sửa php.ini, để bản nâng cấp gói không ghi đè — rồi nạp lại FPM.
  • Đây là giảm thiểu, không phải bản vá: phân tích công khai cho rằng nó đóng một trong hai đường, nên đừng ghi nhận một máy là đã vá chỉ vì cờ đó đã tắt.

Tự kiểm tra

php -v

Cho biết: phiên bản PHP của SAPI CLI

php-fpm -i | grep -i upload_progress

Cho biết: giá trị FPM thật sự dùng; Off => Off là đã tắt

grep -r session.upload_progress /etc/php

Cho biết: dòng cấu hình; dòng bị chú thích bằng ; vẫn là bật, vì mặc định biên dịch là On

php -i | grep -i 'Loaded Configuration File'

Cho biết: (none) nghĩa là chạy bằng giá trị mặc định, và mặc định là On

systemctl list-units 'php*-fpm'

Cho biết: những nhánh FPM đang chạy trên máy

docker exec <container> php -v

Cho biết: phiên bản trong ảnh, không phải trên máy chủ

Nguồn

Viết từ cảnh báo gốc và tài liệu của nhà phát hành; phiên bản lấy từ dữ liệu của trang, cập nhật 10/11/2026. Khi có khác biệt, cảnh báo gốc là chuẩn.