ไลบรารี jsPDF ที่ใช้สำหรับสร้างเอกสาร PDF ในแอปพลิเคชัน JavaScript มีช่องโหว่ร้ายแรง (CVE-2025-68428) ที่ทำให้ผู้โจมตีสามารถขโมยข้อมูลที่ละเอียดอ่อนจากระบบไฟล์ในเครื่องได้ โดยการแทรกข้อมูลเหล่านั้นเข้าไปในไฟล์ PDF ที่สร้างขึ้น ช่องโหว่นี้ได้รับการจัดอันดับความรุนแรงที่ 9.2 และส่งผลกระทบต่อ jsPDF เวอร์ชันก่อน 4.0 โดยเฉพาะ Node.js builds ที่ใช้ฟังก์ชัน ‘loadFile’ ซึ่งสามารถถูกหลอกให้เข้าถึงพาธไฟล์ที่ไม่ถูกตรวจสอบได้ แม้จะมีการแก้ไขในเวอร์ชัน 4.0.0 โดยจำกัดการเข้าถึงระบบไฟล์ แต่การตั้งค่าสิทธิ์ที่ไม่เหมาะสมใน Node.js หรือการไม่ได้อัปเกรด Node.js เวอร์ชันที่แนะนำ อาจทำให้การแก้ไขไม่มีผลสมบูรณ์.
Severity: วิกฤต
System Impact:
- ไลบรารี jsPDF สำหรับการสร้างเอกสาร PDF ในแอปพลิเคชัน JavaScript
- jsPDF เวอร์ชันก่อน 4.0
- Node.js builds ของไลบรารี jsPDF (โดยเฉพาะไฟล์ dist/jspdf.node.js และ dist/jspdf.node.min.js)
Technical Attack Steps:
- ช่องโหว่นี้เป็นแบบ Local File Inclusion (LFI) และ Path Traversal.
- ผู้โจมตีส่งผ่านพาธที่ไม่ถูกตรวจสอบ (unsanitized paths) ไปยังฟังก์ชัน ‘loadFile’ (รวมถึง ‘addImage’, ‘html’, ‘addFont’ ซึ่งเรียกใช้ ‘loadFile’) ใน jsPDF Node.js builds ที่ได้รับผลกระทบ.
- jsPDF จะทำการอ่านระบบไฟล์ในเครื่องตามพาธที่ผู้โจมตีระบุ.
- เนื้อหาของไฟล์ในเครื่องที่ระบุจะถูกแทรกเข้าไปในเอาต์พุต PDF ที่สร้างขึ้น.
- ทำให้ผู้โจมตีสามารถขโมยข้อมูลที่ละเอียดอ่อนจากระบบไฟล์ในเครื่องได้.
Recommendations:
Short Term:
- อัปเกรดไลบรารี jsPDF เป็นเวอร์ชัน 4.0.0 หรือใหม่กว่าทันที.
- สำหรับ Node.js เวอร์ชันเก่าที่ไม่สามารถอัปเกรด jsPDF ได้ทันที ให้ตรวจสอบและทำความสะอาด (sanitize) พาธที่ผู้ใช้ป้อนให้ถูกต้องอย่างเข้มงวด ก่อนส่งไปยังฟังก์ชันของ jsPDF.
Long Term:
- อัปเกรด jsPDF เป็นเวอร์ชัน 4.0.0 หรือใหม่กว่า เพื่อแก้ไขช่องโหว่โดยการจำกัดการเข้าถึงระบบไฟล์โดยค่าเริ่มต้น.
- แนะนำให้อัปเกรด Node.js เป็นเวอร์ชัน 22.13.0, 23.5.0, หรือ 24.0.0 ขึ้นไป เพื่อรองรับโหมดสิทธิ์ (permission mode) ที่สมบูรณ์ ซึ่งช่วยเสริมความปลอดภัย.
- หลีกเลี่ยงการตั้งค่าสิทธิ์การเข้าถึงระบบไฟล์ที่กว้างเกินไปเมื่อใช้แฟล็ก ‘–allow-fs-read’ เนื่องจากจะทำให้การแก้ไขช่องโหว่ไม่มีผลและยังคงมีความเสี่ยงอยู่.
- ใช้ allowlist ที่เข้มงวดสำหรับการป้อนข้อมูล หากมีการรับค่าพาธไฟล์จากผู้ใช้ เพื่อป้องกันการแทรกพาธที่ไม่พึงประสงค์.
Share this content: