Веб-приложения часто генерируют PDF-документы на лету: счета, отчеты, сертификаты. Для пользователя это удобно, но иногда в таких генераторах скрывается уязвимость , известная как PDF Injection. Суть в том, что злоумышленник может вставить фрагмент текста или кода, который изменит содержимое PDF и даже приведёт к утечке данных. Проблема малоизвестная, но последствия могут быть серьезными — от раскрытия личной информации до обхода систем авторизации.
Что такое PDF Injection и почему это опасно
PDF Injection — это вид инъекционной атаки, при которой пользовательский ввод напрямую вставляется в PDF-документ без корректной фильтрации или экранирования. Если PDF-генератор использует текст из запроса или базы данных как есть, злоумышленник может внедрить управляющие конструкции PDF, скрипты или видимые метки для кражи информации.
Опасность в том, что PDF — это не просто «картинка с текстом». Это сложный формат с собственным языком разметки , где можно:
- Создавать скрытые поля форм.
- Встраивать JavaScript.
- Менять ссылки и метаданные.
- Вставлять внешний контент.
Если генератор документа не проверяет входные данные, злоумышленник получает инструмент для внедрения таких элементов прямо в файл.
Как это работает на практике
Представьте, что сайт формирует сертификат с именем пользователя. В коде это может выглядеть так:
$pdf->Write(10, "Сертификат выдан: " . $_GET['name']);
Если в параметр name
вставить обычное имя — всё будет нормально. Но злоумышленник может передать вместо него кусок PDF-синтаксиса, например:
(Sертификат выдан: ) /Author (admin) /Title (Confidential Report)
В результате PDF будет содержать неожиданные метаданные или даже скрытую информацию, которую генератор подставил автоматически.
Пример с утечкой данных
Некоторые PDF-библиотеки автоматически включают в метаданные имя файла шаблона или путь к нему. Через инъекцию можно вывести эти данные в видимую часть документа или в свойства файла, что приведёт к утечке внутренней структуры сервера.
Где чаще всего встречается PDF Injection
Уязвимость может возникнуть в любых системах, где PDF формируется динамически:
- Онлайн-генераторы счетов и чеков.
- Сервисы формирования сертификатов и дипломов.
- Системы бронирования и билетов.
- CRM и ERP с функцией экспорта в PDF.
Особенно уязвимы проекты, которые используют готовые библиотеки вроде TCPDF или FPDF, но не фильтруют пользовательский ввод.
Что может сделать злоумышленник
PDF Injection может быть использован для:
- Встраивания вредоносных ссылок — пользователь откроет PDF, кликнет по «безобидной» ссылке и попадет на фишинговый сайт.
- Извлечения скрытых данных — например, ID заказа, внутренний IP сервера или даже содержимое переменной из шаблона.
- Манипуляций с отображением — подмена текста, дат, подписей.
- Встраивания JavaScript — хоть современные PDF-читалки и блокируют опасные скрипты, старые версии могут выполнить их.
Почему о PDF Injection говорят меньше, чем о SQL Injection
SQL Injection или XSS известны всем, потому что они напрямую влияют на сервер и браузер. PDF Injection же считается «нишевой» проблемой, хотя в реальности её последствия могут быть не менее разрушительными. В некоторых случаях через PDF можно обойти двухфакторную аутентификацию или заставить пользователя отправить свои данные на сервер злоумышленника.
Как выявить PDF Injection
Проверка на PDF Injection включает:
- Ввод тестовых символов (например, скобок, косых черт) в поля, которые попадут в PDF.
- Анализ исходного PDF-файла через pdf-parser или PDFiD .
- Поиск неожиданных объектов и метаданных.
- Тестирование в разных PDF-читалках, так как поведение может отличаться.
Как защититься
Методы защиты довольно просты, но их часто игнорируют:
- Экранируйте специальные символы PDF (
( ) / % [ ]
). - Используйте белые списки допустимых символов и форматов.
- Генерируйте PDF только из подготовленных шаблонов, без прямой вставки текста в поток команд.
- Регулярно обновляйте библиотеки генерации PDF.
Вывод
PDF Injection — это напоминание о том, что любая точка, где пользовательский ввод попадает в документ или файл, может стать вектором атаки. Формат PDF богат на возможности, но именно это делает его опасным при неправильной обработке данных. Включайте фильтрацию и экранирование в стандартную практику разработки — и тогда ваши PDF-документы останутся просто PDF, а не инструментом взлома.