Дыра на 9.2 балла, патч вышел месяц назад — но кто проверяет обновления библиотек?

В популярной JavaScript-библиотеке jsPDF, которую используют для генерации PDF-файлов, обнаружили критическую уязвимость. Она позволяет злоумышленнику подсовывать произвольные пути к файлам и встраивать содержимое локальной файловой системы прямо в создаваемые документы.
Проблема получила идентификатор CVE-2025-68428 и оценку 9,2 балла по шкале CVSS. Речь идёт об уязвимости класса local file inclusion и path traversal: при передаче некорректно обработанного пути функция загрузки файлов может прочитать любой доступный файл на сервере и добавить его содержимое в итоговый PDF.
jsPDF — 1 из самых распространённых библиотек в своём сегменте. В npm она скачивается более 3,5 миллиона раз в неделю, поэтому потенциальная зона риска довольно широка.
Уязвимость затрагивает Node.js-версии jsPDF до релиза 4.0.0. В серверных сборках библиотеки используется функция loadFile, которая напрямую читает файлы из локальной файловой системы. Если путь к файлу формируется на основе пользовательского ввода, злоумышленник может указать, например, системные файлы или конфигурации с чувствительными данными, и jsPDF без дополнительных проверок включит их в PDF.
Причём проблема не ограничивается одной функцией. Те же механизмы используются в addImage, html и addFont — все они в итоге вызывают loadFile и потому уязвимы при небезопасной работе с путями.
Разработчики jsPDF уточняют, что дефект касается только Node.js-сборок библиотеки — файлов dist/jspdf.node.js и dist/jspdf.node.min.js. В браузерных версиях такого доступа к файловой системе нет.
По оценке Endor Labs, риск эксплуатации сильно зависит от того, как библиотека используется в конкретном проекте. Если пути к файлам жёстко заданы в коде, берутся из доверенной конфигурации или проверяются через строгие списки разрешений, вероятность атаки минимальна. Но в сценариях, где путь формируется из пользовательских данных без фильтрации, проблема становится реальной.
Уязвимость была закрыта в jsPDF версии 4.0.0. В обновлении доступ к файловой системе по умолчанию ограничен, а сама библиотека полагается на режим разрешений Node.js. Однако здесь есть нюанс: механизм permission-mode пока считается экспериментальным в Node 20, поэтому исследователи рекомендуют использовать более новые версии среды — 22.13.0, 23.5.0 или 24.0.0 и выше.
Есть и другие подводные камни. Разработчики jsPDF предлагают в качестве временной меры запускать Node.js с флагом --permission, но он действует на весь процесс целиком, а не только на jsPDF. Кроме того, слишком широкие разрешения, заданные через --allow-fs-read, фактически сводят защиту на нет.
Для проектов, которые по каким-то причинам остаются на старых версиях Node.js, команда jsPDF советует вручную очищать и проверять все пользовательские пути перед тем, как передавать их в библиотеку.
С учётом того, насколько широко jsPDF используется в веб-приложениях и сервисах, исследователи считают CVE-2025-68428 привлекательной целью для атак и рекомендуют не откладывать обновление.