Upgrade to Pro — share decks privately, control downloads, hide ads and more …

31337

 31337

Web applications always operate with numbers. However, things don’t always go the way developers intended. Let’s discuss abnormal cases of working with number values and talk about exploiting vulnerabilities using them.

Bo0oM

May 01, 2022
Tweet

More Decks by Bo0oM

Other Decks in Technology

Transcript

  1. Ошибки округления Скажем, злоумышленник переводит 0,29 рубле й в доллары

    США. При стоимости одного доллара в 60 рубле й , сумма в 0,29 рубле й соответствует 0,00483333333333333333333333333333 долларов. Данная сумма будет округлена до двух знаков после запято й , т. е. до 0,01 доллара (один цент). Затем злоумышленник переводит 0,01 доллара обратно в рубли и получает 0,60 рубле й . Таким образом злоумышленник «выигрывает» 0,31 рубле й . ZN 2013
  2. •Например, WebMoney абсолютно нормально воспринимает сумму платежа со значением 1e1

    или 0xFF, а сравнение подобных чисел, еще и на старых версиях PHP, еще и с учетом нюансов сравнения в языке PHP, приводило к самым неожиданным последствиям.
  3. Тест-кейсы Разные системы счисления и экспонента Отрицательные числа и с

    знаком + Умножения, деление (в том числе на 0) Граничные и числа с переполнением для разной разрядности Заведомо некорректные (это ж фаззинг) числа с множественными точками True, False, NULL, NaN, NIL, None, undefined
  4. Предсказуемость чисел в ПГСЧ Рекомендую доклады по поломке ПГСЧ от

    Positive Technologies (запрещенная в США организация) https://habr.com/ru/company/pt/blog/156133/ https://habr.com/ru/company/pt/blog/149746/ https://xakep.ru/2018/04/12/ethereum-cheating/ https://static.ptsecurity.com/phdays/presentations/phdays-9-luarocks- vulnerabilities.pdf (из последнего)
  5. Timestamp Коды восстановления пароля Кастомные сессионные идентификаторы (как в вебе,

    так и в мобильном приложении) Имена файлов, идентификаторы сообщений и прочих объектов Собственные имплементации (псевдо) хэширования и криптографии
  6. Случайности не случайны Восстановление пароля Код восстановления пароля: 96318231973159 Или

    перейдите по ссылке. Удалите письмо, если вы не запрашивали смену пароля, бла-бла
  7. Используя методы отправки запросов для эксплуатации состояния гонки (race condition),

    было отправлено несколько токенов. Идея была в том, что отправив два запроса на восстановление пароля, на собственную почту и жертве, придут одинаковые или минимально различимые коды. 
 После множества попыток было получено максимальное приближение: 
 Почта 1: 56794300990116 
 Почта 2: 56756301990116
  8. Запрашиваем пароль. Смотрим, что в ответе веб-приложения есть заголовок Date:

    Date: Mon, 08 Jun 2020 08:14:10 GMT Переводим эту дату в timestamp. В данном случае это будет 1591604050. Сравниваем с полученным кодом - 50501015409368. (А теперь посмотри на цифры внимательно).
  9. 00001134555689 0001145569 Код восстановления - 50501015409368, это время 1591604050 +

    5038, где 4 цифры либо что-то случайное, либо миллисекунды.
  10. TL;DR • Используем мутирующие фаззеры для тестирования веб- приложений, как

    это делают бинарщики. Есть простор для мутаций чисел и поисков аномалий в их обработке (сравнении, изменении) • Случайности не случайны, если не используются криптографически безопасные алгоритмы • Nodejs и прочие ребята с приведениями типов вообще отдельная тема