Enforce is_fake i zamknij dziury, które pozwalają nienadzorowanej rejestracji

FeatureSecurityService
Shipped
19 sierpnia 2026 08:09 UTC
Author
Kamo
Commit
19ddc01

Dwie połówki jednego incydentu. Zarejestrowane konto, zweryfikowane adres w jednorazowym Dostawca, wziął sesję autologin i utworzył pięć organizacji w ciągu trzech minut i Czterdzieści dwie sekundy – cztery z nich dwustronne rzędy „Acme Corp” różniące się tylko w ich Domena. Wyprodukował wiersze ZERO w system_access_logs, więc nie ma adresu IP i nie ma agenta użytkownika W pełni za wszystko. - Wymuszenie flagi - UserAuenticationService: ?u.is_fake - FALSE przechodzi do RRSOCOUNT_QUERY_PREFIX, nie do Dzwoniący. Wszystkie trzy identyfikatory logowania — nazwa użytkownika, e-mail konta i podstawowa skrzynka pocztowa Re-lookup wpisany przez id — ponownie wykorzystuj tę jedną projekcję, aby jedna klauzula zamykała wszystkie trzy i a Czwarty identyfikator dodany później dziedziczy go. Oznakowane konto odczytuje jako nieistniejące i Otrzymuje ogólne "użytkownik nie istnieje lub hasło jest niepoprawne"; komunikat o nazewem wiadomości Flaga powie sprawcy, co dokładnie zmienić. - KSessionService.createSession: odmawia wprost. To najwęższa talia w System dla "może to działanie konta" - każdy jest wybity tutaj, więc jedna brama obejmuje loginu haseł, enter-as, desktop SSO, auth urządzenia ORAZ lejek rejestru Po weryfikacji auto-login, w jaki sposób konto, o którym mowa, dostało sesję Bez dzwonienia /login. Rzucanie zamiast zwracać null, bo 30 rozmówców Załóż brak nerki i będzie całkowicie NPE gdzie indziej; zaloguj się i autosesje Ścieżka łapi i kształtuj czystą odpowiedź. - FakeAccountGuard: dwa poziomy celowo. Kontrola pojedynczego konta jest UNCACHED (parta tylna Twarde bramy, gdzie nieaktualna odpowiedź oznacza, że konto nadal dostaje się oznaczone; zestawy id Są buforowane dla lat 60-tych (odwracają filtrowanie, gdzie najgorszym przypadkiem jest org syntetyczny Zatrzymać się na aukcji na mniej niż minutę). Nieobecność – ukrywanie garstki rzędów nie jest 500 wpisanej na listę orgów – i NIE buforuje porażki, więc jeden blip nie staje się Chwile minuta flagi po cichu nie działa. - OrgObObStorageSweep: zatrzymuje migawki syntetycznych org. To właśnie tam pieniądze były: Migawki są pisane na org dziennie na zawsze, a pięć porzuconych org już Stanie się 9% tego stołu. Konto, które nie może się zalogować, nie robi nic z pracy Platforma robi w swoim imieniu. - FakeAccountController: flaga, nieflaga, lista — za MANAGE_ORGANIZACJAS a nie Nowa platforma po prawej, ponieważ test kamo-internalRightCoverage zapewnia prawo Ustawione na wyrenderowane powierzchnie konsoli. Odwoła sesje na żywo na temat belowania, od czasu Bramy są na MINTING sesji, a nie na jej użyciu; odmawia oznaczenia Użytkownika Systemu, który Platforma nie byłaby w stanie wejść do żadnego dziecka org. - Otwory ;) - /regretu nie czytaj "Token". Rejestr UI zawsze rozwiązywał Capcha Wyzwij i zamieścił wynik; grep dla pola na całej Jawie nic nie zwrócił. Widget był w przeglądarce, a punkt końcowy był szeroko otwarty. Teraz zweryfikowane, a FAIL Zamknięte — asymetryczne z celem logowania: Logowanie może zweryfikować tylko ładunek, gdy jest Obecny, ponieważ klient mobilny nie wysyła żadnego i trudno go tam zablokować Prawdziwi użytkownicy wyszli. Rejestracja ma dokładnie jednego klienta i już wysyła token. - CapchaVerificationService zwróciła TRUE, gdy nie stwierdzono „capcha.service-url”, więc konfiguracja Pominięcie było nie do odróżnienia od rozwiązania wyzwania. Teraz odrzuca, za plecami "capcha.allow-unconfigured" (domyślny false) dla lokalnych biegów. Brak zmian w produkcji — Nieruchomość jest ustawiona w kamowssecurity-config - ale utajona obwodnica zniknęła. - POST /org nie miał żadnego limitu stawek. Teraz ograniczone na konto (nie na adres IP – klucz IP Ukarał wszystkich za jednym korporacyjnym NAT). Celowo hojny: prawdziwy klient Stworzył trzy orgi w ciągu pięciu i pół minuty, dwa o tej samej nazwie i alias, podczas gdy Wypracowywać czarodzieja. Ciasny limit ich zablokowałby. Liczy próby, a nie Sukcesy i niepowodzenia otwierają się na awarię Redis. - alias orgu nie miał żadnej unikalności na tej ścieżce - tylko domena, dlatego Cztery żywe orgs dzielą "acme-corp" i dlaczego twórca zmieniał tylko domenę za każdym razem: To było to jedno pole, które serwer odrzuciłby. Teraz 409, skierowany do dostawcy usług bezpieczeństwa Ponieważ "(security_provider_id, alias)" jest logowaniem pary, który rozwiązuje hosta internetowego. - REJESTRACJA / REJISTRACJA_REJECTED / EMAIL_VERIFIED / ORG_CREATED zostały teraz napisane z IP i agent użytkownika. Wszystkie klucze reguły wykrywania od zdarzeń logowania, więc cały rejestr lejek znajdował się poza polem widzenia silnika detekcji. Celowo NIE do końca, po sprawdzeniu: Logowanie nie jest trafne (łamie telefon komórkowy) Aplikacja, wymaga skoordynowanego wydania); domeny jednorazowego e-mail nie są blokowane (rzeczywiste Znaki klientów od proton.me, a naiwna zasada "nie głównego dostawcy" blokuje prawdziwe Ludzie); brak autoblokowania strzeleckiego (najmocniej wyglądający sygnał behawioralny – duplikat nazw org utworzonych minut osobno - dokładnie pasuje do prawdziwego klienta). Warunki wstępne schematu już zaspokojone: KamoInitializer zastosował użytkowników.is_fake przed Popychanie tel--, zweryfikowane jako „boolean NOT NULL DEFAULT false” z jego częściowym indeksem, oraz Powtórnie idedempotentnie bez wyczyszczenia flagi.

All changes

Jak to, co widzisz żeglugę?

Każda z tych aktualizacji automatycznie ląduje w miejscu pracy. Zacznij za darmo i obserwuj, jak rośnie tydzień po tygodniu.

Start Free ForeverZobacz ceny