# Tổng quan CVE-2026-109618 và CVE-2026-109619 ("PHP2Shell")

> Trạng thái tại thời điểm **2026-10-22 07:30 UTC**. **Bản vá ĐÃ được phát hành (2026-10-21).** Hãy nâng cấp ngay.
> Thông tin vẫn thay đổi nhanh; cần đối chiếu với bản công bố chính thức của PHP.

## Cập nhật lần 4 (2026-10-22): phân tích bài của Calif

Nguồn: [calif.io/php2shell](https://calif.io/php2shell/) ("A tale of two PHP remote vulnerabilities", Ryan Austin / @lcfr_hax, ngày 2026-10-21). Đây là bài của **chính nhóm phát hiện** (Calif, cùng OpenAI và Wiz), có giá trị cao về kỹ thuật nhưng chưa có mã PoC; các tuyên bố "đã xác nhận RCE" chưa kiểm chứng độc lập.

**Cơ chế kỹ thuật (bổ sung/làm rõ so với GHSA):**

- **Họ 1: khởi tạo dở dang trong hash table (chỉ mod_php).** `_zend_hash_str_add_or_update_i` tăng bộ đếm phần tử *trước* khi cấp phát key; nếu cấp phát gặp fatal (hết `memory_limit`), lúc teardown bucket chưa khởi tạo bị coi là hợp lệ. Xảy ra khi phân tích POST/RFC1867 trong `php_request_startup()`. Trên mod_php, request shutdown vẫn chạy sau khi startup lỗi nên bucket hỏng bị dùng. Trên **PHP-FPM, worker thoát khi startup lỗi nên họ này không áp dụng**.
- **Họ 2: trạng thái cũ còn sót giữa các request (mod_php và FPM).**
  - *Session upload-progress*: state session khởi tạo trong lúc phân tích multipart, trước khi module activation. Nếu parse bị fatal thì RSHUTDOWN của Session bị bỏ qua nhưng heap request vẫn bị giải phóng; worker mod_php sống tiếp với con trỏ session treo, request multipart thứ hai dùng lại chúng.
  - *Unserializer chung*: fatal giữa lúc giải mã (sau khi startup thành công) để lại con trỏ bookkeeping treo; request upload-progress sau đó dùng lại. Giả định slot-count có dấu bị phá, dẫn tới ghi có kiểm soát (phụ thuộc ứng dụng).
- **Chuỗi khai thác:** (1) vượt `post_max_size` bằng chunked HTTP/1.1, multipart HTTP/2 không có length, hoặc filter giải nén input; (2) làm cạn `memory_limit` bằng nhiều part upload tên file rỗng với tên field lồng sâu, thân request vẫn dưới 8 MiB; (3) kích fatal tại điểm cấp phát chọn trước; (4) request multipart thứ hai dùng state cũ.
- **Phạm vi:** bài ghi "PHP >= 5.4.0" ở một chỗ và "Apache mod_php, PHP >= 7.3" ở chỗ khác (không thống nhất). Đường sớm nhất truy về 5.4.0. Khẳng định "luôn khai thác được với cấu hình mặc định" (`memory_limit` 128 MiB, `post_max_size` 8 MiB).
- **FPM:** cần ứng dụng chạm tới một thao tác decode sau startup (`session_start()`, `session_decode()`, `unserialize()`, `maybe_unserialize()` của WordPress) **và** `session.upload_progress.enabled` bật. Tức FPM khó khai thác tổng quát hơn mod_php.
- **Ứng dụng được nói là đã xác nhận RCE không xác thực** (tuyên bố của tác giả): WordPress 7.1.2, Drupal 11.4.3, Joomla 6.1.4, MediaWiki 1.46.2, Roundcube 1.7.4, Magento 2.4.9, phpMyAdmin 5.2.3, Nextcloud 35.0.1, Laravel 13.11, Symfony 8.1, WHMCS. Có video demo (mod_php; Nginx + PHP-FPM). Bài không đưa mã khai thác.
- **Biện pháp tạm (khớp php.net):** FPM: `session.upload_progress.enabled=0` và `memory_limit=-1`; mod_php: `memory_limit=-1`. Tác giả nói rõ không thay thế bản vá và bỏ giới hạn bộ nhớ tăng rủi ro cạn RAM.
- **Không có IOC hay hướng dẫn phát hiện** trong bài.

**Tác động tới phân tích hiện có:**

- Bài **ủng hộ** lại vai trò của upload-progress trong 109619, nhưng làm rõ đó chỉ là một đường; bài còn nhấn mạnh **mod_php là rủi ro cao nhất** (khớp với ghi chú cũ). Cần lưu ý: ghi chú cũ "giả thuyết UAF upload-progress đã bị bác bỏ" chỉ đúng với cách mô tả của các PoC cộng đồng; bài của Calif cho thấy upload-progress vẫn là một đường thật.
- Không nhận diện được CVE nào ứng với họ nào (bài không ánh xạ). Đừng giả định.
- **Mốc thời gian sớm hơn rất nhiều**: PoC RCE gửi PHP 2026-08-14, PHP xác nhận 08-15, báo bug đầu 08-11 và bug thứ hai 08-21. Lỗ hổng được **biết cho tới ít nhất tháng 8** trong nhóm hẹp; không có bằng chứng khai thác trước 10-17. Mốc 10-17 (Amazon) vẫn là bằng chứng khai thác sớm nhất.
- Lịch sử: Stefan Esser 2004 (RCE qua memory limit), bug #78876 (2020), OSTIF/Quarkslab 2024 (OOM, chưa chứng minh).
- **Chưa khớp**: bài có dấu hiệu hai con số phiên bản (>= 5.4.0 và >= 7.3); chưa xác định nhánh cũ nào thực sự khai thác được.

## Cập nhật lần 3 (2026-10-22 07:30 UTC)

So với bản 12:30 UTC ngày 21/10:

- **Bản vá đã phát hành sớm hơn lịch 14:00 UTC.** Giờ chính xác chưa rõ (các nguồn ghi từ khoảng 12:59 đến 13:52 UTC). Các phiên bản đã vá: **8.5.12, 8.4.27, 8.3.36, 8.2.35**. Số hiệu dự đoán trước đó là đúng.
- **Nhánh 8.1 trở xuống không có bản phát hành chính thức.** PHP chỉ đăng các bản backport tối thiểu (chỉ mã nguồn) cho 7.4, 8.0, 8.1; bản này tắt session upload progress và `php -v` vẫn hiện số phiên bản cũ. Theo AWS, nhánh 5.4 đến 8.1 chưa có bản sửa cho CVE-2026-109618, chỉ có biện pháp cấu hình cho CVE-2026-109619.
- **Nguyên nhân gốc đã được công bố chính thức** và khác với giả thuyết trước đây (use-after-free ở `session.upload_progress`). Xem mục "Chi tiết kỹ thuật".
- **Biện pháp cấu hình giờ là biện pháp tạm thời chính thức nhưng chỉ một phần.** php.net nói chúng không làm hệ thống an toàn; chỉ nâng cấp mới xử lý đầy đủ.
- **Khai thác thực tế được báo cáo từ trước khi công bố**: Amazon MadPot thấy nỗ lực từ 2026-10-17 (nguồn gián tiếp qua Tenable). watchTowr thấy nỗ lực trên honeypot. Chưa có nguồn nào xác nhận vụ xâm nhập thành công, chiến dịch webshell hay botnet cụ thể.
- **Chưa có IOC đáng tin cậy.** Tín hiệu phát hiện chính là hành vi tiến trình (xem file 03).
- **Chưa có PoC nào được kiểm chứng hoạt động.** Khoảng 100 repo PoC trên GitHub, phần lớn rỗng hoặc chỉ có tài liệu, một số dựa trên giả thuyết đã bị bác bỏ. Vẫn không nên chạy.
- **Distro/hosting:** Debian, Ubuntu, Alpine, CloudLinux, cPanel và Docker official images đã có bản sửa; RHEL, Plesk, Remi chưa xác nhận. Chi tiết trong file 02 và 05.

## Tóm tắt

- Hai lỗ hổng RCE nằm trong **lõi PHP**, biệt danh **"PHP2Shell"**, đều **không cần xác thực**.
- CVSS v4.0 **9.2** cho cả hai (chính thức, có vector).
- Bản vá phát hành 2026-10-21: **8.5.12, 8.4.27, 8.3.36, 8.2.35**. PHP 8.2 hết hỗ trợ ngày 2026-12-31.
- Mọi phiên bản thấp hơn các số trên trong bốn nhánh này đều bị ảnh hưởng. Nhánh 8.1 trở xuống không còn được hỗ trợ; PHP không nêu rõ trạng thái ảnh hưởng nhưng nên coi là bị ảnh hưởng.
- Runtime bị ảnh hưởng (theo php.net): PHP-FPM, mod_php (rủi ro cao nhất), php-cgi, FrankenPHP, LiteSpeed.
- Cập nhật ứng dụng (WordPress, Magento...) không giúp được gì vì lỗi nằm ở tầng PHP.
- Khuyến nghị:
  - **Nâng cấp ngay** lên bản đã vá, rồi khởi động lại PHP-FPM/Apache/LiteSpeed.
  - Với bản backport của distro, số phiên bản vẫn thấp; xác minh bằng changelog có CVE ID.
  - Hệ thống chưa nâng cấp được: áp dụng biện pháp tạm thời, đặt sau WAF, hạn chế multipart.
  - Rà soát log và hành vi tiến trình từ **2026-10-17** trở đi (xem file 03).

## Chi tiết kỹ thuật (chính thức, từ GitHub advisories của PHP)

| | CVE-2026-109618 (GHSA-w8hw-w9fx-j79w) | CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp) |
|---|---|---|
| Tên | RCE do hỏng bộ nhớ khi hết bộ nhớ (OOM) | RCE do trạng thái toàn cục cũ còn sót |
| Nguyên nhân | PHP dùng `longjmp()` khi OOM; vùng nhớ của request chưa khởi tạo xong vẫn bị đọc lúc shutdown | Trạng thái thuộc request (lỗi, session, object, extension) còn tồn tại sau khi bộ nhớ đã bị giải phóng; request sau trên cùng worker đọc lại (use-after-free) |
| Thành phần | Phân tích multipart (thiếu xử lý content-length, quá nhiều header phần, nhiều file control rỗng với tên field lồng nhau) | Vòng đời request ở lõi |
| Điều kiện kích hoạt | Request multipart được chế tạo | Một request trước đó trên cùng worker kết thúc bằng lỗi nghiêm trọng (OOM, quá thời gian thực thi), cảnh báo INI trước khi khởi tạo, `fatal_error_backtraces` trên 8.5, hoặc session upload progress |
| Đã chứng minh | RCE không xác thực trên mod_php cấu hình mặc định. FPM, FrankenPHP, LSAPI: "có thể bị ảnh hưởng" (phân tích mã nguồn) | Đã xác nhận trên mod_php; session upload progress xác nhận trên mod_php và FPM |
| Cách sửa | OOM mềm trì hoãn, OOM cứng thoát ngay bằng `_exit()` | Chưa mô tả chi tiết trong advisory |

