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

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

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

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

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

Категории

Все категории
Loading categories
plausible-traffic-notify — Plausible Analytics master d44e104 — высокий уровень — удалённо — IDOR — PUT traffic-change-notification site_id массовое присвоение | Kitploit
Инструменты/GitHubGitHub/abraxas/plausible-traffic-notify
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеЛаборатории и Практика
GitHubabraxas/plausible-traffic-notify

plausible-traffic-notify

Plausible Analytics master d44e104 — высокий уровень — удалённо — IDOR — PUT traffic-change-notification site_id массовое присвоение

Репозиторий
12 дней назадЕщё не проверено

Популярное

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

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

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

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

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

Abraxas Labs - plausible-traffic-notify

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  plausible-traffic-notify

plausible-traffic-notify

Plausible Analytics community edition, GitHub master d44e104ae3943a9240d5cb6b62e67dff0f069d3a (2026-10-16) - Plausible Insights OÜ

Класс: IDOR (mass-assignment). Доступ: удалённый (владелец / администратор / редактор сайта, который атакующий уже контролирует).

Plausible.Site.TrafficChangeNotification.changeset/2 по-прежнему выполняет cast для :site_id. SiteController.update_traffic_change_notification/2 загружает строку по домену из авторизованного пути, затем выполняет Repo.update! для клиентской карты. Маршрут PUT /sites/:domain/traffic-change-notification/:type находится под :browser + CSRF + AuthorizeSiteAccess [:owner, :admin, :editor, :super_admin]. HTML-форма отправляет только threshold. Phoenix всё равно принимает дополнительные ключи.

whoareme Bug 02 исправил Shield / Goal site_id тем же способом: привязка socket.assigns.site.id, прекращение cast для :site_id. Этот контроллер не входил в тот проход. Включение (POST .../enable) проставляет site_id: site.id из assigns. Атакующий включает уведомление на своём сайте, затем отправляет PUT с traffic_change_notification[site_id]=<victim_pk>. Уникальный индекс (site_id, type). В установке по умолчанию нет строки spike/drop, поэтому обновление проходит успешно, и строка теперь принадлежит жертве. Имя таблицы — устаревшее spike_notifications.

Редактор собственного сайта переназначает строку уведомлений spike/drop на сайт жертвы. Получатели остаются почтовым ящиком атакующего. Oban отправляет атакующему письма о трафике жертвы.

IDCVE пока нет
CWECWE-915 / CWE-639
CVSSВысокий: 7.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:L
ПродуктPlausible Analytics
ЗатронутоGitHub master d44e104ae3943a9240d5cb6b62e67dff0f069d3a (2026-10-16). Последний тег CE v3.2.1 (e4f5a87a5570bd61605217e7ceb376636db8eddb, 2026-05-15) отстаёт на пять месяцев. CE + EE (lib/, не extra/lib).
Аутентификациявладелец / администратор / редактор сайта, который они контролируют. Viewer не может. Требуется CSRF (IDOR в рамках одной сессии).
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:18183 (http) 18184 (postgres) 18185 (clickhouse http)

Остаток №2 из Plausible Analytics leftovers. Тот же пин, другой пакет: plausible-editor-invite (HTML-страница People раскрывает transfer nanoid редакторам). Этот пакет — родственный Shield/Goal, который по-прежнему выполняет cast для :site_id.

Что может сделать атакующий

Владелец, администратор или редактор любого сайта, который они уже контролируют. Нужны cookie сессии и CSRF-токен из этой сессии. Им не нужно членство на сайте жертвы. Они не отправляют PUT на домен жертвы (это даёт 404). Они отправляют PUT на свой собственный домен с чужим целочисленным PK site_id.

Таблица привилегий (исчерпывающая). Тот же уровень, что и Signal-Server Dropwizard admin: метод + путь, что даёт этот вызов, разведка vs целостность vs доступность, доказано в лаборатории vs выведено, смежная поверхность, которая остаётся закрытой.

ОсьМетод + путьЧто даётПроисхождение
ЦелостностьPOST /sites/:attacker_domain/traffic-change-notification/:type/enable, затем PUT /sites/:attacker_domain/traffic-change-notification/:type с traffic_change_notification[site_id]=<victim_pk>Перепривязывает строку spike_notifications атакующего к victim.sites.id. Получатели остаются адресом атакующего. Захватывает уникальный слот (site_id, type). Порог выбирает атакующий (в лаборатории использовался 1).Доказано в лаборатории. Строка 1 переместила site_id 2 → 1, получатели {[email protected]}
РазведкаПисьмо Oban TrafficChangeNotifier на notification.recipientsТема Traffic spike on <victim.domain>. Тело: текущее число посетителей, топ-3 источников, топ-3 страниц. Первая отправка немедленная (last_sent nil). Повтор не чаще чем раз в 12 часов. Порог 1 даёт письмо всякий раз, когда у жертвы есть хоть один текущий посетитель. HTML дашборда / ссылки на установку в письме опускаются, если получатель не является участником команды или гостем (атакующий таковым не является).Выведено из исходного кода notifier. Письмо не перехвачено в лаборатории (MAILER_ADAPTER=Bamboo.LocalAdapter)
Доступностьжертва выполняет POST .../enable того же типаУникальный (site_id, type) отклоняет. Жертва не может включить функцию, пока внедрённая строка не удалена.Исходный код (unique_constraint)
Доступностьжертва выполняет disable (delete_all по site_id)Жертва может очистить внедрённую строку, если заметит лишнего получателя.Исходный код (disable_traffic_change_notification)

Остаётся закрытым на этом пине

ОсьМетод + путьПочему закрыто
ЦелостностьPUT /sites/:victim_domain/traffic-change-notification/:typeДомен пути проверяется через AuthorizeSiteAccess. Атакующий не является участником. Доказано в лаборатории: 404. attacker-not-member-of-victim=1
ЦелостностьЗапись Shield / Goal / funnel / segment / shared-linkwhoareme Bug 02 исправил эти обработчики cast :site_id. Они привязывают assigns.
РазведкаДамп ClickHouse, Stats API, HTML дашбордаНет членства, нет общей ссылки. Письмо notifier опускает ссылки на дашборд для не-участника.
Целостностьприём данных трекераУже неаутентифицированный POST /api/event с доменом, выбранным клиентом. Это не тот остаток.
ЦелостностьRepo.update!, когда у жертвы уже есть этот тип500 на уникальном (site_id, type). В установке по умолчанию строки нет, поэтому первое внедрение срабатывает.
Целостностьпросмотрщик сайта атакующегоAuthorizeSiteAccess — это owner/admin/editor. Просмотрщик не может.
ЦелостностьOS shell, super-admin LiveViewЗакрыто. Нет shell.

Я не заявляю о дампе ClickHouse, обратном шелле или входе в дашборд от имени жертвы. Дамп — это разведка трафика в письме, которое атакующий и так получает: домен, живые посетители, топ источников, топ страниц. site_id — целочисленный PK (перечислимый; whoareme использовал site_id=1). Дашборд data-* его не выдаёт.

Как я это нашёл

whoareme Bug 02 научил Shield и Goal не выполнять cast :site_id. Я сделал grep оставшихся cast(.*:site_id в lib/. У уведомления об изменении трафика он всё ещё был. Enable проставляет assigns. Update принимает карту от клиента. Это и есть остаток.

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