PDF Injection: как простая вставка текста может привести к утечке данных

PDF Injection: как простая вставка текста может привести к утечке данных

Веб-приложения часто генерируют 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 включает:

  1. Ввод тестовых символов (например, скобок, косых черт) в поля, которые попадут в PDF.
  2. Анализ исходного PDF-файла через  pdf-parser  или  PDFiD .
  3. Поиск неожиданных объектов и метаданных.
  4. Тестирование в разных PDF-читалках, так как поведение может отличаться.

Как защититься

Методы защиты довольно просты, но их часто игнорируют:

  • Экранируйте специальные символы PDF (( ) / % [ ]).
  • Используйте белые списки допустимых символов и форматов.
  • Генерируйте PDF только из подготовленных шаблонов, без прямой вставки текста в поток команд.
  • Регулярно обновляйте библиотеки генерации PDF.

Вывод

PDF Injection — это напоминание о том, что любая точка, где пользовательский ввод попадает в документ или файл, может стать вектором атаки. Формат PDF богат на возможности, но именно это делает его опасным при неправильной обработке данных. Включайте фильтрацию и экранирование в стандартную практику разработки — и тогда ваши PDF-документы останутся просто PDF, а не инструментом взлома.

PDF Injection уязвимости PDF безопасность данных внедрение кода утечка информации защита PDF веб-безопасность
Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.

Культура отмены: новая инквизиция или эволюция справедливости

От цифрового остракизма до алгоритмов ненависти: как виртуальная толпа с факелами превратилась в бизнес-модель.