- Shipped
- 19 августа 2026 г. в 08:09 UTC
- Author
- Kamo
- Commit
- 19ddc01
Две половины одного инцидента. Зарегистрированный аккаунт, проверенный адрес в одноразовом Провайдер, взял сеанс автоматического входа в систему и создал пять организаций за три минуты. сорок две секунды — четыре из них байт-идентичные строки «Acme Corp», отличающиеся только своими домен. Он генерировал нулевые строки в system access logs, поэтому не было IP-адреса и пользовательского агента. Запись на любой из них. ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * UserAuthentication Сервис: «u.is fake = FALSE» переходит в ACCOUNT QUERY PREFIX, а не в Звонивший. Все три идентификатора входа - имя пользователя, электронная почта учетной записи и основной почтовый ящик re-lookup keyed by id — повторное использование одной проекции, так что один пункт закрывает все три и Четвертый идентификатор, добавленный позже, наследует его. Помеченный счет читается как несуществующий и получает общее «пользователь не существует или пароль неправильный»; сообщение, именующее Флаг говорит обидчику, что именно нужно изменить. - KSessionService.createSession: полностью отказывается. Это самая узкая талия в система для «пусть этот счет действует» — каждый *** здесь отчеканен, поэтому один врата покрывает Логин пароля, вход, рабочий стол SSO, устройство auth и воронка регистра автологин после проверки, то есть как аккаунт получил сеанс Никогда не звоните /login. Бросает вместо того, чтобы вернуть нуль, потому что тридцать звонящих предполагает ненулевой идентификатор и будет NPE в другом месте полностью; логин и автосессия Путь поймать его и сформировать чистый ответ. - FakeAccountGuard: два уровня нарочно. Проверка по одному счету не производится (она возвращается) жёсткие ворота, где несвежий ответ означает, что помеченная учетная запись все еще входит; идентификатор устанавливает кэшируются в течение 60-х (они считывают фильтрацию, где наихудшим случаем является синтетическая организация). Задерживаться в списке менее минуты. Не удается открыть — прятать горсть рядов не получается стоит 500 баллов за листинг организации — и не кэширует неудачу, поэтому один всплеск не становится Минута флага молча не работает. - OrgObjectStorageSweep: перестает делать снимки синтетических организаций. Вот где были деньги: Снимки пишутся на одну организацию в день навсегда, а пять заброшенных организаций уже сделали это. Он составляет около 9% от этого стола. Учетная запись, которая не может войти в систему, ничего не делает для работы Платформа продолжает работать от своего имени. - FakeAccountController: флаг, нефлаг, список - за MANAGE ORGANIZATIONS, а не за новая правильная платформа, потому что тест kamo-internal RightCoverage утверждает право Устанавливается на отрисованные поверхности консоли. Отзыв живых сессий на флагшток, так как шлюзы находятся на МИНТИРОВАНИИ сеанса, а не на использовании одного; отказывается пометить пользователя системы, который Это сделает платформу неспособной войти ни в одну детскую организацию. Дыры ****************** - /register never read '***Token'. Регистрационный интерфейс всегда решал Capcha Вызов и опубликованный результат; grep для поля по всей Java ничего не вернул. Виджет был в браузере, а конечная точка была широко открыта. Проверено, и провал Закрытая — асимметричная с логином нарочно: логин может проверять полезную нагрузку только тогда, когда он Присутствующий, потому что мобильный клиент не отправляет ни одного и жестко требует, чтобы он там был заблокирован реальных пользователей. Регистрация имеет ровно одного клиента и он уже отправляет токен. - CapchaVerificationService вернул TRUE, когда «capcha.service-url» был отключен, поэтому конфигурация Упущение было неотличимо от решенной задачи. Отвергнуты, позади «capcha.allow-unconfigured» (по умолчанию ложный) для локальных запусков. Никакого изменения производства — Недвижимость установлена в kamowssecurity-config, но скрытый обход исчез. - POST/org не имеет ограничений по ставкам. Теперь ограничено на ACCOUNT (не на IP - ключ IP) Наказывать всех, кто стоит за одним корпоративным NAT. Намеренно щедрый: настоящий клиент Он создал три организации за пять с половиной минут, две с тем же именем и псевдонимом. Вычислить волшебника. Жесткий лимит их блокировал. Считать попытки, а не Успешно, и не удается открыться при отключении Redis. - У псевдонима Org не было проверки уникальности на этом пути - только домен сделал, поэтому Четыре живые орга делят «акме-корп» и почему создатель каждый раз менял только домен: Это было единственное поле, которое сервер отвергал. Теперь 409, предназначенный для провайдера безопасности потому что '(security provider id, alias)' - это пара логин решает веб-хостинг на. - REGISTRATION / REGISTRATION REJECTED / EMAIL VERIFIED / ORG CREATED теперь пишется с помощью IP и пользовательский агент. Каждое правило обнаружения отключает события входа в систему, поэтому весь регистр Воронка находилась вне поля зрения двигателя обнаружения. Намеренно НЕ сделано, проверив: логин не сделан ***-строго (ломает мобильный) приложение, нуждается в скоординированном выпуске; одноразовые почтовые домены не заблокированы (реальный) Клиент подписывается на proton.me, и наивное правило «не основной поставщик» блокирует реальное. люди; отсутствие автоблока, оценивающего контент (самый сильный поведенческий сигнал) Дублирующие имена организаций, созданные с разницей в несколько минут, точно соответствуют реальному клиенту. Предпосылка схемы уже выполнена: KamoInitializer применила user.is fake до того, как Shared-lib push, проверенный как «boolean NOT NULL DEFAULT false» с его частичным индексом; Идемпотентно повторять, не очищая флаг.