You are currently viewing php2shell PoC lộ lỗi RCE nghiêm trọng trong PHP core

php2shell PoC lộ lỗi RCE nghiêm trọng trong PHP core

Repo này là nơi tác giả (eness) công bố PoC cho hai lỗ hổng được gán mã CVE-2026-109618 và CVE-2026-109619, gộp chung dưới tên “php2shell”. Nói thẳng: nó chứng minh rằng kẻ tấn công có thể chạy lệnh hệ thống tùy ý trên server PHP mà không cần xác thực trước, chỉ bằng một request multipart POST bình thường.

Cơ chế gây lỗi nằm ở handler theo dõi tiến trình upload của session (php_session_rfc1867_callback trong ext/session/session.c). Hàm này lưu hai con trỏ zval * thô (post_bytes_processed và current_file_bytes_processed) trực tiếp vào HashTable đang sống. Khi một vòng cập nhật tiến trình đọc lại dữ liệu session, zend_hash_update() gọi zval_ptr_dtor để hủy cây dữ liệu cũ, giải phóng vùng nhớ. Vùng nhớ đó sau đó bị chiếm lại và con trỏ treo bị trỏ vào zend_fcall_info cùng zend_internal_function do kẻ tấn công dựng sẵn. Kết quả cuối cùng là PHP gọi zend_call_function(), và từ đó system() chạy lệnh tùy ý.

Điều kiện kích hoạt không có gì đặc biệt: session.upload_progress.enabled = 1, giá trị mặc định trong cấu hình PHP. Nghĩa là hàng loạt server đang chạy PHP mặc định đều nằm trong tầm ngắm nếu chưa vá.

Vì sao repo này đang hot

654 sao sau đúng một ngày tạo (21/10/2026) là con số nói lên mức độ hoảng của cộng đồng. Ngày 20/10, chi tiết hai lỗ hổng bị rò rỉ online trước khi có disclosure phối hợp. WatchTowr đã tái hiện được CVE-2026-109618, Huntress và Florian Roth (process-watcher) đang theo dõi. CVSS v4.0 chấm 9.2, mức Critical.

Cái làm repo này khác các bài blog phân tích suông là nó tập trung vào khả năng khai thác thực tế. PoC dùng offset symbol (--syms) giữa zval_ptr_dtor và zend_call_function để thích ứng với layout binary của từng distro (Debian Bookworm, Ubuntu Noble, Ubuntu Jammy). Đã xác nhận chạy trên build php-src chuẩn, gồm 8.4.4 và 8.2.34. Đây là kiểu công cụ mà đội red team và SOC đều muốn có trong tay ngay, một bên để test, một bên để dựng detection.

Thêm một lý do nữa: phạm vi ảnh hưởng. Báo cáo cho thấy PHP 5, 6, 7 và 8 đều có thể dính. Bản vá chính thức dự kiến chỉ phát hành cho các nhánh PHP 8 còn được hỗ trợ, tức là PHP 5.x, 7.x, 8.0, 8.1 (đã EOL) sẽ không có patch từ upstream. Một lượng lớn hệ thống legacy đang chạy WordPress, Drupal, Joomla, Magento sẽ phải tự xoay xở.

Cài đặt và dùng thử nhanh

Cần nói trước: tại thời điểm bài này viết, README ghi rõ PoC đang được phát triển và test, code sẽ được publish “very soon”. Repo hiện đóng vai trò điểm neo thông tin và kênh cập nhật. Bạn clone về được, nhưng đừng mong có exploit chạy ngay.

git clone https://github.com/eness/php2shell-CVE-2026-109618-CVE-2026-109619-PoC.git
cd php2shell-CVE-2026-109618-CVE-2026-109619-PoC
ls -la

Trong lúc chờ, phần mitigation trong README đáng đọc hơn cả PoC. Có 7 hướng xử lý được liệt kê: tắt cấu hình, script quick-fix tự động, patch C nguồn (session-upload-progress-counters.patch), custom rule Cloudflare WAF, cấu hình FrankenPHP Caddyfile, Lighttpd, và Apache (ModSecurity kèm .htaccess).

Biện pháp chặn tức thời rẻ nhất là tắt upload progress:

session.upload_progress.enabled = Off

Với hệ thống EOL không có patch chính thức, README khuyến nghị đúng một trong hai: áp dụng dòng cấu hình trên, hoặc rebuild PHP từ source với patch C đi kèm. Cả hai đều là việc trong ngày, không phải việc trong tuần.

Ai nên dùng, dùng để làm gì

  • Pentester / red team: cần một PoC đã xác nhận trên nhiều bản PHP để kiểm tra client có thực sự dính hay không, thay vì scan mù.
  • Blue team / SOC: phần detection guidance trong README hữu ích ngay. Nó liệt kê dấu hiệu hành vi cụ thể: process con bất thường do php-fpm, php-cgi, httpd, apache2 sinh ra, gồm shell tương tác (/bin/sh, /bin/bash, cmd.exe, powershell.exe), interpreter (python, perl), tiện ích mạng (curl, wget, nc, certutil.exe), pattern reverse shell (/dev/tcp/, fsockopen, mkfifo) và lệnh trinh sát (whoami, id, uname -a, ipconfig).
  • Sysadmin đang vận hành PHP legacy: đọc phần Action Items, đặc biệt mục isolate các bản EOL sau VPN hoặc WAF rule chặt.

Tôi sẽ không khuyên ai chạy PoC này trên production. Kể cả trong lab cũng nên dựng container tách biệt, vì bản chất lỗi là memory corruption, hành vi có thể không ổn định tùy layout binary.

Ưu điểm và hạn chế

Điểm được: tài liệu root cause viết rõ ràng, có phân tích từng bước trigger, free, reclaim, execution. Phần mitigation phủ nhiều stack web server khác nhau, không chỉ Apache. Có bảng phiên bản PHP kèm trạng thái patch. Có hướng dẫn detection cụ thể đến tên process. Đây là mức chi tiết mà một security advisory tử tế nên có.

Điểm chưa được: repo chưa có code exploit thực sự tại thời điểm công bố, chỉ là placeholder kèm tài liệu. License không rõ, đây là vấn đề với ai muốn dùng nội dung trong môi trường doanh nghiệp có kiểm tra pháp lý. Không có topic nào trên GitHub, khó tìm. Ngôn ngữ chính ghi là Shell nhưng phần lớn nội dung là văn bản Markdown và patch C.

Thêm nữa, chuyện PoC lộ trước ngày vá là tình huống xấu. Lịch phát hành bản vá chính thức được ghi là khoảng 14:00 UTC thứ Tư ngày 21/10, tức là cùng ngày repo này ra đời. Khoảng trống giữa lúc lỗ hổng được biết và lúc có patch là cửa sổ tấn công thật.

Kết luận thực dụng

Nếu bạn đang vận hành bất kỳ server PHP nào, việc cần làm hôm nay là kiểm tra session.upload_progress.enabled và lên lịch áp dụng patch ngay khi distro phát hành, chứ không phải ngồi đọc PoC. Còn nếu bạn làm security, repo này là điểm theo dõi đáng bookmark để bắt được bản exploit khi nó xuất hiện, đồng thời lấy luôn danh sách process con đáng ngờ để viết rule. Theo dõi tại eness/php2shell-CVE-2026-109618-CVE-2026-109619-PoC.

Đăng ngày 22/10/2026
Giang Na
Về tác giả: Giang Na
Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.

Giang Na

Người lập ra blog từ 2015 với những bài về Blogspot. Giờ tập trung vào cách đưa AI vào việc thường ngày, theo hướng thực dụng và dễ làm theo.