Это история о том, как я нашел способ зарабатывать неограниченные деньги на подарочные карты Starbucks, тем самым гарантируя себе бесплатный кофе на всю жизнь, или украсть у них пару миллионов другими способами.
Итак, не так давно мне пришла в голову идея купить 3 карты Starbucks по 5 долларов каждая.
У Starbucks.com есть личный кабинет, где вы можете добавлять эти карты, просматривать свой баланс и даже переводить деньги между картами.
Есть такой малоизвестный класс уязвимостей «состояние гонки» .
Могу с уверенностью сказать, что большинство приложений, которые могут быть уязвимы, скорее всего, уязвимы для этой атаки, поскольку не каждый программист при разработке программ учитывает такие факторы, как параллельное выполнение кода и его последствия.
Это также происходит в веб-приложениях, обычно в функциях, связанных с переводом денег/баллов/фантиков/ваучеров.
Обо всех тонкостях работы расскажу в другой раз, а пока вернемся к переводу между картами в Старбаксе.
Перевод был построен на основе нескольких запросов с сохранением состояния.
Схематично, первый запрос POST /step1Эamount=1&from=wallet1&to=wallet2 помещал все эти значения в сессию на сервере, и только второй POST/step2Эconfirm передавал уже хранящиеся в сессии данные и очищал их.
Это существенно усложняет работу относительно классической гонки, где нужно всего лишь несколько раз одновременно повторить один и тот же запрос.
Ведь как только первый запрос очищает сессию, второй уже встречает пустую сессию! И чтобы это как-то заставить работать, мне пришлось бы сделать сложную композицию запросов, которая записывает в сессию сразу после ее очистки первым запросом и до выполнения второго запроса.
Это может сработать один раз из миллиона, а может и не сработать вообще.
Но для такой «полузащиты» всегда есть обходной путь — вы можете войти в одну и ту же учетную запись из двух разных браузеров/сессий.
Тогда операция выглядит примерно так: #установить параметры перевода в обоих сеансах curl starbucks/step1 -H "Cookie: session=session1" --data "amount=1&from=wallet1&to=wallet2" curl starbucks/step1 -H "Cookie: session=session2" --data "amount=1&from=wallet1&to=wallet2" #одновременное одобрение перевода 1 доллара США с карты 1 на карту 2. curl starbucks/step2Эconfirm -H "Cookie: session=session1" & curl starbucks/step2Эconfirm -H "Cookie: session=session2" & После 5 попыток ничего интересного не произошло и я уже собирался сдаться.
Особенность состояния гонки в том, что попытаться найти его можно только сторонним злоумышленником, поскольку неизвестно, какие средства защиты имеются (количество запросов по IP? запросов на аккаунт? запросов на действие?) и Единственный способ проверить, уязвимы ли вы, — это тщательно проверить исходный код на наличие в базе данных правильных пессимистических блокировок.
На 6-м запросе произошло чудо - перевод был осуществлен дважды и у меня оказалось две карты на 15 и 5 долларов, всего 20. Если считать это доказательством концепции, остается только убедиться, что магазин примет эти карты.
Зашёл в ближайший работающий Старбакс на рынке ул.
— Дайте мне что-нибудь на 16 долларов.
— О_о.
- Ну, а что у тебя самое ценное? - Вот эти сэндвичи.
Вышло 16,70 долларов.
Итак, в нашу небольшую операцию Y было вложено 15 долларов, а покупки были совершены по цене 16,70. Зная отношение самого гуманного суда США к хакерам, я, вернувшись домой, сразу же зачислил со своей кредитки на карту Starbucks еще 10 долларов, чтобы не быть должен корпорации целых 1,70 доллара, мало ли.
Далее наступает самое сложное — процесс отчетности.
В поддержке честно ответили, что с технической командой меня связать не могут, ну никак, и им очень жаль, что я так себя чувствую.
Написал на [email protected] 23 марта, тишина (кстати, ответили еще 29 апреля).
Пришлось через друзей и знакомых найти неравнодушных людей, и только через 10 дней уязвимость была устранена.
Никто не сказал спасибо, но был сделан недвусмысленный намек на то, что я совершил «мошенничество» и «злонамеренные действия» и что они еще подумают, что со мной делать.
Что я мог сделать? Я мог бы завести ферму из поддельных подарочных карт, купленных в разных магазинах по всему миру, заработать на них много денег и продавать их на специальных промо-площадках с 50-процентной скидкой (чтобы не вызывать подозрений) за биткойны.
Итак, проработав год-два, вы сможете высосать пару миллионов долларов из этой дружелюбной компании по производству сладкого кофе.
Теги: #Starbucks #состояние гонки #информационная безопасность #разработка сайтов
-
Что Такое Планшетный Цветной Сканер?
19 Oct, 24 -
Архитектура Ит-Решений. Часть 2. Архитекторы
19 Oct, 24 -
Подкаст Unclesoky - Эпизод №28
19 Oct, 24 -
Вы Купили Комнату Без Регистрации? И Зря!
19 Oct, 24 -
Быть Злым
19 Oct, 24