Безопасность2026-03-246 мин

Каждый наш вебхук подписан, чтобы получатель мог доказать, что это мы

Вебхук — это открытая дверь, если получатель не может проверить, кто постучал. Наша система доставки событий подписывает каждый payload через HMAC и отказывается обращаться к приватным сетям. Разбираем модель угроз.

URL вебхука — это публичный почтовый ящик. Любой, кто узнал адрес, может отправить через него поддельное событие — фальшивый лид, фальшивый бюджет, фальшивую срочность, — и наивный получатель поверит всему этому. Неаутентифицированный вебхук — это не доставка, это предложение.

Наша диспетчеризация событий подписывает каждый payload. Каждая исходящая доставка хешируется по HMAC-SHA256 с использованием отдельного секрета на каждый endpoint, и результат едет в заголовке X-Webhook-Signature. Получатель пересчитывает хеш с общим секретом и отклоняет всё, что не совпадает. Эта единственная проверка превращает «запрос, утверждающий, что он лид» в «запрос, доказуемо исходящий от нас». Она также позволяет обнаружить подделку payload в пути: измените хотя бы один символ тела — и подпись ломается.

Аутентификация — лишь половина модели угроз. Диспетчер, готовый отправить POST куда угодно, — это инструмент server-side request forgery, который только и ждёт, чтобы его направили внутрь сети. Поэтому перед отправкой мы валидируем адрес назначения и отклоняем приватные и loopback-диапазоны — 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, link-local и им подобные. В сочетании с жёстким таймаутом запроса некорректно настроенный или вредоносный endpoint не сможет превратить наш диспетчер в зонд против внутренней сети или в зависшее соединение.

От чего мы отказываемся: отправлять неподписанные payload, слепо повторять попытки в чёрную дыру или позволять определению endpoint протащить внутренний адрес. Подпись без защиты от SSRF — это запертая парадная дверь рядом с открытым окном; мы закрываем и то, и другое.

Принцип: передача лида должна быть проверяемой на принимающей стороне и неспособной атаковать что-либо на выходе. Если ваша CRM не может отличить наши лиды от чужих, интеграция декоративна. Криптографическое доказательство плюс строгая политика исходящего трафика — вот что делает межмашинную доставку чем-то, на что действительно можно положиться в 2 часа ночи.

Обсудить проект