- CVSS v4.0 vector (cả hai): `CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N`. CWE: 416, 755, 824, 1325, 1419.
- Người báo cáo được ghi công: lcfr-hax, sagitzadik-wiz, tomash-areion, amyb-oai.
- Commit sửa lỗi: `31c0ea7d7ff1d1fccb6492e52dab544011628065` (theo Elastic, nguồn gián tiếp, chưa kiểm chứng trực tiếp).
- **Biện pháp tạm thời chính thức (php.net), chỉ giảm thiểu một phần:**
  - `memory_limit=-1` đặt bằng `php_admin_value` để ứng dụng không ghi đè được.
  - `post_max_size` thấp (8M, hoặc 32M nếu cần upload).
  - `session.upload_progress.enabled=0`.
  - `fatal_error_backtraces=0` trên PHP 8.5.
  - **Không** dùng `RLIMIT_AS` hoặc `RLIMIT_DATA`.

## Bảng thông tin

| Hạng mục | Nội dung |
|---|---|
| Component | PHP core: phân tích multipart (109618) và vòng đời request (109619) |
| Loại lỗi | Remote Code Execution, không cần xác thực |
| CVE | CVE-2026-109618, CVE-2026-109619 |
| CVSS | CVSS v4.0 **9.2** cho cả hai (chính thức). Con số 10.0 từ bài rò rỉ **không** phải điểm chính thức |
| Phiên bản bị ảnh hưởng | Mọi phiên bản dưới 8.2.35, 8.3.36, 8.4.27, 8.5.12. Nhánh 8.1 trở xuống: PHP không nêu rõ, nên coi là bị ảnh hưởng |
| Phiên bản đã vá | **8.5.12, 8.4.27, 8.3.36, 8.2.35** (2026-10-21) |
| Nhánh EOL | Không có bản phát hành chính thức. Có backport mã nguồn tối thiểu cho 7.4/8.0/8.1; bản vá thương mại: Ubuntu Pro (ESM), CloudLinux, cPanel EasyApache (5.x đến 8.1), Zend LTS, Freexian ELTS (nguồn thứ cấp) |
| Tình trạng khai thác | Có báo cáo nỗ lực khai thác (Amazon từ 10-17, Cloudflare, Patchstack, watchTowr). Chưa xác nhận vụ xâm nhập cụ thể. CISA nói chưa thấy khai thác (nguồn thứ cấp) |
| CISA KEV | Chưa có tại thời điểm kiểm tra (đã tra trực tiếp CVE-2026-109618; 109619 chưa tra trực tiếp). Cần kiểm tra lại |
| Hồ sơ CVE | GitHub advisory đã công bố (mức Critical). NVD/MITRE: **chưa xác định được** (không truy cập được). EPSS: chưa có bản ghi |
| Biện pháp giảm thiểu | Chỉ nâng cấp mới xử lý đầy đủ. Cấu hình ini chỉ giảm thiểu một phần |
| Virtual patching | Cloudflare WAF (chỉ traffic qua proxy), Imunify360 ModSecurity 8.83. AWS WAF, Akamai, Imperva, OWASP CRS chưa thấy rule chính thức |
| Mức độ phơi nhiễm (định hướng, từ Shodan) | Khoảng 1,3 đến 2,23 triệu host PHP; chưa cập nhật số liệu sau phát hành |

