CVE-2026-5426 — KnowledgeDeliver bị khai thác zero-day qua ViewState Deserialization

Tóm tắt
CVE-2026-5426 cho phép kẻ tấn công chưa xác thực thực thi mã từ xa (RCE) ở mức hệ điều hành trên bất kỳ instance KnowledgeDeliver nào lộ ra Internet — chỉ bằng một HTTP request. Gốc rễ không phải lỗi code, mà là một sai lầm cấu hình nguy hiểm: các bản cài đặt trước 24/02/2026 dùng chung một machineKey ASP.NET cố định do nhà cung cấp đóng gói sẵn trong web.config. Ai có khoá này (lấy từ bất kỳ bản cài nào) đều có thể tạo ViewState độc hại tấn công mọi bản cài khác.
Lỗ hổng đã bị khai thác như một zero-day từ cuối 2025. Trong ca điều tra của Mandiant, kẻ tấn công không dừng ở RCE: chúng cài web shell in-memory BLUEBEAM (Godzilla) chạy trong tiến trình IIS, sửa file JavaScript của ứng dụng để lừa người dùng cài "plugin xác thực bảo mật" giả, rồi phát tán Cobalt Strike BEACON xuống máy trạm của khách truy cập.
Đối tượng ảnh hưởng: các tổ chức (đặc biệt tại Nhật) dùng KnowledgeDeliver làm hệ thống e-learning/LMS, nhất là bản cài cũ và mở ra Internet. Một hành động ưu tiên: xoay (rotate) ngay machineKey thành giá trị duy nhất, mạnh về mật mã cho từng instance — đây là cách duy nhất vô hiệu hoá bí mật dùng chung đã bị lộ.
Bối cảnh kỹ thuật
| CVE | CVE-2026-5426 |
| Sản phẩm | KnowledgeDeliver — LMS của Digital Knowledge (phổ biến tại Nhật) |
| CWE | CWE-502 (Deserialization of Untrusted Data), CWE-798 (Use of Hard-coded Credentials) |
| CVSS 3.1 (Mandiant) | AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H (tương ứng base score 9.0 — Critical) |
| Điều kiện | Bản cài trước 24/02/2026 chưa đổi machineKey mặc định; ứng dụng truy cập được từ Internet |
| Khai thác | Unauthenticated RCE; đã bị khai thác zero-day từ cuối 2025 |
| Phát hiện bởi | Takahiro Sugiyama, Peter Revelant (Mandiant) |
KnowledgeDeliver là một Learning Management System (LMS). Vấn đề nằm ở chỗ các bản cài trước 24/02/2026 dùng một web.config chuẩn do nhà cung cấp phát hành, trong đó chứa cặp khoá machineKey cứng (hardcoded):
<machineKey decryptionKey="<REDACTED>" validationKey="<REDACTED>" />
Trong ASP.NET, machineKey được dùng để mã hoá và ký dữ liệu, bao gồm ViewState. Vì cặp khoá này giống hệt nhau giữa các môi trường khách hàng độc lập, một kẻ tấn công lấy được khoá từ một bản cài có thể tấn công mọi bản KnowledgeDeliver khác lộ ra Internet. Đây là kết hợp kinh điển của CWE-798 (bí mật cứng/dùng chung) và CWE-502 (deserialize dữ liệu không tin cậy).
Cơ chế khai thác
ViewState là cơ chế ASP.NET dùng để lưu trạng thái trang qua các lần postback. Khi đã biết machineKey, kẻ tấn công có thể tạo một payload ViewState độc hại được ký hợp lệ, gửi qua tham số __VIEWSTATE trong HTTP request, khiến server deserialize và thực thi mã ở mức hệ điều hành.
flowchart TD
A["Kẻ tấn công lấy machineKey<br/>(từ web.config dùng chung)"] --> B["Tạo ViewState độc hại<br/>ký bằng machineKey hợp lệ"]
B --> C["Gửi qua tham số __VIEWSTATE<br/>trong HTTP request"]
C --> D["Server ASP.NET deserialize<br/>(CWE-502) → RCE mức OS"]
D --> E["Thực thi trong tiến trình IIS<br/>w3wp.exe"]
E --> F["Triển khai post-exploitation"]
Kỹ thuật này đi theo đúng pattern đã được Mandiant ghi nhận ở lỗ hổng ViewState deserialization của Sitecore trước đây, và báo cáo của Microsoft (02/2025) về việc kẻ tấn công lạm dụng các ASP.NET machine key bị công bố/lộ công khai để thực hiện code injection qua ViewState và triển khai khung post-exploitation Godzilla. Điểm mấu chốt giống nhau: machine key phải duy nhất và bí mật — một khoá bị lộ có thể hạ gục cả một hệ sinh thái bản cài.
Hoạt động sau khai thác (Post-Exploitation)
flowchart LR
A["RCE qua ViewState"] --> B["BLUEBEAM / Godzilla<br/>web shell in-memory trong w3wp.exe"]
B --> C["icacls cấp 'Everyone' full access<br/>vào thư mục web app"]
C --> D["Sửa file .js của ứng dụng"]
D --> E["Hiện cảnh báo bảo mật giả<br/>'cài plugin xác thực'"]
D --> F["Âm thầm load script độc<br/>từ domain của attacker"]
F --> G["Người dùng tải installer giả"]
G --> H["Máy trạm nhiễm<br/>Cobalt Strike BEACON"]
Web shell BLUEBEAM (Godzilla). Kẻ tấn công triển khai một web shell .NET chạy hoàn toàn trong bộ nhớ bên trong tiến trình IIS worker (w3wp.exe), khiến việc quét file truyền thống khó phát hiện. Nó nhận lệnh và payload qua dữ liệu mã hoá trong HTTP POST body. Việc dùng BLUEBEAM nhất quán với báo cáo của Microsoft về các chiến dịch lạm dụng machine key.
Can thiệp file system.
- Sửa quyền: dùng
icaclscấp cho "Everyone" toàn quyền vào thư mục ứng dụng web. - Tamper JavaScript: chèn code vào một file JS của ứng dụng để (1) hiển thị cảnh báo bảo mật giả, dụ người dùng cài "plugin xác thực bảo mật", và (2) âm thầm tải một script độc từ domain do attacker kiểm soát. Lây nhiễm Cobalt Strike. Script từ xa dụ người dùng tải một installer giả, dẫn tới máy trạm bị nhiễm Cobalt Strike BEACON. Đáng chú ý, payload được mã hoá bằng một khoá đặt theo tên tổ chức nạn nhân — dấu hiệu cho thấy kẻ tấn công chuẩn bị payload nhắm riêng vào tổ chức mục tiêu.
Ghi nhận khai thác & Timeline
Lỗ hổng bị khai thác như zero-day trước khi có bản vá quy trình. Mandiant phát hiện trong một ca điều tra (IR) cuối 2025 trên một web server KnowledgeDeliver bị xâm nhập.
| Thời điểm | Sự kiện |
|---|---|
| Cuối 2025 | Mandiant điều tra server KnowledgeDeliver bị xâm nhập (khai thác zero-day) |
| 2026-01-19 | Mandiant báo cáo vấn đề cho Digital Knowledge |
| 2026-02-24 | Digital Knowledge cập nhật quy trình triển khai (khoá không còn dùng chung) |
| 2026-03-18 | Trao đổi về việc công bố |
| 2026-04-16 | Mandiant công bố advisory MNDT-2026-0009 |
| 2026-05-25 | GTIG/Mandiant đăng bài phân tích chi tiết |
MITRE ATT&CK Mapping
| Tactic | Technique | ID | Áp dụng |
|---|---|---|---|
| Initial Access | Exploit Public-Facing Application | T1190 | ViewState deserialization trên LMS lộ Internet |
| Execution | Command and Scripting Interpreter: Windows Command Shell | T1059.003 | cmd.exe /c ... từ w3wp.exe |
| Execution | Command and Scripting Interpreter: PowerShell | T1059.001 | powershell.exe từ w3wp.exe |
| Persistence | Server Software Component: Web Shell | T1505.003 | BLUEBEAM/Godzilla trong IIS |
| Defense Evasion | Reflective Code Loading | T1620 | Web shell in-memory trong w3wp.exe |
| Defense Evasion | File and Directory Permissions Modification | T1222.001 | icacls cấp "Everyone" full access |
| Discovery | System Owner/User Discovery | T1033 | whoami |
| Initial Access (nạn nhân cuối) | Drive-by Compromise | T1189 | JS tamper → cảnh báo/installer giả |
| Execution (nạn nhân cuối) | User Execution: Malicious File | T1204.002 | Người dùng tải & chạy installer giả |
| Command and Control | Application Layer Protocol: Web Protocols | T1071.001 | Godzilla qua HTTP POST; BEACON |
| Command and Control | Ingress Tool Transfer | T1105 | Tải script/installer độc |
Phát hiện (Detection)
1) Application Event Log — Event ID 1316 (ViewState)
Theo dõi Windows Application log, Event ID 1316 từ source ASP.NET 4.0.30319.0 (hoặc tương tự):
# Thất bại (sai khoá) — có thể là nỗ lực tấn công với khoá không đúng:
Event code: 4009 -++- Viewstate verification failed.
Reason: The viewstate supplied failed integrity check.
# "Thành công" (vượt qua integrity) — đã thử deserialize payload, có thể đã thực thi:
Event code: 4009 -++- Viewstate verification failed.
Reason: Viewstate was invalid.
Mandiant đã giải mã các chuỗi payload ghi trong event log bằng machine key của server và khôi phục được payload liên quan tới web shell BLUEBEAM.
2) Tiến trình con bất thường của w3wp.exe
w3wp.exe → cmd.exe /c ...
w3wp.exe → whoami
w3wp.exe → powershell.exe
w3wp.exe → icacls ...
3) File Integrity Monitoring
Giám sát thay đổi trái phép với file .js, .aspx, .config trong web root — đặc biệt là việc chèn loader script từ xa hoặc logic lạ vào các thư viện JS dùng chung.
4) User-Agent bất thường
Chuỗi User-Agent gồm hai định danh UA nối liền nhau (đặc trưng đã ghi nhận ở lỗ hổng ViewState deserialization trước đó). Ví dụ:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.13) Gecko/20101213 Opera/9.80 (Windows NT 6.1; U; zh-tw) Presto/2.7.62 Version/11.01 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0) chromeframe/10.0.648.205 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Google SecOps (Chronicle UDM) — nguồn: GTIG
(metadata.log_type = "WINEVTLOG" or metadata.log_type = "WINEVTLOG_XML")
metadata.product_event_type = "1316"
additional.fields["Message"] = /Event code: 4009\b/ nocase
(metadata.event_type = "PROCESS_LAUNCH" or metadata.event_type = "PROCESS_OPEN") AND
principal.process.command_line = /w3wp.exe/ nocase AND
target.process.command_line = /cmd.+ \/c |whoami|powershell/ nocase
KQL — Microsoft Sentinel / Defender XDR (nguyên bản)
w3wp.exe sinh tiến trình recon/shell
DeviceProcessEvents
| where InitiatingProcessFileName =~ "w3wp.exe"
| where FileName in~ ("cmd.exe","powershell.exe","whoami.exe","icacls.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, FileName, ProcessCommandLine, AccountName
| sort by Timestamp desc
Thay đổi file web-root nhạy cảm
DeviceFileEvents
| where FolderPath has_any (@"\inetpub\", @"\KnowledgeDeliver\")
| where FileName endswith ".js" or FileName endswith ".aspx" or FileName endswith ".config"
| where ActionType in ("FileModified","FileCreated")
| where InitiatingProcessFileName in~ ("w3wp.exe","cmd.exe","powershell.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, FolderPath, FileName, ActionType
IOC
# BLUEBEAM (Godzilla) web shell
file.name : LoadLibrary.dll
SHA-256 : 7c1f99dca8e5a7897892f9d224a6495023a2cfd2671697d229d355978c415ed2
Lưu ý: không có domain C2 công khai trong nguồn (domain phát tán bị redact). Trọng tâm phát hiện là hành vi
w3wp.exe, event 1316/4009, và tamper file web-root.
Nhận định chuyên gia
Mức độ thực tế vượt con số CVSS. Vector AC:H (do cần có machine key trước) khiến điểm số "dịu" hơn cảm nhận, nhưng trong thực tế khoá lại được đóng gói sẵn và dùng chung trong web.config — nghĩa là rào cản "complexity" gần như không tồn tại với kẻ tấn công đã có một bản cài để trích khoá. Đây là lý do lỗ hổng bị khai thác zero-day thành công: nó biến mọi instance KnowledgeDeliver cũ thành cùng một ổ khoá, cùng một chìa.
Bài học cốt lõi không mới nhưng cứ lặp lại: bí mật dùng chung trong template triển khai là một quả bom hẹn giờ. Chuỗi Sitecore (Mandiant) và cảnh báo machine key của Microsoft 02/2025 đã chỉ ra cùng một mô hình — ViewState + machineKey lộ = RCE hàng loạt. KnowledgeDeliver chỉ là nạn nhân mới nhất của một anti-pattern cũ.
Liên hệ với Việt Nam. KnowledgeDeliver phổ biến ở Nhật, nhưng nhiều doanh nghiệp VN — đặc biệt khối có vốn/đối tác Nhật, các trung tâm đào tạo, và tổ chức dùng LMS .NET — nằm trong cùng vùng rủi ro. Quan trọng hơn, anti-pattern machine key dùng chung không giới hạn ở một sản phẩm: bất kỳ ứng dụng ASP.NET nào copy machineKey từ tài liệu/blog/StackOverflow đều có thể dính. Với SOC tại VN, đây là dịp rà soát toàn bộ tài sản ASP.NET nội bộ, không chỉ riêng KnowledgeDeliver. Thêm vào đó, kỹ thuật tamper JS để phát tán "plugin bảo mật" giả rất hợp với watering-hole nhắm người dùng cuối — cần cảnh báo cả đội vận hành web lẫn người dùng.
Khuyến nghị
Ngay lập tức (0–24h)
- Rotate
machineKey: sinh cặp khoá duy nhất, mạnh về mật mã cho từng instance KnowledgeDeliver — cách duy nhất vô hiệu hoá bí mật dùng chung đã lộ. - Săn event log: Event ID 1316 / code 4009 trên web server; tiến trình con của
w3wp.exe(cmd,powershell,whoami,icacls). - Kiểm tra toàn vẹn file web-root (
.js/.aspx/.config); tìm script loader từ xa hoặc logic lạ. Ngắn hạn (1–7 ngày) - Hạn chế truy cập: giới hạn LMS cho dải IP nội bộ/đã biết; cân nhắc đặt sau VPN/WAF.
- Triển khai SecOps/KQL ở trên vào SIEM; thêm rule phát hiện ViewState exploitation + web-root tampering.
- Quét IOC (hash BLUEBEAM) trên file server & endpoint; điều tra kỹ nếu có dấu hiệu khai thác. Dài hạn
- Rà soát toàn bộ tài sản ASP.NET: cấm copy
machineKeytừ nguồn công khai; ưu tiênautogeneratehoặc khoá quản lý qua key vault. - Giám sát hành vi tiến trình web (process lineage từ
w3wp.exe) thay vì chỉ dựa vào signature file — web shell in-memory không để lại file. - Đưa kiểm tra "shared secret trong template triển khai" vào quy trình hardening & secure deployment.
Tài liệu tham khảo
- MNDT-2026-0009 — Mandiant Vulnerability Disclosure (CVE-2026-5426)
- Exploitation of KnowledgeDeliver via ViewState Deserialization Vulnerability — Google Cloud / GTIG & Mandiant (25/05/2026)
- KnowledgeDeliver flaw exploited as a zero-day to install web shells — BleepingComputer
- Code injection attacks using publicly disclosed ASP.NET machine keys — Microsoft Security Blog (06/02/2025)
- CVE-2026-5426 — CVE.org · KnowledgeDeliver — Digital Knowledge





