You are currently viewing php2shell-poc và hai CVE PHP pre-auth RCE ảnh hưởng 78% website

php2shell-poc và hai CVE PHP pre-auth RCE ảnh hưởng 78% website

Repo ikow/php2shell-poc là bộ công cụ nghiên cứu cho hai lỗ hổng CVE-2026-109618 và CVE-2026-109619 trong PHP, cả hai đều được chấm CVSS 9.2. Nó gồm exploit, PoC kiểm chứng, rule phát hiện cho IDS/WAF/SIEM, và một lab Docker dựng sẵn để thử nghiệm.

Vấn đề gốc nằm ở cơ chế session.upload_progress của PHP kết hợp với cách Zend engine xử lý khi hết bộ nhớ (OOM). Khi OOM xảy ra, longjmp() được gọi nhưng để lại state của Zend engine ở trạng thái không hợp lệ. Một lỗ hổng khác là global state cũ bị giữ lại giữa các request trong FPM worker, dẫn tới use-after-free (UAF). Cả hai đường dẫn tới RCE, và một số chain không cần ứng dụng phải có lỗi gì cả.

Vì sao repo này đang được chú ý

855 sao sau ngày đầu tiên, con số không quá bất ngờ. Repo mô tả ảnh hưởng tới 78% website toàn cầu, bao gồm WordPress (43%), Joomla, Drupal, Laravel và Magento. Code PHP bị ảnh hưởng trải từ 5.4.0 (năm 2012) tới 8.5.11, tức khoảng 14 năm. Patch là commit 3584a98, đụng tới khoảng 300 file trong Zend engine và các extension.

Điểm khiến dân security đổ xô vào repo này là Chain D: zero-dependency pre-auth RCE trên mọi cài đặt Apache mod_php. Không cần LFI, không cần lỗ hổng ứng dụng, không cần đăng nhập. Chỉ một multipart POST là đủ. Chain E tương tự nhưng nhắm vào FPM, chỉ cần endpoint có session_start(). Với một lỗ hổng kiểu này, việc có sẵn PoC để kiểm tra hệ thống của mình là nhu cầu thực tế, không phải tò mò.

Nội dung repo chia làm bốn phần rõ ràng: exploit/, detection/, poc/, lab/. Tác giả Qi Deng, writeup đăng trên Substack cùng ngày 2026-10-21. Không có topic tag nào trên GitHub, không rõ license, đây là điểm trừ đầu tiên nếu bạn định dùng nó trong môi trường doanh nghiệp.

Cài đặt và chạy thử

Repo chạy bằng Python cho phần lớn script và có một lab Docker với PHP-FPM, nginx và Apache mod_php. Clone rồi dựng lab:

git clone https://github.com/ikow/php2shell-poc.git && cd php2shell-poc

# Start the lab (PHP-FPM + nginx + Apache mod_php)
cd lab && docker compose up -d

# Verify each chain
python3 ../poc/verify_session_injection.py --target http://127.0.0.1:18080
python3 ../poc/verify_handler_mismatch.py --target http://127.0.0.1:18080
python3 ../poc/verify_oom_trigger.py --host 127.0.0.1 --port 18081
python3 ../poc/verify_fpm_stale_state.py --target http://127.0.0.1:18080

# Run an exploit
python3 ../exploit/chain_a_session_lfi.py --host 127.0.0.1 --port 18080 --command 'id'

Ba exploit RCE có sẵn trong exploit/ cho Chain A, B, C. Chain D và E chỉ dành cho subscriber trả tiền, đây là kiểu kiếm tiền qua repo open source khá phổ biến hiện nay và cũng là điều cần cân nhắc trước khi đánh giá repo có “đầy đủ” hay không. Chain A chạy bằng Python, inject code vào filename upload rồi LFI include session file. Chain B là script PHP, khai thác var_destroy UAF, tìm zif_system qua EG() và ghi đè handler var_dump qua /proc/self/mem. Chain C pollute PS(serializer) của FPM worker.

Về phía phòng thủ, detection/ có 13 rule Suricata/Snort, 5 rule Sigma, 7 rule ModSecurity v2/v3 và một module Lua cho OpenResty. Cách giảm thiểu nhanh nhất theo README là block chuỗi PHP_SESSION_UPLOAD_PROGRESS trong multipart POST body, vì nó gần như không có use case hợp lệ nào.

