# 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 |
| `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*.

![md-to-pdf RCE, Markdown Command Injection](https://securityonline.info/wp-content/uploads/2025/11/markdown-to-pdf-scaled.png align="center")

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.
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1764123235997/1f7ac34f-69bc-4d61-aafc-ce9264548566.png align="center")

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ố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"` =&gt; `"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ư:
        
        ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1763975448483/8e366a7c-e628-4e52-9426-43e7ff5a2071.png align="center")
        
        ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1763975455177/ddf1a41f-5cf0-411f-a8aa-6ca87f26f1a2.png align="center")
        
        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](https://securityonline.info/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](https://nvd.nist.gov/vuln/detail/CVE-2025-65108)
    
3. [md-to-pdf vulnerable to arbitrary JavaScript code execution when parsing front matter · CVE-2025-65108 · GitHub Advisory Database · GitHub](https://github.com/advisories/GHSA-547r-qmjm-8hvw?utm_source=chatgpt.com)
