Skip to main content

Command Palette

Search for a command to run...

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.

Updated
7 min read
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ả 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
codecode

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.

md-to-pdf RCE, Markdown Command Injection

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-run hoặc một plugin tùy chỉnh gọi eval, vm.runInThisContext, new Function, hoặc require trê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ư _.template hay handlebars mà 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---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ống calc.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ại calc.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ị

  1. 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-pdf

      • yarn list md-to-pdf

    • Cập nhật bằng npm

      • npm install md-to-pdf@^5.2.5

      • npm 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-pdf

      • docker build -t app:patched

  2. 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.

  3. 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.

  4. 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_process

      • execSync

      • require(

      • process.mainModule

    • Dừng xử lý ngay, vì đây có thể là payload được thiết kế để khai thác lỗ hổng RCE.

  5. 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.

Tham khảo

  1. Critical Markdown to PDF Flaw (CVE-2025-65108, CVSS 10.0) Allows RCE via JS Injection in Markdown Front-Matter

  2. NVD - CVE-2025-65108

  3. md-to-pdf vulnerable to arbitrary JavaScript code execution when parsing front matter · CVE-2025-65108 · GitHub Advisory Database · GitHub

More from this blog

F

FPT IS Security

761 posts

Dedicated to providing insightful articles on cybersecurity threat intelligence, aimed at empowering individuals and organizations to navigate the digital landscape safely.

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ì?