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.
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 handlerphp_session_rfc1867_callbacktrongext/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-fpmtừ kho của distro hoặc từ PPA. Vá bằngaptkhi nhà cung cấp phát hành bản mới. - Bản trong container: ảnh
php:8.x-fpmhoặc ảnh tự dựng. Phải dựng lại ảnh;apt upgradetrê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 -vtrê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 -USR2tiế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.inikhá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ẩm | CVE | Bản bị ảnh hưởng | Bản vá |
|---|---|---|---|
| PHP | CVE-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.12 | 8.2.35 · 8.3.36 · 8.4.27 · 8.5.12 |
| PHP | CVE-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.12 | 8.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 = Offbằng một tệp drop-in trongconf.d— không sửaphp.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 -vCho biết: phiên bản PHP của SAPI CLI
php-fpm -i | grep -i upload_progressCho biết: giá trị FPM thật sự dùng; Off => Off là đã tắt
grep -r session.upload_progress /etc/phpCho 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 -vCho 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.