Ai nên dùng và dùng thế nào

php2shell-poc và hai CVE PHP pre-auth RCE ảnh hưởng 78% website - ảnh 1
Ảnh: github.com/ikow/php2shell-poc

Đối tượng rõ nhất là pentester và red team cần kiểm tra hệ thống PHP của khách hàng, đặc biệt khi họ chưa patch. Bên blue team có thể lấy rule Suricata và ModSecurity để đẩy nhanh lên hệ thống phát hiện, thử xem có bắt được lưu lượng tương ứng không. Đội vận hành hosting dùng để test trên image container stock trước khi quyết định roll out bản vá.

Với dev thường, repo hữu ích để hiểu cơ chế session.upload_progress và cách Zend xử lý OOM. Nhưng đừng chạy exploit lên hệ thống bạn không có quyền. Đây là lỗ hổng pre-auth RCE, một request sai đích có thể làm sập worker hoặc để lại dấu vết trong log mà bạn không kiểm soát được.

So sánh với các lựa chọn khác

Trong địa hạt PoC lỗ hổng PHP, thường có các repo tập hợp exploit của nhiều CVE khác nhau thay vì chuyên sâu vào một lỗ hổng. Cách tiếp cận của php2shell-poc khác: đóng gói cả exploit, PoC kiểm chứng, rule phát hiện và lab trong một gói duy nhất cho hai CVE. Với một lỗ hổng cần thử nhiều SAPI (mod_php, FPM, CGI) và nhiều chain khác nhau, việc có sẵn lab Docker giúp tiết kiệm thời gian hơn là tự dựng môi trường. Không có lựa chọn nào khác tôi biết chắc có cùng độ phủ cho CVE cụ thể này, nên bỏ qua so sánh trực tiếp.

Ưu điểm và những chỗ cần cảnh giác

Ưu điểm lớn nhất là độ phủ. Năm chain, ba mức SAPI khác nhau, PoC dùng ASAN để kiểm chứng UAF, rule phát hiện cho bốn loại hệ thống. README gọn, cấu trúc thư mục rõ, có writeup đi kèm. Với một lỗ hổng đang hot, việc tác giả đưa cả docs/ANALYSIS.md và substack_article.md vào repo giúp người đọc kiểm tra lại kỹ thuật thay vì phải tin lời giới thiệu.

Điểm trừ đáng kể: không rõ license. Repo tạo và cập nhật cùng ngày 2026-10-21, độ trưởng thành gần như bằng không, chưa có issue cộng đồng, chưa có tranh luận độc lập. Hai chain D và E bị khoá sau paywall. Với tư cách một dev đọc blog, tôi thấy điều này hơi khó chịu khi repo được quảng cáo là công cụ phòng thủ, nhưng đó là lựa chọn của tác giả.

Cần lưu ý thêm: lab dùng PHP với cấu hình dễ tổn thương (php.ini và php-apache.ini trong lab/). Khi chạy trong mạng nội bộ, hãy xác nhận không có route nào lộ ra ngoài. Bản vá đầy đủ chỉ có ở PHP 8.2.35, 8.3.36, 8.4.27 hoặc 8.5.12+. Riêng Chain D nằm trong Zend engine core, không INI setting nào chặn được, tắt session.upload_progress.enabled chỉ giảm bề mặt tấn công, không sửa gốc.

Một chi tiết thực dụng trong README: nếu bạn đang vận hành WordPress, core không dùng PHP session, nhưng WooCommerce và nhiều plugin thì có. Joomla, Drupal, Magento và Laravel dùng session native mặc định. Nếu hệ thống của bạn nằm trong danh sách đó và chưa lên bản vá, chạy lab của repo này để tự kiểm tra trước khi đợi vendor phát hành bản cập nhật có thể tiết kiệm vài ngày lo lắng.

Repo: ikow/php2shell-poc, 855 sao, Python là ngôn ngữ chính, ngày tạo và cập nhật trùng nhau 2026-10-21, chưa có license công bố.

Đă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.