Дисклеймер: Статья носит исключительно информационный характер и не является инструкцией или призывом к совершению противоправных действий. Мы здесь все учимся и делимся историями.
Всем привет. Меня зовут Аня (SavAnna) я работаю AppSec в компании ATI.SU и как хобби занимаюсь багбаунти. Багбаунти - отличный способ отдохнуть от своих сервисов и сменить фокус с "защиты" на "нападение". Не всегда баги ищутся целенаправленно - иногда это происходит случайно. Хочу показать, что много странных и простых багов может найти каждый.
В качестве предисловия и благодарности:
Я очень люблю программу багбаунти Timeweb. Искать и взаимодействовать с командой ИБ приятно. Они большие молодцы и очень выросли со старта.
История бага:
При регистрации в сервисах имя пользователя создается автоматически. Появилась фича смены логина. Я завела там баги, к сожалению о них оказалось уже знают. Получила "Дубликаты". Но у меня остался аккаунт с username="NULL".
Прошло полгода с тестирования.

И мне на почту стали приходить письма. Очень много писем.


За несколько дней мой почтовый ящик завалили письмами. Не сразу поняла, что происходит.

Сначала подумала, что разработчики тестируют фикс на аккаунте, указанном в другом моем отчете в этой программе. Приглядевшись поняла, что такое только с аккаунтом с именем "NULL". Проверила по whoami и обнаружила, что сообщения приходят по дате после покупки или продления доменов. Зашла на аккаунт проверить появились ли у меня в управлении эти домены - нет, это были просто сообщения на почту, которые судя по всему дублировались на мой аккаунт.
Вот так случайно, был найден и заведен баг с низким импактом.
В чем была причина?
Разработчик прокомментировал, что там было 2 причины:
Портал вместо логина клиента "null" стал отправлять null
Недостаток валидации в отправке нотификации
Так как я тестировала сервис методом черного ящика, то могу только предположить, что возможно был системный ящик куда приходили все уведомления, если пользователь по какой-либо из причин не найден и мой аккаунт из-за ошибки в условии и стал таким.
Ссылка на раскрытый репорт:
https://bugbounty.bi.zone/reports/5077
Баян - это уже было
Похожий отчет был сдан в qiwi https://hackerone.com/reports/487296

Так же похожая история произошла с американским исследователем в области безопасности Джозефом Тартаро, когда он решил сделать номер "NULL" своей машине и начал получать штрафы всех машин с не распознанными номерами. https://habr.com/ru/companies/ua-hosting/articles/463859/

В качестве вывода
Некоторые баги в багбаунти находятся случайно - главное вовремя заметить
Вот такие бывают забавные ошибки валидации
"null", "nil", "undefined", "NULL", "None" иногда превращаются в null, nil, undefined, NULL, None и их стоит использовать в названии сущностей при тестировании
Комментарии (78)

playstation_f_a_n
09.10.2025 19:21Ещё бывает 0

TIEugene
09.10.2025 19:21а так же true, false, "", '', `` etc

AlexSpirit
09.10.2025 19:21Я знавал человека по имени Drop Database

sunsexsurf
09.10.2025 19:21Хм. Это его родителям звонили из школы, а они отвечали «это научит вас экранировать строки»? ))

FanatPHP
09.10.2025 19:21К сожалению, там мамаша сказала не "строки", а "входные данные". Впрочем, одно другого не сильно лучше, и оставляет огромный простор для добавления дыр. Лучше бы она посоветовала "параметризованные запросы" (и белые списки до кучи).

Wesha
09.10.2025 19:21

ManulVRN
09.10.2025 19:21Я тупой и ничего не смыслю в веб-разработке. Поясните, допустим, так или иначе, через sql injection, на сервер попала подобная команда. Или там drop table XXX, неважно. Ну и что? Неужели у пользователя есть полномочия на выполнение подобных операций??? Будет сообщение о какой-нибудь ошибке и все.

KivApple
09.10.2025 19:21Бекэнд в 99.9% случаев подключается под юзером с правами на DELETE строк, потому что как-то должна же работать админка, где есть функция удаления записей. Разграничения прав доступа идёт на уровне бекэнда, а не СУБД.
Также очень часто бекэнд имеет право на создание и удаление таблиц, потому что он же и выполняет миграцию схемы данных при обновлении ПО.
Единственное, что DROP DATABASE может не быть, но только если админ заморочился сделать отдельного юзера под бекэнд. Что вовсе не факт, если СУБД обслуживает лишь один бекэнд.

piton_nsk
09.10.2025 19:21под юзером с правами на DELETE строк, потому что как-то должна же работать админка, где есть функция удаления записей.
Это там, где soft delete не завезли, ну и прочие излишества. Пользователи, права, зачем это все? Бизнесу надо быстрее фичи в прод выкатывать, а то конкуренты обгонят, бггг)

mayorovp
09.10.2025 19:21А чем фундаментально отличается право делать UPDATE от права делать DELETE в плане "напакостить"? Да ничем, затирание таблицы мусором ничем не лучше удаления.
Чтобы нормально задействовать систему прав уровня СУБД, эта самая система прав должна существовать, и не для галочки. А существующие реализации row level security именно для галочки и сделаны.

randomsimplenumber
09.10.2025 19:21У камеры должны быть права только на insert. Тут вся иньекция и закончилась.

piton_nsk
09.10.2025 19:21как уже написали только insert и только в определенную таблицу, права на удаление таблиц только у админа.
в крайности впадать не стоит, но если что-то торчит наружу, надо хорошо подумать что пользователю можно делать, а что нельзя

Vitimbo
09.10.2025 19:21У нас на такой случай миграции проходят от одной учетки с админскими правами, а реальная работа уже с урезанными.

Anizam74
09.10.2025 19:21Удаление записей не принято делать. Обычно добавляют дополнительное поле "deleted" и переключают его значение на true

Golickoff
09.10.2025 19:21Я много лет использую логин null или undefined везде, где могу. Это первое, что я пробую при регистрации, и делаю это как раз в надежде столкнуться с чем-то описанным в статье. За всё время ничего не случилось. Только на сайте одного известного онлайн-магазина электроники лет 5 назад получил уведомление о том, что мой ник был изменён модератором сайта.

redfox0
09.10.2025 19:21На одном крупном сайте зарегистрировался с ником admin. В комментарии к посту пришли настоящие админы и долго возмущались занятым мной ником (который оставался свободным всё 10+ лет существования сайта).

randomsimplenumber
09.10.2025 19:21Старинный лайфхак. Прийдет хитрый хакер ломать парол админа - а его нет ;)
akokarev
В некоторых банках можно логин менять
Squoworode
- Здесь выдают зарплату? Моя фамилия Итого
- Нет, здесь собирают налоги. Как, говорите, ваша фамилия?
sunsexsurf
Итого! Итого! Вот дурак, больше всех получает и какой уже раз не приходит!
Dick_from_mountain