Демо, которое Flow Lab сделала сама, без заказа. Walkwren и Kettleby Dog Walks вымышлены.

Walkwren · разбор приложения

Собрано за выходные в ИИ-конструкторе. Проверено, пока ничего не случилось.

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.

Что входит в спасение приложения

1 · Разбор

Читаем код и настройки Supabase, проверяем каждую находку настоящей атакой и присылаем отчёт вроде этого. Что исправлять, решаете вы.

2 · Исправление с доказательством

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

3 · Ключи и запуск

Меняем утёкшие ключи, переносим серверную работу в отдельные функции на сервере (edge functions) и выкладываем приложение у вас на глазах.

Каждый месяц

Конструктор продолжает генерировать код. Раз в месяц атаки прогоняются заново по тому, что изменилось, а новые находки попадают в короткий отчёт.