Демо, которое Flow Lab сделала сама, без заказа. Walkwren и Kettleby Dog Walks вымышлены.
Kettleby Dog Walks принимала записи на прогулки с собаками через Walkwren, приложение на React и Supabase, собранное в ИИ-конструкторе. Оно работало, но заодно позволяло любому прочитать домашний адрес каждого клиента. Это разбор: десять проблем, семь воспроизведены на настоящей базе PostgreSQL, три найдены в коде. Каждая исправлена и проверена заново.
По каждой находке: кто и что мог сделать, что вышло при попытке атаки до исправления и после, и само исправление.
Закрыть доступ легко, если не бояться сломать приложение. Эти действия выполнены на исправленной базе от имени тех, кому они нужны, а само исправление прогнано и на данных, которые могло оставить старое приложение.
Исправление оставляет владельцу и список записей, где видны признаки того, что старыми дырами уже пользовались: цена не совпадает с прайсом или запись оформлена на чужого клиента. Прочитать этот список могут только сервер и панель Supabase.
Владельцу осталось решить, до какого срока можно отменить прогулку, в какие часы открыта запись, подходит ли лимит в 10 предстоящих прогулок на клиента и можно ли в приложении менять запись как-то ещё, кроме отмены. Пока такие правки вносятся через панель Supabase.
Проверки базы идут на настоящем PostgreSQL (PostgreSQL, в памяти). Воссозданы роли Supabase anon, authenticated и service_role, права, которые Supabase по умолчанию даёт новым таблицам, и функции auth.uid() и auth.jwt(), поэтому правила защиты строк (row level security) работают так же, как в настоящем Supabase. Слой HTTP (PostgREST) не воссоздан, а у тестовой базы одно подключение, поэтому блокировка «одна запись за раз» проверена как правило, а не при настоящих одновременных запросах. «До» — это сгенерированная миграция. «После» — та же база с миграцией-исправлением поверх уже существующих строк, как и будет при выпуске. Если в старых данных есть то, что исправление не может безопасно преобразовать (время, введённое текстом «tomorrow 10am», несуществующая дата или выгульщик, уже записанный на две прогулки сразу), миграция останавливается, называет эти строки и ничего не меняет. Три находки в браузерной части приложения (F2, F8, F9) проверены чтением кода, а не запуском приложения. Walkwren и Kettleby Dog Walks придуманы, а код «до» написан для этого демо, чтобы показать проблемы, частые в сгенерированных приложениях на Supabase.
Читаем код и настройки Supabase, проверяем каждую находку настоящей атакой и присылаем отчёт вроде этого. Что исправлять, решаете вы.
Исправляем базу так, чтобы ваши данные сохранились, правим код и прогоняем атаки заново, пока не перестанет проходить ни одна и приложение будет работать как прежде.
Меняем утёкшие ключи, переносим серверную работу в отдельные функции на сервере (edge functions) и выкладываем приложение у вас на глазах.
Конструктор продолжает генерировать код. Раз в месяц атаки прогоняются заново по тому, что изменилось, а новые находки попадают в короткий отчёт.