Chỉ Một Dòng Markdown Khiến Server Tan Nát: Lỗ Hổng CVE-2025-65108 Đang Ẩn Giấu Điều Gì?
Một lỗ hổng nghiêm trọng đã được tìm thấy khi bạn thực hiện chuyển đổi Markdown sang PDF, kẻ tấn công có thể chiếm quyền điều khiển một cách dễ dàng.

Mô tả về CVE-2025-65108
Với những ai chưa biết thì Markdown là một ngôn ngữ đánh dấu (markup language) đơn giản, dùng để định dạng văn bản bằng các ký tự dễ nhớ và dễ gõ. Nó được thiết kế để:
Dễ đọc ở dạng thô (plain text).
Dễ viết.
Dễ chuyển đổi sang HTML, PDF và các định dạng khác.
Để hiểu rõ hơn thì mình sẽ cho các bạn thấy một số ký tự đặc biệt dễ dùng trong Markdown như:
| Bạn gõ | Markdown sẽ hiển thị như |
# Tiêu đề | Tiêu đề lớn |
**đậm** | đậm |
*nghiêng* | nghiêng |
- danh sách | • danh sách |
code | code |
Chính vì tiện lợi như vậy cũng như được các lập trình viên, người viết tài liệu hay các Blogger sử dụng nên nó cũng tiềm tàn các lỗ hổng mà kẻ tấn công muốn khai thác. Tháng 11 năm 2025 vừa qua, các chuyên gia An ninh mạng đã ghi nhận một lỗ hổng mới mang định danh CVE-2025-65108, được đánh giá CVSS 10.0 – mức nguy hiểm tuyệt đối, đã phơi bày sự thật rằng: chỉ một đoạn front-matter trong Markdown cũng đủ mở ra cánh cửa cho Remote Code Execution.

Lỗ hổng này không chỉ đơn thuần là lỗi phần mềm mà nó cho thấy ranh giới mong manh giữa “định dạng văn bản” và “thực thi mã độc”. Và nếu bạn đang dùng các công cụ chuyển Markdown sang PDF trong hệ thống của mình, thì đây có thể là quả bom hẹn giờ đang âm thầm đếm ngược…
Phạm vi ảnh hưởng
Bất kỳ môi trường nào chuyển đổi Markdown sang PDF bằng thư viện md-to-pdf (tất cả phiên bản trước 5.2.5) đều có nguy cơ bị khai thác.
Phạm vi ảnh hưởng của CVE-2025-65108 không chỉ giới hạn trong các ứng dụng web, mà lan rộng tới toàn bộ hệ sinh thái gồm:
Dev tools,
Automation pipelines,
Dịch vụ cloud,
Hạ tầng nội bộ.
Ở bất kỳ vị trí nào Markdown không được tin tưởng và được chuyển sang PDF, lỗ hổng này có thể trở thành một vector RCE nguy hiểm.
Đánh giá mức độ nghiêm trọng
CVE-2025-65108 được đánh giá mức độ nghiêm trọng là : CRITICAL với số điểm như sau:
NIST: NVD Base Score: N/A - NVD assessment not yet provided.
CNA: Patchstack Base Score: 10.0 - CRITICAL Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Phân tích và khai thác lỗ hổng
Đầu tiên như đã đề cập thì kẻ tấn công sẽ chuẩn bị một Payload thực thi và nó chỉ có thể xảy ra khi thỏa mãn một trong các điều kiện sau đây:
Có plugin/extension trong pipeline của md-to-pdf được bật, và plugin đó chủ động thực thi các code-block JavaScript trong Node context (ví dụ plugin kiểu
remark-exec/rehype-runhoặc một plugin tùy chỉnh gọieval,vm.runInThisContext,new Function, hoặcrequiretrên nội dung code-block).md-to-pdf (hoặc một dependency) chứa lỗ hổng cho phép chèn/thi hành mã Node từ nội dung markdown (ví dụ: dùng template engine với interpolation không an toàn như
_.templatehayhandlebarsmà không sanitize).Người dùng chạy md-to-pdf với các cấu hình tùy chỉnh cho phép chạy hooks hoặc scripts lấy từ nội dung Markdown.

