Rộ lên trên mạng xã hội lan truyền một cảnh báo khẩn về hai lỗ hổng bảo mật nghiêm trọng trong PHP với điểm nguy hiểm 9,2 trên thang 10. Đây không phải tin đồn thổi phồng: ngày 21/10, chính đội ngũ phát triển PHP đã phải phát hành bản cập nhật khẩn cấp ngoài lịch trình thường lệ để vá hai lỗ hổng này và giới bảo mật đặt cho vụ việc cái tên chung là PHP2Shell.
Để hiểu vì sao vụ việc được đánh giá là rất nghiêm trọng, cần biết PHP là gì.
PHP là ngôn ngữ lập trình chạy trên máy chủ để tạo ra các trang web động, nó ra đời từ năm 1994, ban đầu do Rasmus Lerdorf viết cho trang cá nhân của mình (PHP lúc đầu là viết tắt của “Personal Home Page”), nay là mã nguồn mở và là một trong những nền tảng web lâu đời nhất còn phổ biến.
Cách nó hoạt động, nói nôm na: một trang web tĩnh giống như tờ giấy in sẵn — ai vào xem cũng thấy y hệt nhau, không tương tác được gì trên đó. Còn web chạy PHP giống như có một “đầu bếp” đứng trong bếp của máy chủ: mỗi khi có người truy cập, PHP mới chạy code, lấy dữ liệu từ cơ sở dữ liệu (ví dụ nội dung bài viết, bình luận, thông tin tài khoản), ráp thành trang HTML hoàn chỉnh rồi mới gửi về trình duyệt của người xem. Người dùng không bao giờ nhìn thấy code PHP, họ chỉ nhận được trang web đã “nấu” xong. Nhờ vậy mà web mới có đăng nhập, đăng bài, bình luận, giỏ hàng, thanh toán — những thứ thay đổi theo từng người dùng.
PHP là gì?
Để hiểu vì sao vụ việc được đánh giá là rất nghiêm trọng, cần biết PHP là gì.
PHP là ngôn ngữ lập trình chạy trên máy chủ để tạo ra các trang web động, nó ra đời từ năm 1994, ban đầu do Rasmus Lerdorf viết cho trang cá nhân của mình (PHP lúc đầu là viết tắt của “Personal Home Page”), nay là mã nguồn mở và là một trong những nền tảng web lâu đời nhất còn phổ biến.
Cách nó hoạt động, nói nôm na: một trang web tĩnh giống như tờ giấy in sẵn — ai vào xem cũng thấy y hệt nhau, không tương tác được gì trên đó. Còn web chạy PHP giống như có một “đầu bếp” đứng trong bếp của máy chủ: mỗi khi có người truy cập, PHP mới chạy code, lấy dữ liệu từ cơ sở dữ liệu (ví dụ nội dung bài viết, bình luận, thông tin tài khoản), ráp thành trang HTML hoàn chỉnh rồi mới gửi về trình duyệt của người xem. Người dùng không bao giờ nhìn thấy code PHP, họ chỉ nhận được trang web đã “nấu” xong. Nhờ vậy mà web mới có đăng nhập, đăng bài, bình luận, giỏ hàng, thanh toán — những thứ thay đổi theo từng người dùng.
Quy mô của PHP rất lớn: theo thống kê của W3Techs, khoảng 70% số website mà W3Techs xác định được ngôn ngữ phía máy chủ. WordPress được viết bằng PHP, mà WordPress lại là nền tảng của một phần rất lớn web hiện nay; ngoài ra còn có Wikipedia, Facebook (giai đoạn đầu), Drupal, Magento, framework Laravel, và cả phần mềm diễn đàn XenForo.
Về PHP2Shell
Mức độ phổ biến của PHP cũng là lý do vụ PHP2Shell lúc nãy nghiêm trọng đến vậy: PHP nằm ở “phòng máy” của máy chủ, mọi yêu cầu gửi tới trang web đều được bộ máy PHP đọc và xử lý trước, rồi mới tới phần code của website. Lỗ hổng nằm ngay trong nhân PHP thì dù website được viết cẩn thận đến đâu cũng không tự cứu được mình, và lượng máy chủ dùng PHP quá lớn nên quy mô tấn công sẽ là khổng lồ.
Hai lỗ hổng này mang mã số CVE-2026-109618 và CVE-2026-109619. Điểm chung đáng sợ nhất của chúng là cho phép kẻ tấn công “thực thi mã từ xa”, hiểu nôm na là một người lạ ở bất cứ đâu trên thế giới cũng có thể ra lệnh cho máy chủ của website làm theo ý mình, như thể hắn đang ngồi ngay trước chiếc máy đó.
Hắn không cần có tài khoản, không cần biết mật khẩu, cũng không cần lừa được ai trong công ty bấm vào một đường link lạ. Kẻ tấn công chỉ cần gửi tới máy chủ một yêu cầu truy cập được chế tác đặc biệt, tương tự như gõ một “câu thần chú” đúng cú pháp, là cánh cửa phòng máy hé mở. Một khi đã vào được, hắn có thể đánh cắp dữ liệu, cài cắm mã độc, thay đổi nội dung trang web hoặc biến chính máy chủ đó thành bàn đạp để tấn công tiếp các nơi khác.
Điều khiến giới chuyên môn lo ngại hơn cả là cú tấn công diễn ra ở giai đoạn cực kỳ sớm. Bình thường, một website có nhiều lớp bảo vệ như tường lửa và CDN, cùng với các lớp kiểm tra bên trong như đăng nhập, phân quyền, nhưng các lớp đó chỉ phát huy tác dụng khi chương trình của website bắt đầu chạy
Hai lỗ hổng này nằm sâu trong chính PHP, tầng xử lý đứng trước cả chương trình của website, nên đòn tấn công đã hoàn tất trước khi website kịp “thức dậy” để tự vệ.
Hãng bảo mật Datadog đã tự tái hiện thành công cuộc tấn công trong phòng thí nghiệm và xác nhận rằng mọi cơ chế đăng nhập ở tầng ứng dụng đều không chặn nổi, bởi yêu cầu độc hại đã được PHP xử lý xong từ trước khi tới lượt ứng dụng.
Về bản chất kỹ thuật, CVE-2026-109618 và CVE-2026-109619 là hai lỗi khác nhau trong cách PHP quản lý bộ nhớ khi phục vụ người truy cập.
Quảng cáo
Ở lỗi thứ nhất, PHP đang chuẩn bị dữ liệu cho một lượt truy cập thì bị ngắt quãng giữa chừng vì hết bộ nhớ; đến bước dọn dẹp, nó lại coi phần dữ liệu đang làm dở đó là dữ liệu hoàn chỉnh và làm theo, khiến vùng nhớ bị xáo trộn, và kẻ tấn công lợi dụng sự xáo trộn đó để chạy code của mình.
Ở lỗi thứ hai, một phần trạng thái nội bộ của lượt truy cập trước chưa được xoá sạch dù vùng nhớ chứa nó đã bị thu hồi; khi lượt truy cập tiếp theo rơi vào cùng một tiến trình phục vụ, nó vô tình dùng lại trạng thái cũ kia trước khi trạng thái đó kịp được cài đặt lại từ đầu.
Theo Cisco Talos, cả hai lỗi đều tồn tại trong mọi bản PHP kể từ phiên bản 5.4, tức là gần như mọi website dùng PHP được xây dựng trong hơn một thập kỷ qua đều nằm trong vùng ảnh hưởng, trong đó có các nền tảng quen thuộc như WordPress, Drupal, Magento, WooCommerce và Laravel.
PHP2Shell đã bị khai thác chưa?
Nhiều nhóm nghiên cứu bảo mật cho biết, họ đã thử nghiệm và họ đã tái hiện thành công việc khai thác lỗ hỏng này. Hãng Rapid7 khuyến cáo các tổ chức vá lỗi ngay lập tức, ở mức khẩn cấp, đừng chờ đợi bất kì bản cập nhật hay đợt bảo trì nào.
Đã có tấn công thật và watchTowr hiện đang thấy các lượt khai thác thật nhắm vào cả hai lỗi, Cloudflare cũng đã báo có tấn công sớm.
Quảng cáo
Rắc rối lớn nhất nằm ở các hệ thống cũ, các phiên bản PHP từ bản 8.1 trở về trước đã bị ngừng hỗ trợ nên sẽ không nhận được bản vá chính thức nào nữa, và Cisco Talos ước tính khoảng một nửa số hệ thống PHP hiện nay thuộc diện không nhận được bản vá như vậy. Không đọc lộn đâu, một nữa số hệ thống dùng PHP thuộc diện cổ lổ sỹ không nhận được bản cập nhật nữa.
Những website bị bỏ quên, chạy PHP cũ suốt nhiều năm, sẽ là đích ngắm đầu tiên của kẻ tấn công.
Biện pháp hiện tại?
Cách xử lý duy nhất là cập nhật PHP lên các bản đã vá, gồm 8.2.35, 8.3.36, 8.4.27 và 8.5.12, rồi khởi động lại các tiến trình phục vụ web. Các mẹo chỉnh cấu hình đang được truyền tay nhau trên mạng chỉ chặn được một vài đường tấn công cụ thể chứ không làm cho hệ thống trở nên an toàn, và cả đội ngũ PHP lẫn Datadog đều nhấn mạnh rằng chỉ có cập nhật mới là cách xử lý hoàn chỉnh.
Với người dùng bình thường, điều cần biết là lỗ hổng này nằm ở phía máy chủ của các website chứ không nằm trong điện thoại hay máy tính cá nhân, nên phần việc xử lý thuộc về đội kỹ thuật của từng trang web và các nhà cung cấp dịch vụ lưu trữ web.
Riêng những ai đang tự quản trị một website WordPress hay một trang bán hàng, đây là lúc cần kiểm tra phiên bản PHP trong trang quản trị hosting và nâng cấp càng sớm càng tốt, hoặc liên hệ ngay nhà cung cấp hosting để hỏi về bản vá.
Một chi tiết đáng chú ý là theo Cisco Talos, trí tuệ nhân tạo đã đóng vai trò quan trọng trong việc phát hiện ra hai lỗ hổng này. Hãng này cho rằng AI đang tạo ra một làn sóng lỗ hổng được phát hiện ngày càng dồn dập, buộc các tổ chức phải thay đổi hẳn thói quen vá lỗi chậm rãi trước đây, đồng thời liên tưởng vụ việc tới Log4Shell, lỗ hổng từng gây chấn động giới công nghệ toàn cầu vì cũng nằm trong một thành phần nền tảng được dùng ở khắp nơi.
Trong những ngày tới, quy mô thật của PHP2Shell sẽ dần rõ hơn, còn thông điệp trước mắt dành cho mọi tổ chức đang vận hành website rất đơn giản: hãy kiểm tra phiên bản PHP ngay hôm nay.
Các người bạn dùng nhiều AI và có chút hiểu biết về lĩnh vực này nói với mình, việc AI tìm ra lỗ hỏng nó dễ hơn rất nhiều là làm ra bản vá, cho nên trong thời gian tới, các lỗ hỏng sẽ liên tục xuất hiện nhờ sự phát hiện của AI, câu hỏi đặt ra là chúng có theo kịp để vá không?
Theo: PHP.net, Cisco Talos, Rapid7, Datadog
