ENGAGEMENT · CLOSED --:--:-- UTC
// E N G A G E M E N T   B R I E F //

PERFECT.STUDIO

perfect.studio · 2026-04-26
full-scope · owner-invited · responsible disclosure · @exreddit / ПАСТЫРЬ
2Critical
3High
4Medium
1Low
~42 800душ за стенами
>> пять дверей в коридоре

CRITICAL КОМНАТА АДМИНИСТРАТОРА БЕЗ ЗАМКА

>> ритуал переименования жильца · знай его имя — и паспорт перепишется на твоё

В одном из боковых коридоров стоит дверь без таблички. Кто-то её собирал для себя — управляющий, наверное, или строитель в первые дни. Через эту дверь в журнал жильцов вписываются новые лица. Если имени ещё нет — оно появится. А если есть — у этой двери есть тихая особенность: она переписывает запись поверх. Без вопроса «ты ли это», без подтверждения по почте, без печати.

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

Жилец узнает только тогда, когда сам не попадёт в свою комнату — потому что дом ему о смене пароля не сообщает. Между этим открытием и действиями злоумышленника — столько времени, сколько у того хватит решимости. Имя жильца достать из публичного — форум, прошлая утечка, угаданный корпоративный адрес. Это один шаг, который превращает любого зарегистрированного в чужой аккаунт.

>> impact  ·  mass account takeover любого из ~42 800 жильцов · zero-interaction · жертва не уведомлена · окно эксплуатации = время до её следующего входа

CRITICAL СТРАЖ С ОТКРЫТОЙ ШПАРГАЛКОЙ

>> страж у входной двери · картинка-загадка · ответ написан карандашом на обратной стороне

У главных ворот стоит страж с картинкой — на ней нарисованы кривые буквы, и страж требует прочесть их вслух перед тем как впустить. Кажется, надёжно. У этой картинки две слабости — обе с одной стороны.

Молчанием тоже впускает. Если подойти и не сказать ничего — просто пустота, тишина — страж сравнивает свою тайну с твоим молчанием и решает что они равны. Дверь открывается. Это не обход — это дефект сравнения: страж не различает «ничего сказано» и «правильно сказано».

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

>> impact  ·  anti-automation на воротах фактически отсутствует · в связке с первой дверью даёт unlimited brute через любой словарь утечек
>> три тёплые щели

HIGH ИМЯ КАК ЭХО В ЧУЖОЙ КОМНАТЕ

>> пишу имя в журнал · оно отзывается голосом в кабинете оператора, как только он откроет страницу

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

В сочетании с тем, что ключи оператора лежат в его сумке без подкладки (см. ниже про «чужой голос»), его сессия становится моей в момент чтения. Это уже не атака на одного жильца — это лестница к самой будке вахтёра.

>> impact  ·  stored XSS с гарантированным doставлением до admin'а через любой support-ticket · privesc по цепочке

HIGH СПЯЩИЙ КЛЮЧ В ПЕРЕДНЕЙ

>> ключ выдают ещё до знакомства · жертва пройдёт ритуал — ключ в моей руке, всё это время мой

У этого дома странная особенность ритуала входа. Когда ты заходишь как прохожий — тебе дают спящий ключ на временное хранение. Когда ты потом представляешься, называешь имя и пароль — дом не выдаёт тебе новый ключ; он будит тот же самый, который у тебя уже был.

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

>> impact  ·  session fixation через любой phishing-link или iframe-pre-set · жертва не видит подмены

HIGH БРАУЗЕР ГОВОРИТ ЧУЖИМ ГОЛОСОМ

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

Внутри дома, у каждого жильца свой кабинет — там можно поменять пароль, переписать почту, перевести баланс. Все эти действия дом принимает по короткому слову-команде. Дом не спрашивает: «ты пришёл из своей двери?» Он не сверяется с печатью отправителя. Если слово прозвучало — он выполняет.

