Fragnesia CVE-2026-46300: Lỗi kernel Linux biến webshell PHP thành quyền root — Kiểm tra và vá trước 31/10
Ngày 28/10/2026, CISA — Cơ quan An ninh mạng và Hạ tầng Hoa Kỳ — đã đưa lỗ hổng kernel Linux Fragnesia (CVE-2026-46300) vào danh mục lỗ hổng đang bị khai thác thực tế (KEV), với hạn khắc phục 31/10/2026 cho các cơ quan liên bang Mỹ. Lý do khiến lần bổ sung này đáng chú ý: Fragnesia không đứng một mình. Nó đang bị nối chuỗi với cặp lỗ hổng PHP2Shell để biến một webshell bình thường thành quyền root hoàn toàn — và chiến dịch thực tế đã chiếm quyền root trên 25 firewall chỉ trong 2 ngày 23–24/10.
Nếu bạn đang chạy VPS Linux, máy chủ web PHP, WordPress, hay bất kỳ máy Linux nào có dịch vụ lộ ra internet, bài này dành cho bạn. Mình sẽ giải thích Fragnesia là gì bằng ngôn ngữ dễ hiểu, tóm tắt chuỗi tấn công có thật, rồi hướng dẫn bạn kiểm tra và vá từng bước — bao gồm cả kernel lẫn PHP, vì vá một nửa là chưa đủ.
1. Chuyện gì vừa xảy ra?
Theo báo cáo của hãng bảo mật Dream, được SecurityWeek và The Hacker News đưa tin ngày 28/10, một chiến dịch tấn công (mà Dream đánh giá là có liên hệ với Trung Quốc, nhưng chưa quy kết cho một nhóm cụ thể nào) đã làm như sau:
- Dùng công cụ tìm kiếm thiết bị FOFA để quét khoảng 19.000 firewall lộ giao diện quản trị ra internet.
- Lọc xuống còn khoảng 240 mục tiêu chạy PHP 8.0.30 — một phiên bản PHP đã hết hỗ trợ — tại Mỹ, Nhật Bản, Đài Loan và Hàn Quốc.
- Dùng công cụ khai thác tự động để tấn công hàng loạt trong 2 ngày 23–24/10, chiếm quyền root trên 25 firewall, cài webshell PHP với quyền root trên 24 thiết bị để giữ quyền truy cập lâu dài.
- Trên 2 firewall thuộc một tổ chức liên quan tới chính phủ Mỹ, kẻ tấn công đi xa hơn: dựng kênh SSH ngược, xâm nhập máy chủ quản trị firewall nội bộ, lấy cấu hình và thông tin đăng nhập của toàn bộ firewall mà tổ chức đó quản lý, rồi giải mã mật khẩu tài khoản dịch vụ LDAP, liệt kê người dùng và nhóm trong domain, thử phun mật khẩu (password spraying) và tìm cách tạo tài khoản Active Directory cửa sau.
Điểm đáng sợ nhất không nằm ở con số 25. Nó nằm ở chỗ: 22 firewall còn lại vẫn đang "nằm im" với webshell đang hoạt động — tức là kẻ tấn công có thể quay lại bất cứ lúc nào. Và toàn bộ chiến dịch này dùng một lỗ hổng kernel đã được công bố kèm bản vá từ tháng 5/2026.
2. Fragnesia (CVE-2026-46300) là gì?
Fragnesia là lỗi leo thang đặc quyền cục bộ (local privilege escalation) trong kernel Linux, điểm CVSS 3.1 là 7.8, nhóm lỗi CWE-456 (không khởi tạo biến). Nói nôm na như thế này:
Linux lưu dữ liệu file đang dùng vào bộ nhớ đệm gọi là page cache để đọc cho nhanh. Khi xử lý gói mạng, kernel có thể "mượn" tạm vùng nhớ này thay vì copy — nhưng nó phải nhớ rằng vùng nhớ đó đang được chia sẻ, để không ghi đè lên. Lỗi nằm ở bước gộp các mảnh gói tin (skb coalescing): kernel làm mất "cờ đánh dấu" vùng nhớ đang chia sẻ. Sau đó, khi xử lý lưu lượng IPsec ESP, kernel giải mã và ghi đè ngay lên vùng nhớ page cache đó.
Hệ quả: kẻ tấn công có thể ghi đè lên bản sao trong bộ nhớ của một file mà mình chỉ có quyền đọc — ví dụ file /usr/bin/su. File trên đĩa không hề thay đổi, nhưng bản sao trong bộ nhớ đã bị sửa. Chạy su lúc này sẽ đọc bản đã bị sửa và trao quyền root, dù kẻ tấn công vốn chỉ được đọc file đó.
Một điểm cực kỳ quan trọng cần hiểu rõ: Fragnesia một mình không phải là lỗ hổng tấn công từ xa. Kẻ tấn công cần có sẵn khả năng chạy code trên máy — một webshell, một tài khoản bị lộ, một job CI, một container bị chiếm. Đó chính là lý do nó nguy hiểm khi đi kèm PHP2Shell: PHP2Shell cho kẻ tấn công "chân" trong máy với quyền của web server, Fragnesia biến cái "chân" đó thành quyền root.
Fragnesia cũng là "hậu duệ" của nhóm lỗi Dirty Frag công bố trước đó: bản vá Dirty Frag khiến kernel dựa vào cờ đánh dấu "đang chia sẻ" nói trên — và một lỗi cũ từ năm 2013 trong code gộp mảnh gói tin đã lặng lẽ làm mất cờ đó, mở ra đường tấn công mới. Lỗi được công bố kèm mã khai thác thử nghiệm (PoC) và bản vá từ ngày 13/5/2026.
3. Ai bị ảnh hưởng?
Theo hồ sơ CVE, các kernel từ 3.9 trở lên đều nằm trong diện ảnh hưởng, và bản sửa đã có trong các nhánh ổn định sau. Bảng dưới đây dùng số phiên bản upstream để bạn đối chiếu nhanh — nhưng lưu ý quan trọng ở ngay bên dưới bảng.
| Nhánh kernel (upstream) | Đã sửa từ |
|---|---|
| 5.10.x | 5.10.257 trở lên |
| 5.15.x | 5.15.208 trở lên |
| 6.1.x | 6.1.174 trở lên |
| 6.6.x | 6.6.141 trở lên |
| 6.12.x | 6.12.91 trở lên |
| 6.18.x | 6.18.33 trở lên |
| 7.0.x | 7.0.10 trở lên (và 7.1 trở lên) |
Lưu ý: các bản phân phối như Ubuntu, Debian, RHEL thường backport (đưa bản vá về) các kernel cũ hơn mà không đổi số phiên bản lớn. Vì vậy, cách kiểm tra đúng không phải là chỉ so số uname -r với bảng upstream, mà là đối chiếu với thông báo bảo mật của đúng distro bạn đang dùng (ví dụ Ubuntu USN-8373-1) và xem gói kernel của bạn đã được cập nhật từ kênh bảo mật của distro hay chưa. Đối chiếu số upstream một cách máy móc có thể khiến bạn kết luận sai cả hai chiều.
Ngoài kernel, nửa còn lại của chuỗi tấn công cũng phải được vá:
- PHP2Shell (CVE-2026-109618 và CVE-2026-109619, CVSS 9.2): đã vá trong PHP 8.2.35, 8.3.36, 8.4.27 và 8.5.12. Các nhánh PHP 8.1 trở xuống không có bản vá chính thức — phải nâng cấp hoặc lấy bản vá từ nhà cung cấp distro.
- Thiết bị mạng chạy PHP: firewall trong vụ việc chạy PHP 8.0.30 đã hết hỗ trợ. Nếu bạn dùng firewall, VPN hay thiết bị mạng có giao diện web, hãy hỏi thẳng nhà cung cấp xem thiết bị có dùng PHP không và khi nào có bản vá — bạn không tự vá được firmware của hãng.
- Đối tượng rủi ro cao nhất: máy chủ Linux chạy PHP lộ ra internet, máy chủ chia sẻ nhiều người dùng (shared hosting, CI, sandbox chạy code không tin cậy), container host dùng chung kernel với container, và bất kỳ thiết bị nào để giao diện quản trị lộ ra internet.
4. Kiểm tra hệ thống của bạn trong 5 phút
Mình đã chạy thử các lệnh kiểm tra thật trên một máy Ubuntu để bạn thấy output trông như thế nào. Bạn chỉ cần SSH vào VPS của mình và chạy lần lượt:
uname -r
php -v
lsmod | grep -E 'esp|rxrpc|xfrm' || echo 'khong co module esp/rxrpc dang load'
Cách đọc kết quả:
uname -rcho bạn kernel đang chạy. Sau khi cập nhật, bạn phải kiểm tra lại lệnh này — vì kernel mới chỉ có hiệu lực sau khi reboot, không phải ngay sau khi cài gói.php -vcho bạn phiên bản PHP. So với mốc vá: 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 theo đúng nhánh bạn đang chạy. Ví dụ máy kiểm tra trên chạy PHP 8.3.6, tức là thấp hơn 8.3.36 — phần PHP chưa đạt.- Lệnh
lsmodkiểm tra xem các module liên quan (esp, rxrpc, xfrm) có đang load không. Không có module nào đang load không có nghĩa là bạn đã an toàn — nó chỉ cho biết bề mặt tấn công qua các module đó hiện không mở trên máy này. - Cuối cùng, đối chiếu phiên bản kernel của bạn với thông báo bảo mật của distro (Ubuntu: USN, Debian: DSA, RHEL: RHSA) thay vì chỉ so với bảng upstream ở mục 3.
5. Vá và khắc phục từng bước
Bước 1: Cập nhật kernel và reboot (bắt buộc)
Trên Ubuntu/Debian:
sudo apt update
sudo apt install linux-image-generic linux-headers-generic
sudo reboot
Sau khi máy khởi động lại, chạy uname -r một lần nữa để xác nhận kernel mới đang chạy. Nhiều người vá xong quên reboot — và kernel cũ vẫn đang chạy, tức là vẫn hở. Đây là lỗi phổ biến nhất trong các vụ việc kiểu này.
Bước 2: Vá PHP cùng lúc
Nâng PHP lên bản đã vá của đúng nhánh bạn đang dùng: 8.2.35, 8.3.36, 8.4.27 hoặc 8.5.12. Nếu bạn đang ở nhánh đã hết hỗ trợ (8.1 trở xuống, như PHP 8.0.30 trong vụ firewall), hãy nâng nhánh hoặc lấy bản vá từ nhà cung cấp distro — đừng ở lại nhánh hết hỗ trợ với hy vọng "chưa ai nhắm tới mình".
Bước 3: Nếu chưa reboot được ngay — biện pháp tạm thời
Theo hướng dẫn tạm thời của Ubuntu, nếu máy không dùng IPsec, bạn có thể chặn các module esp4, esp6 và rxrpc không cho load, để thu hẹp bề mặt tấn công trong lúc chờ lịch reboot. Đây chỉ là biện pháp tạm thời — gỡ chặn sau khi đã cập nhật kernel, và đừng dùng nó thay cho bản vá.
Bước 4: Gỡ giao diện quản trị khỏi internet
Mọi thiết bị trong chiến dịch này đều bị phát hiện vì giao diện quản trị lộ ra internet. Hãy đưa trang quản trị firewall, VPN, panel máy chủ về sau VPN hoặc giới hạn IP truy cập. Đây là bước rẻ nhất mà hiệu quả nhất trong cả bài.
Bước 5: Rà soát dấu hiệu đã bị xâm nhập
Nếu máy của bạn từng lộ ra internet mà chưa vá trong tuần qua, đừng chỉ vá rồi thôi. Hãy kiểm tra: file PHP lạ trong thư mục web, SSH key mới xuất hiện, phiên SSH đi ra bất thường (đặc biệt là kênh SSH ngược), tiến trình lạ chạy với quyền root. Nếu máy có liên quan tới LDAP/Active Directory, hãy xoay mật khẩu tài khoản dịch vụ sau khi đã dọn sạch — xoay trước khi dọn có thể khiến kẻ tấn công nhận được mật khẩu mới qua webshell còn sót lại.
6. FAQ nhanh
Fragnesia có tấn công được từ xa không?
Không, nếu đứng một mình. Nó là lỗi leo thang đặc quyền cục bộ — cần có sẵn khả năng chạy code trên máy. Nguy hiểm của nó nằm ở việc nối chuỗi với một lỗ hổng xâm nhập ban đầu như PHP2Shell.
Điểm CVSS 7.8 có nghĩa là "không quá nghiêm trọng"?
Không nên đọc điểm số một cách tách rời. 7.8 là mức High cho riêng lỗi kernel, nhưng khi kết hợp với PHP2Shell (9.2, RCE không cần xác thực), chuỗi tấn công hoàn chỉnh cho ra quyền root từ xa. CISA đưa vào KEV với hạn chỉ 3 ngày chính là tín hiệu về mức độ khẩn của chuỗi này, không phải của riêng con số 7.8.
Chỉ vá PHP thôi đã đủ chưa?
Chưa. Vá PHP đóng cửa xâm nhập đã biết, nhưng máy vẫn còn lỗi leo thang — bất kỳ đường xâm nhập nào khác (tài khoản lộ, ứng dụng khác bị chiếm) cũng có thể dùng Fragnesia để lên root. Vá cả hai đầu mới phá vỡ chuỗi.
Hạn 31/10 có áp dụng cho mình không?
Hạn 31/10 là hạn bắt buộc cho các cơ quan dân sự liên bang Mỹ theo chỉ thị BOD 26-04. Với người dùng và doanh nghiệp ngoài phạm vi đó, đây không phải hạn pháp lý — nhưng là mốc tham chiếu rất tốt: nếu cơ quan liên bang phải vá trong 3 ngày, bạn cũng không nên để sang tuần sau.
Container có bị ảnh hưởng không?
Có. Container dùng chung kernel với host, nên kernel host chưa vá thì container cũng chịu rủi ro leo thang hoặc thoát container. Vá kernel host và reboot host mới giải quyết được, vá riêng bên trong container thì không.
7. Kết luận
Câu chuyện Fragnesia là một bài học quen thuộc nhưng lần nào cũng đắt giá: lỗ hổng đã có bản vá từ tháng 5, mã khai thác công khai từ tháng 5, vậy mà đến tháng 10 nó vẫn root được 25 firewall — vì chuỗi tấn công chỉ cần một mắt xích chưa vá. PHP2Shell mở cửa, Fragnesia nâng quyền, và giao diện quản trị lộ ra internet giúp kẻ tấn công tìm thấy mục tiêu.
Việc cần làm hôm nay rất cụ thể: kiểm tra kernel và PHP bằng 3 lệnh ở mục 4, cập nhật cả hai, reboot và kiểm tra lại bằng uname -r, rồi gỡ giao diện quản trị khỏi internet. Toàn bộ việc này tốn chưa tới một buổi chiều — rẻ hơn rất nhiều so với việc dọn một máy chủ đã bị root.
Nguồn tham khảo
- CISA — CISA Adds Two Known Exploited Vulnerabilities to Catalog (28/10/2026)
- Ubuntu Security Notice USN-8373-1 — Linux kernel vulnerabilities (gồm CVE-2026-46300)
- SecurityWeek — China-Linked Hackers Exploit PHP2Shell to Root Firewalls
- The Hacker News — PHP2Shell Attack Roots 25 Servers, Breaches U.S. Government-Affiliated Network
- BleepingComputer — CISA confirms PHP2Shell vulnerabilities now exploited in attacks
- SecurityOnline — Linux Kernel Vulnerability, VMware ESX Flaw Added to KEV