Sau khi đã chuẩn bị một Payload như trên, kẻ tấn công sẽ đưa file này vào hệ thống bằng một số cách: upload, commit PR, gửi email hoặc truyền vào API. Tại đây khi mà người dùng thực hiện kích hoạt md-to-pdf để chuyển file thì khi parser đọc front-matter và evaluat.
Như các bạn thấy ---javascript và ---RCE ở đây không phải front-matter hợp chuẩn (front-matter thường là ---\nkey: value\n---) và nó đang bị lạm dụng để thực thi hành vi khai thác. Hàm ((require("child_process")).execSync("calc.exe")) sẽ được gọi - đây là lệnh JavaScript chạy trong môi trường Node.js:
require("child_process")lấy module child_process..execSync("calc.exe")chạy lệnh hệ thốngcalc.exeđồng bộ - trên Windows sẽ mở máy tính (Calculator). Trên Linux/Mac lệnh này sẽ báo lỗi nếu không tồn tạicalc.exe.
Mục tiêu của payload: nếu mã JS này được thực thi trong context Node.js (không phải trong trình duyệt), thì sẽ gọi hệ thống con và thực thi lệnh - tức là RCE (remote code execution) cục bộ. Một điểm nguy hiểm ở đây là nếu server chạy với quyền cao (root/Administrator) thì hậu quả nghiêm trọng hơn (toàn quyền hệ thống).
Khi một kẻ tấn công đã thực thi mã trên hệ thống (ví dụ RCE thông qua payload như bạn phân tích trước đó), thì các bước hậu xâm nhập thường nhằm:
Duy trì quyền truy cập
Leo thang đặc quyền
Ẩn mình
Thu thập thông tin / dữ liệu
Mở rộng phạm vi
Chuẩn bị phá hoại hoặc triển khai ransomware
Khuyến nghị
Cập nhật lên md-to-pdf phiên bản ≥ 5.2.5
Kiểm tra phiên bản md-to-pdf hiện tại:
npm list md-to-pdfyarn list md-to-pdf
Cập nhật bằng npm
npm install md-to-pdf@^5.2.5npm install md-to-pdf@latest
Cập nhật bằng Yarn
yarn add md-to-pdf@^5.2.5
Cập nhật trong package.json
"md-to-pdf": "5.0.x"=>"md-to-pdf": "^5.2.5"npm install
Cập nhật md-to-pdf trong Docker hoặc container
RUN npm install md-to-pdfdocker build -t app:patched
Ngăn mọi xử lý Markdown không đáng tin
Tạm thời dừng các dịch vụ tự động chuyển Markdown sang PDF nếu đầu vào đến từ người dùng bên ngoài.
Chỉ xử lý tài liệu từ nguồn tin cậy trong thời gian chờ cập nhật.
Chỉ sử dụng nguồn Markdown đáng tin cậy
Không tải hoặc mở file Markdown (.md) từ nguồn không rõ ràng.
Không copy/paste nội dung Markdown lạ vào các hệ thống chuyển đổi PDF.
Tránh dùng template Markdown được chia sẻ qua Internet nếu không kiểm chứng nguồn.
Kiểm tra front-matter trước khi mở hoặc upload Markdown
Nếu bạn thấy những đoạn giống như:


hoặc nội dung có từ khóa bất thường như:
child_processexecSyncrequire(process.mainModule
Dừng xử lý ngay, vì đây có thể là payload được thiết kế để khai thác lỗ hổng RCE.
Không chia sẻ hoặc tải lên Markdown nhạy cảm lên dịch vụ trực tuyến không đáng tin
Không đưa file Markdown chứa thông tin nội bộ lên dịch vụ miễn phí không kiểm tra được độ an toàn.
Sử dụng nền tảng chính thức của tổ chức để tạo PDF.
Tổng kết
Lỗ hổng CVE-2025-65108 cho thấy một sự thật khó lường: ngay cả những công cụ tưởng chừng vô hại như trình chuyển đổi Markdown sang PDF cũng có thể trở thành điểm khởi đầu cho một cuộc tấn công toàn diện. Việc chèn JavaScript thông qua front-matter và thực thi mã bên trong md-to-pdf đã biến một thao tác xử lý tài liệu đơn giản thành điểm RCE nghiêm trọng, được đánh giá CVSS 10.0 – mức cao nhất có thể.
Mức độ ảnh hưởng lan rộng, từ ứng dụng web đến CI/CD pipelines, từ dịch vụ cloud đến hệ thống nội bộ. Điều này đặt ra yêu cầu cấp thiết về việc cập nhật phiên bản, rà soát toàn bộ quy trình xử lý Markdown và áp dụng biện pháp cách ly an toàn cho các tác vụ chuyển đổi tài liệu.
CVE-2025-65108 không chỉ là một lỗ hổng, nó là lời nhắc nhở rằng ranh giới giữa “dữ liệu” và “mã thực thi” luôn mong manh. Chỉ cần một cấu hình sai hoặc một tính năng bị bỏ quên là đủ để kẻ tấn công biến tài liệu Markdown thành vũ khí. Việc hành động sớm là yếu tố quyết định để hạn chế rủi ro và bảo vệ hệ thống khỏi những hậu quả khó lường.