## Timeline (UTC)

| Thời điểm | Sự kiện |
|---|---|
| 2026-07-30 đến 08-21 | Theo Calif: OpenAI Patch the Planet liên hệ Calif (07-30); phát hiện điểm OOM đầu tiên (08-01); báo bug 1 (08-11); gửi PoC RCE cho PHP (08-14), PHP xác nhận (08-15); báo bug 2 (08-21). Tự công bố của tác giả, chưa kiểm chứng |
| 2026-09-24 | Bản stable trước đó: 8.5.11, 8.4.26, 8.3.35, 8.2.34 |
| 2026-10-06 đến 10-09 | 8.5.12RC1 / 8.4.27RC1 thuộc chu kỳ bugfix thường |
| 2026-10-17 | Amazon MadPot ghi nhận nỗ lực khai thác đầu tiên (nguồn gián tiếp qua Tenable) |
| 2026-10-20 | php.net đăng "Upcoming Critical PHP Security Release" |
| 2026-10-20 15:20 | Bài đăng Hacker News (sau đó bị xóa) về hai lỗ hổng RCE |
| 2026-10-20 19:16 | Repo PoC đầu tiên xuất hiện trên GitHub (theo ASEC) |
| 2026-10-20 19:35 | watchTowr đăng FAQ |
| 2026-10-21 02:13 | Dev lõi PHP: biện pháp giảm thiểu duy nhất là vá/nâng cấp |
| 2026-10-21 02:29 | Mẫu archive rò rỉ được nộp lên VirusTotal lần đầu |
| 2026-10-21 07:34 | Patchstack báo nhiều sự cố từ đối tác hosting (nguồn thứ cấp) |
| 2026-10-21 07:43 | Cloudflare báo thấy tấn công sớm, triển khai WAF rule cho mọi gói |
| 2026-10-21 09:26 | CloudLinux: rule Imunify360 8.83 lên Stable |
| **2026-10-21 ~13:00 đến 13:52** | **PHP phát hành 8.5.12, 8.4.27, 8.3.36, 8.2.35, sớm hơn lịch 14:00** (giờ chính xác chưa xác nhận) |
| 2026-10-21 13:45 | Debian thông báo DSA-6574-1 (trixie, php8.4 8.4.27-1~deb13u1) |
| 2026-10-21 14:19 | watchTowr đăng bài phân tích, nói thấy nỗ lực khai thác trên honeypot |
| 2026-10-21 ~15:00 | Số repo PoC đạt đỉnh (theo ASEC) |
| 2026-10-21 16:38 đến 18:17 | Alpine: php83 8.3.36-r0, php84 8.4.27-r0 (v3.24), php85 8.5.12-r0 (edge) |
| 2026-10-21 19:00 đến 22:12 | Docker official images dựng lại (trixie, apache, alpine3.23) |
| 2026-10-22 00:58 đến 01:04 | Docker fpm-alpine 8.2.35 đến 8.5.12 dựng lại |
| 2026-10-22 | CloudLinux alt-php vào stable; Red Hat cập nhật RHSB-2026-013 (fix đang triển khai); AWS dự kiến phát hành thêm bản vá |

