KamoCRM

Krótkie jednorazowe kody nie mogą być już odgadowane bez ograniczeń

FixSecurityService
Shipped
17 września 2026 04:48 UTC
Author
Kamo
Commit
357d3a0

Każdy krótki kod, który wysyłał lub SMS-y platformy, był sprawdzany bez żadnych danych: - POST /api/recover/email/weryfikacja-kod wziął 8-hex-character reset code ALONE i dopasował go do każdego Zaległy reset konta, na 30 minut. Mecz na każdym koncie stał się sesją odzyskiwania dla tego konta. - POST /api/recover/sms/verify: 6-cyfrowy kod tekstowy dla znanej liczby, 10 minut, bez liczenia. - POST /api/recover/questions/verify i /seed/verify: odpowiedzi bezpieczeństwa (kolor, miasto) i zwroty nasion, bez liczenia. - POST /api/security/verify-email, kod: 6-cyfrowy kod, 24 godziny, sesja. Pierwszy sukces miranuje a Auto-log klawisz na konto. - POST /api/konto/telefon/weryfikowanie: 6-cyfrowy kod potwierdzający nowy numer telefonu do odzyskiwania, bez liczenia. - POST - miał limit pięciu prób, który nigdy nie wszedł w życie. Napisała liczenie A następnie rzucił domyślną regułą transaktywną, która odwróciła odpis, a własna transakcja kontrolera była Oznaczone odwrotne tylko. CodeAtempttemptLimiter (Redis, stałe okna, policzkowane PRZED porównaniem, więc równoległe domysły nie mogą się przerośnić): - 5 prób na godzinę na temat: konto, wredny adres, numer telefonu lub kod. Próba, która jest używa piątego wydatkowanego kodu (resetowane wiersze oznaczone, zużyte kody tekstowe, kody rejestracyjne unieważnione, Zużyty kod wymiany telefonu). Sukces usuwa ten temat. - 30 prób na godzinę na adres klienta publicznego, we wszystkich tych punktach końcowych. Prywatne chmiecze są pomijane, ponieważ Pojedynczy adres pełnomocnika oznaczałby dla wszystkich. - 50 prób resetowania kodu na 10 minut, w całej platformie. Odmowy to 429 z Retest-After i retryAfterSeconds w ciele. Ogranicznik otwiera się na awarię Redis, jak LoginThrottleService i VerificationsendRateLimiter. Wszystkie porównania są teraz stałe. Kod resetowania jest związany z kontem, gdy żądanie nazywa jedno: sprawdź kod akceptuje "email" (numer wpisany Strona resetowania, rozwiązana sposób /email/inicjowanie jej rozwiązuje) i sprawdza tylko resetowanie tego konta. Nieznany Adres jest liczony dokładnie tak, jak znany. Kształt kodu nadal działa na stronę logowania, która nie została wdrożona Jeszcze nie (kamo-login wysyła adres w tym samym zestawie zmian), w ramach budżetu całej platformy. Metody, które piszą, co wydał zły kod, teraz deklarują noRollbackFor. Kody odzyskiwania MFA już były zaległe LoginThrottleGate i 60 bitów. Sprawdzenie telefonu Vonage egzekwuje własny limit prób. Testy: CodeAtemptLimiterTest: okna, piąty oznaczony ostatni, budżety adresowe i platformy, klucze hashed, fail-open. - RecoveryCodeAtemptsTest: konto wiążące, wydatki na piątą, odmowę po, nieznany adres liczony, tylko kod Nadal działa i ucieka, SMS, odpowiedzi na bezpieczeństwo. - ;) CodeAtemptWritesTest: każda metoda za pośrednictwem rzeczywistej TransactionInterceptor zobowiązuje się do odmowy. - RecoveryAtemptsWireTest: adres i adres i adres docierają do usługi; 429 mapowanie na wszystkich trzech kontrolerach. Dwunastu mutantów (każdy limit, wydatki, wiążący, budżet i noRollbackFor usunięty) z każdym nie udaje się testu.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing