Как школьник нашёл уязвимость и ограбил магазин игр, в котором я работал, на 300 тысяч рублей

А его так и не наказали.

Как школьник нашёл уязвимость и ограбил магазин игр, в котором я работал, на 300 тысяч рублей

История такая: магазин игр, в котором я был рекламщиком, печатал подарочные карточки. «Карточка» на деле была кодом — его можно было активировать в специальном разделе на сайте и получить на внутренний счёт какую-то сумму.

Такими бонусными рублями можно было целиком оплатить покупку. И мы выпускали много таких кодов: для конкурсов в соцсетях, рекламных активностей и коллабораций, да и сами клиенты могли создать «карточку», чтобы, например, подарить её другу.

Что ещё важно: такие подарки у нас появились после большой переделки сайта.

Мы в один момент сменили дизайн, добавили новых фич, избавились от кое-чего старого.

После этого у нас, время от времени, всплывали какие-то проблемы, связанные с новым функционалом. Одну из них я запомнил лучше прочих.

Клиенты начали жаловаться, что их «карточки» не работают. Мы смотрим логи — они активированы, но не клиентами, не их знакомыми. Перевыпускаем пострадавшим новый код, у них всё хорошо, а мы потеряли деньги. Как так?

Первая мысль — коды сливает кто-то из команды.

Или друзьям, или перепродаёт где. Но доступ к «карточкам» был мало у кого, да и людей у нас работало немного, все друг друга знали. Ещё мы грешили на каких-то бывших сотрудников, мало ли кто оставил бэкдор в «админке». Но за всю историю магазина у нас был только один программист — и он всё ещё работал с нами. И вообще, он и подбил нас расследовать пропажу.

Мы зашли в тупик. Мы знали, кто активирует украденные коды, то есть видели их почты, но, во-первых, не знали, кто эти люди, а главное — не понимали, как им это удаётся. Как происходит утечка.

И тут я вспомнил, что к магазину прикручена «Яндекс.Метрика», а в ней включён «Вебвизор» — страшный инструмент, на самом деле.

Он записывает на видео все посещения сайта.

То есть можно просто посмотреть каждый клик, каждое движение мыши, каждое напечатанное посетителем слово, будто запись стрима.

Так я и сделал — подглядел, как вор занимается своими тёмными делами. Не надеялся, что высмотрю что-то полезное. Ну, увижу я, как он вставляет в строчку подарочный код — мне это ничего не даст. Я же не узнаю, откуда он этот код скопировал. Но мало ли мелькнёт какая зацепка...

И она мелькнула. И это была самая тупая уязвимость на свете. А мальчику, который её нашёл, и, как потом выяснилось, рассказал о ней друзьям, просто ненормально повезло.

Нас взломали, вводя в строку подарочного кода название нашего магазина.

Я включаю запись с «Вебвизора», смотрю, как вор заходит на страницу активации «карточек», просто печатает там название нашего сайта и система выдаёт ему деньги. Он печатает снова — она снова выдаёт ему деньги!

Почему это работало? Мы узнали чуть позже от программиста. Строка активации кода сравнивала введённый код с тем, что был в базе, и считала его верным, если он совпадал минимум на 6 символов подряд.

Человек, который генерировал и загружал коды, об этом не знал. Либо забыл. Тут какое дело: некоторые коды генерировал сам сайт, но большую часть, например, под конкурсы, которые мы проводили чуть ли не ежедневно, делали вручную. И тот, кто их делал, в каждый вставлял название магазина, получалось что-то вроде «nazvanie-1234-5678».

В названии магазина было больше 6 символов, поэтому каждый раз, когда кто-то вводил его в строку активации, срабатывала первая подходящая «карточка».

Иногда со второй попытки, иногда с третьей, но рано или поздно можно было получить деньги на аккаунт.

Таким образом шесть пацанов в сумме активировали кодов тысяч на 300. Или я вру, и только один из них набрал столько, а все вместе они на полмиллиона «закупились». В основном мы расследовали и обсуждали ситуацию вживую, так что нет переписки, чтоб освежить память.

И это были не предприимчивые злодеи, а просто дети. Они покупали самые дорогие издания самых дорогих игр, оформляли самые дорогие предзаказы. Не закупались оптом, чтобы перепродать ключи на каком-нибудь «Плати», нет — только для себя.

По-моему, это исполнение детской мечты — набирать столько игрушек, сколько хочешь, и не платить ни за одну.

И я уверен, что узнали они о уязвимости именно так, как вы уже подумали: на дурака вводили в строчку кода очевидные варианты. Я сам так делаю с промокодами в какой-нибудь «Яндекс.Еде»: пишу «yandexteam» или «secretcode» шутки ради, вдруг повезёт.

Мне не везло ни разу. А ворам удача улыбнулась.

Подвела их только жадность. Мальчик, который нашёл способ, не знал меры — он влетел в топ покупателей сайта (у нас он был публичным), писал в комментариях, хвастался своим высоким рейтингом.

Если бы тащил коды аккуратнее, мы бы могли и не заметить.

Но вот мы всё выяснили, залатали дыру в безопасности, заблокировали аккаунты всем участникам, чтобы они не дотратили уже зачисленные на виртуальный кошелёк бонусы. А дальше... ничего.

Я нашёл пару из этих школьников в ВК и пригрозил, что против них готовится судебный иск, пускай они свяжут меня со своими родителями. Кто-то прочитал и не ответил, кто-то попросил «маме не рассказывать», но один или двое из родителей со мной связывались.

На самом деле никакого иска мы бы не подавали. Мы таким никогда не занимались, нам было жалко времени и нервов. Я просто хотел проучить паршивцев, чтобы они хоть чуть-чуть побоялись. А ещё, чтобы их родители об этом узнали и приняли меры.

Как школьник нашёл уязвимость и ограбил магазин игр, в котором я работал, на 300 тысяч рублей

В конце концов, дети, хоть и были виноваты, но не с большой буквы. Они нашли уязвимость случайно и использовали её только для себя. Не распространяли дальше какой-то своей компании.

Но надеюсь, лёгкий воспитательный подзатыльник им отвесили. Или на месяц без компьютера посадили. Потому что, будь на нашем месте руководство позлее, дети могли подставить родителей на серьёзные деньги.

А в основном проблема была в нас и нашей глупости. Это мы перелопатили весь сайт и не подумали заказать какую-нибудь проверку на уязвимости. Есть же такие, наверное. Положились на единственного программиста, который был и бэкендером, и сисадмином, и в ус не дули.

Так что посмеялись над ворами, над собой, и вернулись к работе. А остальные клиенты так и не узнали, почему пропал мальчик из топа покупателей. Хотя сейчас, наверное, кто-то и узнает.

900900
344 комментария

Комментарий недоступен

562

Самый крутой школьник в городе и даже сможет купить мамок своих недругов

238

И самый гениальный программист.
и считала его верным, если он совпадал минимум на 6 символов подряд

261

Я просто хотел проучить паршивцев, чтобы они хоть чуть-чуть побоялись.

Строка активации кода сравнивала введённый код с тем, что был в базе, и считала его верным, если он совпадал минимум на 6 символов подряд.

Ты не тех паршивцев проучиваешь.

241

Комментарий недоступен

5

Так там всех эта ситуация проучила)

2

Положились на единственного программиста, который был и бэкендером, и сисадмином, и в ус не дули.Понятно. Хотели дешево и всё сразу.

134