## Đã xác nhận và chưa xác nhận

### Đã xác nhận (nguồn chính thức hoặc nhiều nguồn)

- Hai lỗ hổng RCE không cần xác thực, CVSS v4.0 9.2, vector đã công bố (GitHub advisories của PHP).
- Bản vá phát hành 2026-10-21: 8.5.12, 8.4.27, 8.3.36, 8.2.35.
- Nguyên nhân gốc như bảng "Chi tiết kỹ thuật" ở trên.
- Nhánh 8.1 trở xuống không có bản phát hành chính thức; chỉ có backport mã nguồn tối thiểu.
- Distro đã sửa: Debian 12/13, Ubuntu 22.04/24.04/26.04/26.10 (và ESM cho bản cũ), Alpine v3.24 (php83, php84), CloudLinux alt-php, cPanel EasyApache 4, Docker official images.
- PHP Foundation đã xem xét các PoC công khai và "không thấy mã khai thác hoạt động được" (qua Tenable).
- Chưa có IOC đáng tin cậy nào được công bố.

### Chưa xác nhận (không nên dùng làm căn cứ quyết định)

- **Giờ phát hành chính xác** (khoảng 12:59 đến 13:52 UTC; ChangeLog trên php.net ghi ngày 22/10 cho 8.5.12 và 8.4.27, có thể chỉ là sai lệch hiển thị).
- Mốc khai thác sớm nhất 2026-10-17 của Amazon (chỉ qua Tenable; chưa đọc bài gốc).
- Vụ xâm nhập thành công, nạn nhân cụ thể, chiến dịch webshell hoặc botnet: chưa thấy nguồn nào xác nhận. Huntress chưa thấy khai thác tính đến 20:30 UTC ngày 21/10.
- **Các site Hà Lan (Tweakers, Tweede Kamer, NCSC, Security.NL) tạm ngừng hoạt động**: ghi ở bản trước, nhưng lần kiểm tra này không tìm thấy nguồn xác nhận.
- Các tuyên bố trên Wikipedia (Chainguard vá sớm, NSA/CERT-EU/NCSC ra advisory, nhiều site bị gián đoạn).
- Điểm CVSS 10.0 và phạm vi "PHP 5.4.0 trở lên" từ nguồn rò rỉ; PHP chỉ nêu bốn nhánh 8.2 đến 8.5.
- NVD/MITRE: trạng thái bản ghi chưa xác định. EPSS: chưa có.
- Trạng thái RHEL, Plesk, Remi, ondrej/sury (arm64, PPA), Homebrew, windows.php.net, SUSE, TuxCare.
- Dự đoán của Sansec về tấn công hàng loạt trong 15 phút sau phát hành: chưa kiểm chứng được là có xảy ra hay không.
- Số liệu phơi nhiễm 1,3 đến 2,23 triệu host (Shodan, chỉ định hướng).

