Уязвимость библиотеки mPDF связана с недостаточной проверкой вводимых данных. Эксплуатация уязвимости может позволить нарушителю читать произвольные файлы
Компенсирующие меры:
1. Санитизация HTML-кода перед передачей его в библиотеку:
1.1. Удаление скриптов и фреймов: Используйте надежные библиотеки для санитизации (например, Bleach для Python, HTML Purifier для PHP, или DOMPurify для JS).
1.2. Белый список тегов: Разрешить только базовые и "безопасные" теги (<b>, <i>, <p>). Полностью блокировать <iframe>, <script>, <link>, <embed>, <object>.
1.3. Очистка ссылок: Удаляйте атрибуты, которые могут вести к локальным файлам или внутренним ресурсам (например, src="file:///etc/passwd").
2. Использование подготовленного шаблона для размещения данных от пользователя и дальнейшей генерации PDF документа. Особое внимание необходимо уделить данным, передаваемым от пользователя. Они должны проходить строжайшую санитизацию. Если пользователь передает адрес картинки или тег img с атрибутом src, то необходимо проверить, что в URL начинается с http/https схемы (пункт 1.3), URL адрес не указывает на внутренний адрес при серверной генерации (к примеру 127.0.0.1), или путь до изображения не выходит за пределы DOCUMENT_ROOT или не запрашивается файл, к которому доступа не должно быть у текущего пользователя.
3.1. Отключение доступа к локальным файлам: Например, флаг --disable-local-file-access в wkhtmltopdf.
3.2. Отключение JavaScript: Если PDF не требует динамического рендеринга, используйте --disable-javascript.
3.3. Отключение внешних ресурсов: По возможности запретить загрузку внешних изображений и CSS (--no-images или isRemoteEnabled = false).
4. Минимизация пользовательских привилегий. Запуск процессов от имени пользователя с доступом «только на чтение» к пустой директории. Это предотвратит чтение системных файлов через Path Traversal. (При запросе изображения, должна быть проверка на разрешение текущего пользователя запрашивать такое изображение)
5. Запуск генератора в отдельном контейнере и последующее органичение доступа контейнера к внутренней сети компании и сети Интернет;
6. Использование средств межсетевого экранирования для ограничения возможности удалённого доступа к устройствам;
7. Перенос генерации PDF на сторону клиента (браузера пользователя) с помощью библиотек типа jsPDF.
| Балл | 4.9 — средняя опасность |