Khẩn cấp: Lỗ hổng jsPDF nghiêm trọng, lộ CVE-2026-25755

Một lỗ hổng bảo mật mới được công bố trong thư viện jsPDF phổ biến đã khiến hàng triệu nhà phát triển web đối mặt với các cuộc tấn công PDF Object Injection. Lỗ hổng lỗ hổng CVE này cho phép kẻ tấn công từ xa nhúng các đối tượng và hành động tùy ý vào các tài liệu PDF được tạo, đặt ra một rủi ro bảo mật đáng kể cho các ứng dụng web.
Giới Thiệu Lỗ Hổng jsPDF Object Injection: CVE-2026-25755
Lỗ hổng này được định danh là CVE-2026-25755, ảnh hưởng đến phương thức addJS được sử dụng để nhúng mã JavaScript vào các tệp PDF. Vấn đề phát sinh từ việc thiếu vệ sinh đầu vào người dùng trong tệp javascript.js của thư viện jsPDF.
Cụ thể, dòng mã có vấn đề trực tiếp nối đầu vào không được vệ sinh vào luồng PDF. Điều này tạo điều kiện cho kẻ tấn công thao túng cấu trúc tài liệu PDF một cách trái phép.
Thư viện jsPDF là một công cụ mạnh mẽ để tạo tài liệu PDF phía máy khách (client-side), được sử dụng rộng rãi trong các ứng dụng web để tạo báo cáo, hóa đơn, và các tài liệu khác một cách động. Sự phổ biến này đồng nghĩa với việc phạm vi ảnh hưởng của lỗ hổng jsPDF này là rất lớn.
Cơ Chế Khai Thác Kỹ Thuật CVE-2026-25755
Chi Tiết Lỗi addJS và Input Sanitization
Lỗ hổng nằm ở cách phương thức addJS xử lý dữ liệu đầu vào. Phương thức này được thiết kế để thêm mã JavaScript vào một tài liệu PDF. Tuy nhiên, việc thực hiện thiếu sót trong quá trình vệ sinh dữ liệu đã mở ra cánh cửa cho các cuộc tấn công.
Dòng mã có vấn đề trong tệp javascript.js thực hiện việc nối chuỗi đầu vào trực tiếp vào luồng PDF sử dụng cú pháp:
/JS (%s)
Logic này không thoát ký tự đóng ngoặc đơn ), vốn đóng vai trò là ký tự phân cách chuỗi trong đặc tả PDF. Điều này cho phép kẻ tấn công chèn các chuỗi tùy ý để phá vỡ cấu trúc mong đợi của tài liệu PDF.
Kỹ Thuật PDF Object Injection
Bằng cách chèn một payload như ) >> /Action …, kẻ tấn công có thể kết thúc sớm chuỗi /JS và chèn các cấu trúc PDF tùy ý. Điều này giúp họ kiểm soát hoàn toàn các đối tượng được nhúng trong tài liệu.
Không giống như các cuộc tấn công XSS (Cross-Site Scripting) dựa trên JavaScript điển hình, lỗ hổng jsPDF này thao túng trực tiếp các hệ thống phân cấp đối tượng PDF. Điều này cho phép những kẻ tấn công thực thi các hành động hoặc sửa đổi cấu trúc tài liệu ngay cả khi JavaScript bị vô hiệu hóa trong trình xem PDF.
Kỹ thuật PDF Object Injection này khai thác cách các trình phân tích cú pháp PDF hiểu và xử lý các đối tượng trong tài liệu. Khi một đối tượng được tiêm vào, nó được xử lý như một phần hợp lệ của cấu trúc PDF, mở ra nhiều khả năng tấn công.
Tác Động Nghiêm Trọng của Cuộc Tấn Công
Khả năng chèn các đối tượng PDF tùy ý mang lại cho kẻ tấn công quyền kiểm soát đáng kể đối với tài liệu và các hành vi của nó. Điều này tạo ra nhiều kịch bản tấn công nghiêm trọng.
Thực Thi Hành Động Không Cần JavaScript
Các hành động PDF được chèn (ví dụ: /OpenAction) có thể tự động kích hoạt, bỏ qua các hạn chế về JavaScript. Điều này có nghĩa là ngay cả khi người dùng đã tắt JavaScript trong trình xem PDF của họ, các hành động độc hại vẫn có thể được thực thi khi tài liệu được mở.
Ví dụ, kẻ tấn công có thể chèn một lệnh /OpenAction để chuyển hướng người dùng đến một URL độc hại hoặc thực hiện các hành động khác mà không cần tương tác.
Thao Túng Tài Liệu Toàn Diện
Kẻ tấn công có thể chèn, mã hóa hoặc sửa đổi các phần /Annots hoặc /Signatures để thay đổi siêu dữ liệu, thực hiện lừa đảo (phishing), hoặc thay đổi giao diện của PDF. Điều này có thể dẫn đến việc giả mạo tài liệu, làm sai lệch thông tin hoặc tạo ra các tài liệu lừa đảo tinh vi.
Khả năng thao túng các chữ ký số hoặc chú thích có thể làm suy yếu tính toàn vẹn và xác thực của tài liệu, gây ra những hậu quả nghiêm trọng trong môi trường doanh nghiệp và pháp lý.
Rủi Ro Cross-Viewer
Các trình xem PDF nhẹ, đặc biệt là trên thiết bị di động hoặc các trình xem nhúng, có thể thực thi các hành động được chèn do tuân thủ nghiêm ngặt các quy tắc phân tích cú pháp đối tượng PDF. Điều này mở rộng phạm vi tấn công và khiến nhiều người dùng hơn có nguy cơ bị ảnh hưởng bởi lỗ hổng jsPDF.
Một số trình xem PDF có thể bỏ qua các cảnh báo bảo mật hoặc thực thi các lệnh một cách mặc định, tạo ra một điểm yếu tiềm tàng mà kẻ tấn công có thể khai thác. Đây là một khía cạnh quan trọng của rủi ro bảo mật này.
Minh Họa Tấn Công (Proof-of-Concept)
Nhà nghiên cứu bảo mật ZeroXJacks đã phát hiện ra vấn đề này và trình diễn một proof-of-concept (PoC) sử dụng payload addJS được tạo thủ công để kích hoạt các hành động PDF tùy chỉnh khi tài liệu được mở. PoC này đã chứng minh rõ ràng khả năng khai thác của lỗ hổng jsPDF.
PoC nhấn mạnh một rủi ro nghiêm trọng đối với các ứng dụng tạo PDF động từ đầu vào người dùng. Lỗi cơ bản bắt nguồn từ việc thiếu xác thực và thoát đầu vào theo đặc tả PDF. Tài liệu PoC chi tiết có thể được tham khảo tại GitHub của ZeroXJacks.
Sự tồn tại của PoC công khai làm tăng mức độ nghiêm trọng của lỗ hổng, vì nó cung cấp hướng dẫn cho những kẻ tấn công tiềm năng.
Biện Pháp Khắc Phục và Khuyến Nghị Bảo Mật
Để bảo vệ các ứng dụng khỏi lỗ hổng jsPDFCVE-2026-25755, các nhà phát triển cần thực hiện các biện pháp khắc phục ngay lập tức và tăng cường các quy trình bảo mật.
Cập Nhật jsPDF lên Phiên Bản Mới Nhất
Các nhà phát triển được khuyến nghị mạnh mẽ nên cập nhật bản vá lên jsPDF phiên bản 4.1.0 hoặc cao hơn. Trong các phiên bản này, đầu vào đã được vệ sinh đúng cách bằng cách thoát các ký tự ngoặc đơn và dấu gạch chéo ngược. Việc cập nhật là bước quan trọng nhất để loại bỏ lỗ hổng jsPDF này.
Việc áp dụng bản vá bảo mật kịp thời giúp ngăn chặn kẻ tấn công khai thác lỗ hổng và bảo vệ người dùng cuối khỏi các tài liệu PDF độc hại. Đảm bảo tất cả các dự án phụ thuộc vào jsPDF đều được cập nhật.
Biện Pháp Tạm Thời và Cứng Hóa Hệ Thống
Cho đến khi có thể cập nhật, người dùng nên tránh nhúng nội dung không đáng tin cậy hoặc nội dung do người dùng tạo bằng cách sử dụng phương thức addJS hoặc các phương thức liên quan. Việc thực thi xác thực đầu vào nghiêm ngặt trên bất kỳ quy trình tạo PDF phía máy khách nào là rất cần thiết.
Các biện pháp cứng hóa hệ thống bao gồm:
- Xác thực đầu vào: Đảm bảo tất cả dữ liệu người dùng được xử lý kỹ lưỡng để loại bỏ các ký tự đặc biệt có thể được sử dụng để tấn công.
- Danh sách cho phép (Whitelist): Chỉ cho phép các loại nội dung và ký tự cụ thể được phép trong các trường đầu vào cho chức năng tạo PDF.
- Mã hóa đầu ra: Đảm bảo rằng tất cả các ký tự đặc biệt được mã hóa hoặc thoát đúng cách trước khi được chèn vào luồng PDF.
Việc kết hợp các biện pháp này sẽ giảm thiểu đáng kể rủi ro bảo mật liên quan đến lỗ hổng jsPDF, giúp bảo vệ các ứng dụng và dữ liệu của người dùng.









