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

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

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

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

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

Категории

Все категории
Loading categories
hyperswitch-unsigned-webhook — PoC для неаутентифицированной уязвимости вебхука Hyperswitch Worldpayxml (CWE-345/306), которая подделывает XML-статус SETTLED, чтобы помечать платежи успешными без захвата в PSP. | Kitploit
Инструменты/GitHubGitHub/abraxas/hyperswitch-unsigned-webhook
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийВеб-безопасностьТестирование на ПроникновениеАутентификацияЛаборатории и Практика
GitHub
abraxas/hyperswitch-unsigned-webhook

hyperswitch-unsigned-webhook

PoC для неаутентифицированной уязвимости вебхука Hyperswitch Worldpayxml (CWE-345/306), которая подделывает XML-статус SETTLED, чтобы помечать платежи успешными без захвата в PSP.

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

Популярное

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

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

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

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

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

Abraxas Labs - hyperswitch-unsigned-webhook

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  hyperswitch-unsigned-webhook

Разбор: https://abraxaslabs.tech/research/hyperswitch-unsigned-webhook

hyperswitch-unsigned-webhook

Hyperswitch 2026.09.21.0 - Juspay

Worldpayxml::verify_webhook_source возвращает Ok(true) с комментарием, что проверка выполняется через mTLS. На этом маршруте mTLS нет. Функция игнорирует тело и заголовки. Затем incoming.rs доверяет source_verified и выбирает HandleResponse без PSync. LastEvent::Settled отображается в PaymentIntentSuccess. Алгоритм IncomingWebhook по умолчанию — NoAlgorithm. BitPay и Shift4 наследуют это. Worldpayxml даже до этого не доходит. Он завершается досрочно.

Неаутентифицированный фиктивный SETTLED XML помечает платёж как успешный. Без захвата Worldpay. Без клиентского сертификата.

IDCVE пока нет
CWECWE-345, CWE-306
CVSSВысокий: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
ПродуктHyperswitch
Затронутовходящие вебхуки Worldpayxml вплоть до 2026.09.21.0
Аутентификациябез аутентификации; нужны merchant_id и orderCode
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1

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

Нужны merchant_id (есть в каждом URL панели Hyperswitch) и orderCode, равный connector_transaction_id попытки. Отправьте POST /webhooks/{merchant_id}/worldpayxml с неподписанным SETTLED. Если бы source_verified был false, incoming выполнил бы Trigger и PSync коннектора. Worldpayxml никогда не идёт этим путём. Intent переходит в Charged. В лаборатории: status=succeeded. Фиктивный XML. Без PSP.

Угадывание идентификаторов платежей — не баг. Баг — подделка SETTLED для идентификатора, который вы уже видели. Это не шелл. Это не реальный расчёт через Worldpay.

Тот же продукт, другой баг: payout confirm unbound client_secret.

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

Я прочитал Ok(true), затем HandleResponse против Trigger, затем Settled -> PaymentIntentSuccess. В комментарии говорится про mTLS. В лабораторном POST нет клиентского сертификата.

Первый клиент, который на это посмотрит, отправит POST вебхука против requires_confirmation. Incoming не переведёт в Charged платёж, который ещё не покинул подтверждение. Проставьте метку на попытке или дождитесь requires_capture / processing. В лаборатории метка ставится. Эта метка — лабораторная фикстура. У живой попытки уже есть id коннектора. У вебхука его нет.

Уже зафиксированные неверные пути: подписанный HMAC на коннекторе, который действительно проверяет подпись (этот путь — нет); трактовка HTTP 200 вебхука как оракула (опрашивайте GET /payments/{id} до status=succeeded); orderCode, не равный connector_transaction_id; reverse shell. Театр.

Затем: мерчант, API-ключ, MCA worldpayxml, платёж с confirm=false, метка connector_transaction_id, неподписанный SETTLED, получение.

Лаборатория

cd lab
./run.sh

Цель — только http://127.0.0.1:18082. run.sh клонирует тег 2026.09.21.0 в lab/hyperswitch-src для конфигурации и миграций.

IOC status_before=requires_confirmation
IOC webhook status=200 unsigned lastEvent=SETTLED
IOC poll status=succeeded
SUCCESS Hyperswitch unsigned Worldpayxml webhook Charged

Исправление

Проверяйте уведомление Worldpay (подпись / mTLS, которые фактически завершает маршрут). Не вызывайте HandleResponse для коннектора, вернувшего Ok(true) из no-op. Неподписанный SETTLED не должен переводить intent в состояние succeeded.

Ссылки

  • github.com/juspay/hyperswitch тег 2026.09.21.0
  • worldpayxml.rs · transformers.rs · incoming.rs · webhooks.rs · crypto.rs
  • Тот же продукт: hyperswitch-payout-confirm-secret
  • CWE-345 · CWE-306

Лицензия

GNU Affero GPL v3.0. См. LICENSE. Только для лабораторной среды с loopback. Без гарантий.

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