Автентифікація вебхука не є його валідацією
Багато розробників випускають небезпечний баг у продакшн. Вони плутають автентифікацію з валідацією.
Автентифікація означає, що повідомлення надійшло від правильного постачальника. Валідація означає, що дані всередині повідомлення є коректними.
Якщо ви виконуєте лише перший крок, ви втрачаєте гроші.
Нещодавня вразливість у WordPress (CVE-2026-9189) демонструє цю помилку. Додаток Contact Form 7 PayPal and Stripe Add-on не перевіряв суми платежів.
Ось як зловмисник використовує це:
- Зловмисник створює замовлення на $2,000.
- Зловмисник здійснює реальний платіж на $1.
- Він встановлює номер інвойсу так, щоб він відповідав замовленню на $2,000.
- PayPal надсилає справжнє, перевірене сповіщення про платіж на $1.
- Плагін бачить перевірене повідомлення і позначає замовлення на $2,000 як оплачене.
Плагін довірився джерелу, але проігнорував саме повідомлення.
Не припускайтеся цієї помилки. Коли ви працюєте з вебхуками, дотримуйтесь цих кроків:
- Автентифікуйте повідомлення за допомогою підписів або спільних секретів (shared secrets).
- Зіставте суму та валюту із замовленням у вашій базі даних.
- Переконайтеся, що email отримувача збігається з вашим обліковим записом.
- Використовуйте значення на стороні сервера для прив'язки замовлення. Не довіряйте лише ID інвойсу, надісланому в payload.
- Використовуйте ідемпотентність, щоб ігнорувати дублікати ID транзакцій.
- Тримайте перевірку TLS активною для всіх запитів.
- Завершуйте роботу з помилкою (fail closed). Якщо будь-яка перевірка не проходить, зупиняйте все.
Якщо ви використовуєте Contact Form 7 PayPal and Stripe Add-on версії 2.4.9 або старішої, оновіть її негайно. Кожне неоплачене замовлення є ціллю для цього експлойту.
Завжди автентифікуйте джерело, а потім перевіряйте дані.