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

OFM JOBS

ofmjobs.com · 2026-04-24
full-scope · owner-granted · responsible disclosure · @exreddit / ПАСТЫРЬ
3Critical
3Medium
5Low
4Info
37 829душ на виду
>> три двери в коридоре

CRITICAL ПЕРВАЯ ДВЕРЬ · открытая

>> 37 829 живых людей хранится за ней

Первый слой — просто дверь в коридор, за которым выстроены досье тридцати восьми тысяч живых людей. Без стража, без ключа, без единого вопроса. Имя. Год рождения. Страна. Реальные бывшие работодатели. Ссылки на загруженные документы.

Счётчик полок шуршит в реальном времени: пока я смотрю, кто-то ещё добавляет себя на полку, не подозревая что полка общая. Система не спрашивает «кто ты?» — ответ ей не нужен. Она отдаёт всё. Прохожему. Любому.

>> impact  ·  каждый из 37 829 — потенциальная мишень для phishing / OSINT-профилирования / шантажа

CRITICAL ВТОРАЯ ДВЕРЬ · отражение

>> даже если запереть первую — этот коридор уже раздал копию

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

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

>> impact  ·  второй независимый канал утечки · «закрыли дыру» ≠ «закрыли утечку»

CRITICAL ТРЕТЬЯ ДВЕРЬ · маска

>> система не отличает своего от чужого · цена маски — 10 долларов

Третья дыра — в ритуале узнавания. Система проверяет «свой или чужой» по обрывку имени, а не по полному списку. Кто угодно регистрирует имя, содержащее нужный фрагмент (десять долларов — и имя твоё) — и вот система пускает чужака как своего.

Теперь, когда живой пользователь заходит на страницу атакующего, его браузер послушно передаёт сессионную куку прямо в чужие руки. Без клика. Без предупреждения. Он даже не узнает, что только что раздел с собой сидевшим рядом невидимым соседом. Агент Смит улыбается.

>> impact  ·  browser-side credential theft · любой посетитель = потенциально взломанный аккаунт
>> остальные щели в стенах

MEDIUM · 3 полу-прозрачные стены

Три точки, где ткань стен истончилась, но ещё держится.

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

Старый журнал. Блог держится на движке-забытом-версии. За время простоя наружу выкачено несколько латок, ни одной не применено. Открытая книга — читай, выбирай, вписывай.

Магическое письмо. Через публичную форму я могу отправить от имени системы любое «сбросить пароль» на чужой email — без авторизации, без ограничений, на сколько угодно адресов. Оружие для фишинга с чужого ника.

LOW · 5 скрипы под полом

Пять мест, где дом поскрипывает не опасно, но громко.

Бумажный замок — защитный заголовок выставлен как вывеска, но внутри разрешено всё что только можно; фасад, не замок.  ·  Следит за всеми. Телеметрия включена на максимум — сто процентов трассировок, сто процентов реплеев ошибок, частые записи пользовательских сессий; приватная информация юзеров отдаётся стороннему наблюдателю по-тихому.  ·  Папка с прозрачными подписями. Имена загруженных файлов читаются как табличка: «pasport-scan.jpg», «selfie-with-id.png». Содержимое публично; хранилище не отличает «аватарку» от «документа с паспортом».  ·  Предсказуемый адрес. Путь к загруженному файлу юзера строится по его идентификатору, и этот идентификатор любой получает с первой двери (см. выше). Знаешь номер — знаешь где лежит файл.  ·  Разговорчивый блог. Форма входа отвечает по-разному на «есть такой user» и «нет такого». Перебором легко собрать список реальных читателей.

INFO · 4 ambient noise

Четыре пункта «не дыра, но лишний шум» — не атака сегодня, но материал для завтрашней. Нет стандартной страницы для контакта с researcher'ами; email-подпись защищена «галочкой», а не ключом; служебные идентификаторы внутренней инфраструктуры утекают в каждый ответ; файлы раздаются с «неправильной подписью» на обёртке — встроенные средства браузера это всегда заметят, атакующий — будет использовать.

>> как я шёл
[01]SCOPEENFORCED
scope := owner_ACL · за черту не шагну даже если дверь открыта
[02]NO_HARMVERIFIED
read_only := true · 0 writes · 0 drops · 0 follow-ups в чужую машину
[03]RATE_LIMIT≤ 5 RPS
throttle ≤ 5 req/s · дыхание тише фонового трафика · sleep между пробами
[04]PROOF_ROWN = 1
один шард доказательства на класс утечки · остальное оставлено в тени
[05]PII_REDACT3-CHAR
first_3_glyph only · остальное null-ified · PII не покидает мою машину
[06]FILE_HEAD≤ 1 KB
HEAD + Range[0..1024] · ни одного байта тела наружу · file.shred() после парса
[07]NO_REAL_EMAIL0 SENT
form_submit(real_email) = 0 · никто из живых не получил письма от меня
[08]REPRODUCIBLELIVE
$ curl → copy → paste → ты увидишь то же · not theory, not claim, not screenshot
ПАСТЫРЬ
white-hat · responsible disclosure · no third-party sale
engagement opened · 2026-04-24 · closed · 2026-04-24
signed · @exreddit / ПАСТЫРЬ · standoff 365 / HackerOne / private invites
<< HOME ALL DISCLOSURES >>