> **Cảnh báo về PoC:** khoảng 100 repo PoC công khai chưa được kiểm chứng, phần lớn rỗng hoặc chỉ có tài liệu; một số "mitigation script" chạy bằng quyền root. Chưa xác nhận repo nào chứa mã độc, nhưng rủi ro vẫn còn. Không chạy trên máy làm việc hoặc hạ tầng thật. Công cụ "checker" của Aikido ở chế độ definitive có thể làm crash PHP worker.

## Nguồn tham khảo

- [php.net: archive 2026 (thông báo phát hành 2026-10-21)](https://www.php.net/archive/2026.php)
- [GHSA-w8hw-w9fx-j79w (CVE-2026-109618)](https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w)
- [GHSA-6wmf-4rv5-p3rp (CVE-2026-109619)](https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp)
- [Calif: A tale of two PHP remote vulnerabilities (nhóm phát hiện)](https://calif.io/php2shell/)
- [watchTowr: PHP2Shell](https://watchtowr.com/intelligence/php-remote-code-execution-php2shell/)
- [Tenable: PHP2Shell FAQ](https://www.tenable.com/blog/php2shell-cve-2026-109618-cve-2026-109619-frequently-asked-questions-about-critical-php-remote)
- [Recorded Future: PHP2Shell exploitation](https://www.recordedfuture.com/blog/php2shell-vulnerability-exploitation)
- [Elastic: PHP2Shell detection](https://www.elastic.co/security-labs/threat-command/php2shell-php-rce-detection)
- [ASEC: PHP2Shell PoC](https://asec.ahnlab.com/en/95944/)
- [AlmaLinux: PHP2Shell](https://almalinux.org/blog/2026-10-21-php2shell-cve-2026-109618-cve-2026-109619/)
- [Debian DSA-6574-1](https://lists.debian.org/debian-security-announce/2026/msg00489.html)
- [Debian security tracker: CVE-2026-109618](https://security-tracker.debian.org/tracker/CVE-2026-109618)
- [Ubuntu: CVE-2026-109618](https://ubuntu.com/security/CVE-2026-109618)
- [Red Hat: RHSB-2026-013](https://access.redhat.com/security/vulnerabilities/RHSB-2026-013)
- [CloudLinux blog: alt-php và EasyApache](https://blog.cloudlinux.com/php-cve-2026-109618-and-cve-2026-109619)
- [AWS Security Bulletin 2026-143](https://aws.amazon.com/security/security-bulletins/2026-143-aws/)
- [Docker Hub: official php image tags](https://hub.docker.com/_/php)
- [docker-library/php commits](https://github.com/docker-library/php/commits/master)
- [Alpine packages](https://pkgs.alpinelinux.org/packages?name=php84&branch=v3.24)
- [Plesk KB: CVE-2026-109618 và CVE-2026-109619](https://support.plesk.com/hc/en-us/articles/44397729587351-Vulnerability-CVE-2026-109618-and-CVE-2026-109619-Remote-code-execution-in-PHP-shipped-with-Plesk)
- [Cloudflare WAF changelog](https://developers.cloudflare.com/waf/change-log/changelog/)
- [BleepingComputer: PHP ships emergency patches](https://www.bleepingcomputer.com/news/security/php-ships-emergency-patches-for-critical-php2shell-flaws/)
- [Blue-B/php2shell-guard (cộng đồng, chặn multipart)](https://github.com/Blue-B/php2shell-guard)
- [Sansec: PHP2Shell](https://sansec.io/research/php2shell)
- [CERT-EU: Security Advisory 2026-018](https://cert.europa.eu/publications/security-advisories/2026-018/)
