BÀI VIẾT

PHP2Shell: AI tìm ra lỗi mà con người bỏ sót suốt mười năm

Một lỗi trong engine lõi PHP tồn tại suốt mười năm, từ lúc AI gắn cờ bất thường đến bản vá CVSS 9.2 chỉ mất chín tuần. Dòng thời gian PHP2Shell nói gì về chuyện audit, AI hỗ trợ nghiên cứu, và việc cần vá ngay trong tuần này.

Minh họa website và máy chủ kết nối qua mạng có cổng bảo vệ.

Đọc cùng AI

Chọn nội dung để sao chép và dán vào trợ lý AI. Không tự gửi dữ liệu. Nội dung CMS được chuyển sang Markdown; dùng Markdown gốc nếu có.

CVE-2026-109618. Điểm CVSS 9.2. Lỗi này nằm trong engine lõi của PHP từ bản 5.4, tức là hơn mười năm, trong một ngôn ngữ đang chạy khoảng 70% web toàn cầu. Không phải plugin. Không phải theme. Không phải một dòng code ứng dụng nào ai đó viết ra. Chính cái engine.

Wiz Research gọi chuỗi lỗi này là PHP2Shell. Bốn lỗi riêng biệt, ghép lại: một use-after-free trong bộ unserializer xử lý tiến độ upload, một đường leak thẳng vùng nhớ process (password, token, API key nằm ngay trong RAM của worker), một use-after-free thứ hai kích hoạt qua backtrace khi gặp fatal error, và một lỗi type-confusion trong OPcache làm hỏng vùng nhớ chia sẻ giữa các worker. Ghép bốn cái lại, ra remote code execution không cần xác thực. Wiz demo thành công trên WordPress, Drupal và Joomla bản hiện hành, không phải môi trường dựng sẵn cho dễ demo.

Tách riêng khỏi chuỗi RCE, lỗi leak vùng nhớ process tự nó đã là một vấn đề, và có khi còn nguy hiểm hơn vì ít ai chú ý. Worker PHP-FPM giữ password, session token, API key trong bộ nhớ khi xử lý request. Đọc được vùng nhớ đó không cần chạy code, chỉ cần kích hoạt đúng đường fatal-allocation là lộ hết. Nếu host của bạn chạy bất kỳ bản PHP nào từ 5.4 đến trước 21/10, cứ coi như mọi secret đi qua các worker đó có khả năng đã bị lộ, và xoay vòng (rotate) lại, đừng nghĩ vá bản PHP là xong việc.

Điều khiến vụ này khác hẳn đống CVE đổ về hàng ngày là cách người ta tìm ra nó. Nhóm Wiz chạy song song Wiz Atlas, Gemini 4 Argon của Google và GPT-5.6 Sol của OpenAI, nhằm thẳng vào source code PHP. Tìm và ghép bốn lỗi memory-safety riêng biệt trong một đoạn code cũ như vậy thường là việc ngốn cả tháng trời của một team an ninh giỏi. Wiz nói các model đưa họ tới kết quả chỉ trong khoảng một tuần.

Chín tuần, từ đầu đến bản vá

19/8: bất thường được gắn cờ. 20 và 21/8: Wiz xác nhận RCE chạy được trên ba nền CMS lớn nhất internet. 24/8: team an ninh của PHP nhận được báo cáo. Sau đó là một tháng làm việc lặng lẽ để dựng bản vá, vì bốn lỗi memory liên kết với nhau không thể vá qua loa, và team PHP phải cẩn thận để không tung ra bản vá làm sập production thật. Công bố công khai và bản vá chính thức ra ngày 21/10, chín tuần sau khi lỗi được gắn cờ lần đầu.

Dòng thời gian từ lúc AI phát hiện lỗi (19/8) đến khi xác nhận RCE, báo cho nhóm PHP, và công bố bản vá (21/10), theo tường trình của Wiz Research.
Chín tuần từ lúc AI gắn cờ bất thường đến bản vá CVSS 9.2. Nguồn: Wiz Research.

Cái đáng chú ý hơn chuyện “AI tìm ra lỗi”

Mọi trang tin đưa PHP2Shell đều lấy góc AI làm tiêu đề, vì đó là tiêu đề dễ viết. Cái đáng chú ý hơn nằm sâu trong bài gốc của Wiz: lỗi này sống trong lõi PHP suốt một thập kỷ, qua không biết bao nhiêu lượt audit nội bộ và bên ngoài của một ngôn ngữ chạy khoảng bảy trên mười website, mà không ai bắt được. Con người review mà bỏ sót mười năm. Một bộ model tìm ra trong một tuần. Tỷ lệ đó nên làm ai còn tin “mình đã audit security một lần rồi” cảm thấy không ổn.

Vấn đề dual-use không ai muốn nói thẳng

Rút thời gian audit từ nhiều tháng xuống một tuần thì rút cho cả hai phía. Wiz, Calif và OpenAI xử lý vụ này theo đúng quy trình responsible disclosure, báo cho team PHP chứ không bán hay khai thác. Nhưng không có gì trong bộ công cụ họ dùng buộc phải làm vậy. Cùng một bộ model, nhằm vào cùng source code PHP, do ai đó không có ý định nộp CVE chạy, sẽ ra cùng chuỗi lỗi trong khoảng thời gian tương đương. Chín tuần giữa lúc phát hiện và lúc vá là toàn bộ khoảng thời gian cả hệ sinh thái có để chuẩn bị trước khi thông tin công khai, và khoảng thời gian đó do tốc độ PHP có thể vá an toàn quyết định, không phải do tốc độ người khác có thể tự mò ra chuỗi lỗi tương tự.

Việc nên làm ngay trong tuần này

Kiểm tra bản PHP trên từng host đang phục vụ traffic, không chỉ những host bạn nhớ tên. Đây là lỗi engine lõi, nên một WAF đặt trước một bản PHP có lỗi không giải quyết được gì. Wiz nói rõ: cài bản vá security là cách khắc phục toàn diện duy nhất. Nếu bạn chạy WordPress, Drupal, Joomla hay bất kỳ thứ gì trên PHP mà chưa xác nhận đã có bản vá 21/10, đó là việc đứng đầu danh sách hôm nay, trên mọi việc khác. Image container build trước ngày đó cần build lại, chứ không chỉ restart host đang chạy.

Một điều nữa nên kiểm tra: exploit hoạt động của Wiz đã có từ 20/8, sớm hai tháng trước khi công bố công khai, nhưng vẫn nằm trong lab của researcher chứ không phải ngoài thực tế. Chưa có bằng chứng công khai nào về việc bị khai thác thật trước khi có bản vá, và bài công bố của Wiz cũng không nói ngược lại. Nhưng nếu log của bạn lưu đủ xa, rà lại log PHP-FPM và web server trong khoảng 8-10 là một khoản bảo hiểm rẻ, đặc biệt với những hệ thống public-facing chậm vá.

PHP mang lỗi này từ khoảng 2012, qua mọi đợt audit security ai đó từng trả tiền để làm. Ba model AI mất khoảng một tuần để tìm ra. Tự quyết định xem điều đó nói gì về chất lượng các đợt audit đó.

Nguồn

Wiz Research: PHP2Shell (công bố kỹ thuật gốc, truy cập 26/10/2026).

Thảo luận

Bình luận được duyệt trước khi công khai. Email của bạn được giữ riêng tư.

← Về danh sáchRead in English