Это значит: если жилец зашёл в дом и параллельно открыл в соседнем окне чужую страницу — та страница может прокричать дому слово-команду через стену, и дом послушается. Сменит пароль. Перепишет адрес. Сделает ровно то, что было прокричано.

Сами ключи (которые в сумке у жильца) не обёрнуты подкладкой — любой, кто умеет читать сумку из соседней комнаты, прочтёт их буквально. И унесёт. Это вторая половина того же замка: ключи открыто лежат, дверь не проверяет отправителя.

>> impact  ·  CSRF на все state-changing операции + session token читается из JS · в связке с XSS даёт мгновенный admin-takeover при первом ticket-открытии
>> полу-прозрачные стены

MEDIUM · 4 ЩЕЛИ В НАРУЖНОЙ СТЕНЕ

Четыре щели по периметру — каждая по отдельности безобидная, вместе складываются в инфраструктуру для атаки на доверие.

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

Разговорчивый посыльный. На задней стене висит верёвка — потянешь, посыльный понесёт письмо номер такой-то. Какому угодно адресату. Письмо идёт от имени дома, с печатью дома, через настоящую почтовую службу дома. Спам через чужой штемпель. Заодно по тому же признаку «номер есть» / «номера нет» можно перебрать всю переписку дома и узнать, кто с кем общался.

Бесконечный коридор у входа. У главной двери нет утомления. Можно стучать неограниченно — сто раз в минуту, тысячу раз, всю ночь. Дверь не запоминает лицо стучащего, не запирается на паузу. В сочетании с тем, что страж со шпаргалкой (см. вторую дверь) фактически прозрачен — словарь утечек проходит до конца без сопротивления.

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

>> скрипы под полом

LOW · 1 ПРОЗРАЧНЫЕ ПОДПИСИ НА ПАПКАХ

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

>> ambient noise

INFO СТАРЫЙ ЖУРНАЛ И ЗАПЫЛЁННЫЕ ДВЕРИ

В здании ощутимо старое время. Двигатели, на которых всё крутится, не получали правки уже больше пяти лет; на воротах гордо написана версия стража-у-входа — этого не должно быть на наружной стене. Целое крыло старого форума стоит закрыто на петлю снаружи — двери все на месте, но залы пустые, посетителей не водят. Внутри по-прежнему можно тихо переписать чужую запись, и никто не увидит — но и никто не зайдёт. Атмосферный шум, не уязвимость; материал для следующего захода.

>> как я шёл
[01]SCOPEENFORCED
scope := owner_grant · только perfect.studio и его DNS-зона · ни одного шага в третьи стороны (CDN, MTA, payment gateways)
[02]NO_HARMVERIFIED
read_only по дизайну · 0 удалений, 0 переписей чужого контента · все эксплуатационные пробы — на test-аккаунтах TLD .invalid
[03]RATE_LIMIT≤ 5 RPS
throttle ≤ 5 req/s · ритм тише среднего живого пользователя · паузы между классами проб
[04]PROOF_ROWN = 1
по одному шарду доказательства на класс утечки · никаких массовых дампов, никаких enum'ов всего журнала
[05]PII_REDACT3-CHAR
first_3_glyph only в публичном брифе · полные данные не покидают мою машину · файлы жителей не скачивались
[06]VICTIM_ONLYSELF
target_user := me · все PoC через свои test-аккаунты · два технических аккаунта владельца — с уведомлением и немедленным запуском recovery flow
[07]NO_REAL_EMAIL0 SENT
form_submit(real_email) = 0 · ни один реальный житель дома не получил от меня писем · все probe-emails на TLD .invalid (RFC 2606)
[08]REPRODUCIBLELIVE
$ curl → copy → paste → владелец увидит то же самое со своего терминала · не теория, не скриншот, не утверждение
ПАСТЫРЬ
white-hat · responsible disclosure · no third-party sale
engagement opened · 2026-04-26 · closed · 2026-04-26
signed · @exreddit / ПАСТЫРЬ · private engagement · own-channel disclosure
<< HOME ALL DISCLOSURES >>