Vulnerabilities
Уязвимость, как-то связанная с POS-терминалом (смогли в QIWI, не зная PIN-кода, сделать операции): https://hackerone.com/reports/890747
Уязвимость при встраивании Apple Pay на сайте и в мобильном приложении. Суть: принимались криптограммы с другого сайта: https://hackerone.com/reports/996540
Ошибки работы с числами
Переполнения чисел
Как пример: 100
и 2**32 + 100
— одно число может быть. (Это может быть использовано не только для работ с числами при платежах, но и в Broken Access Control векторах)
Числа с отрицательным знаком
Округление сумм
Основано на неправильной работе с округлением чисел
Берем маленькую сумму, переводим ее на валютный счет. Банк округляет сумму до сотых в большую сторону, допустим.
Переводим ее обратно, пусть даже с невыгодным курсом
Получаем профит
Работает только на маленьких суммах, с ростом суммы, профит становится отрицательным
Защита:
сделать минимальную сумму перевода, при которой эксплуатация будет иметь отрицательный профит
Выстроить логику не на переводе рублей в доллары, а на покупке долларов за рубли (в этом случае не будет округления)
Добавить комиссию после определенного количества конвертаций
Раскрытие URL для зачисления платежа
Платежная система каким-то образом сообщает сервису, что платеж проведен успешно (у сервиса есть обработчик). Если каким-то путем раскрыть этот обработчик, то тут есть пространство для тестов:
Проверка подписи на стороне сервиса
Проверка параметров на стороне сервиса
Раскрытие URL с валидной подписью
Проверка атрибутов платежа
Ошибки на стороне сервиса:
Проверка суммы платежа
Проверка валюты платежа
Проверка количества товара (0.1 яблока например)
Проверка на изменение адреса и способа доставки (например, для обхода комиссий дополнительных)
Проверка дублирования параметров
Проверка отсутствия обязательных параметров для процесса
Проблемы со сравнением чисел (1e1, 0xFF, ...) и некорректная работа с такими числами, их парсинг
Проблема с типизацией (100, "100") и операциями над этими числами
Refund
Можно ошибиться на любом наборе проверок:
Была ли транзакция успешной, по которой запросили refund
Сумма частичного или полного refund меньше, чем сумма транзакции (сюда же попадают акции и тп)
Это повторный refund
...
Race Condition
Можно попробовать через HTTP Pipelining (в HTTP 1.1)
В HTTP 2 есть свои механизмы
ну или вручную, главное чтобы запросы улетели в короткий интервал (меньше секунды)
Time-of-Check-Time-of-Use (TOCTOU)
Это ошибка, возникающая из-за того, что приложение проверяет условия прежде, чем использовать их. Таким образом, существует время, между окончанием проверки и началом использования, в которое злоумышленник может попытаться изменить состояние (тем самым повлияв на результат проверки)
Transferring Money or Points, or Buying Items Simultaneously
Делаем одно и то же действие дважды в один момент времени (например, из-под разных сессий). Проверку пройдут оба действия (например, дважды начислит на другой счет $100, тк на счету есть $100)
Changing the Order upon Payment Completion
Меняем корзину во время обработки платежа
Changing the Order after Payment Completion
Если приложение не проверяет статус платежа при изменении заказа, это может привести к финансовым потерям
Last updated