KamoCRM

I codici brevi una volta non possono più essere indovinati senza limite

FixSecurityService
Shipped
17 settembre 2026 alle ore 04:48 UTC
Author
Kamo
Commit
357d3a0

Ogni codice breve le mail della piattaforma o i testi sono stati controllati senza contare: - POST /api/recover/email/verify-code ha preso il codice di reset 8-hex-character ALONE e lo ha abbinato contro ogni L'account e' in sospeso per 30 minuti. Una partita su qualsiasi conto è diventata una sessione di recupero per quel conto. - POST /api/recover/sms/verify: un codice a 6 cifre per un numero noto, 10 minuti, nessun conteggio. - POST /api/recover/questions/verify e /seed/verify: risposte di sicurezza (un colore, una città) e frasi di seme, nessun conteggio. - POST /api/security/verify-email {userId, code}: un codice a 6 cifre, 24 ore, nessuna sessione. Il primo successo minge un chiave auto-login nel conto. - POST /api/account/phone/verify: un codice a 6 cifre che mostra un nuovo numero di telefono di recupero, nessun conto. Aveva un limite di cinque dollari che non ha mai avuto effetto. Ha scritto il conte e poi ha lanciato, la regola predefinita @Transactional ha rotolato indietro la scrittura, e la propria transazione del controller era marcato solo rollback. CodeAttemptLimiter (Redis, finestre fisse, contato BEFORE il confronto così le ipotesi parallele non possono superarlo): - 5 tentativi all'ora per soggetto: l'account, l'indirizzo digitato, il numero di telefono o il codice. Il tentativo che utilizza il quinto spende il codice (reimposta le righe contrassegnate con i codici utilizzati, i codici di testo consumati, i codici di registrazione invalidati, codice di cambio del telefono consumato). Un successo cancella l'argomento. - 30 tentativi un'ora all'indirizzo del cliente pubblico, attraverso tutti questi endpoint. I salti privati sono saltati, dal momento che un indirizzo proxy sarebbe valido per tutti. - 50 tentativi di reset di codice per 10 minuti, su piattaforma. I rifiuti sono 429 con Retry-After e retryAfterSeconds nel corpo. Il limitatore non si apre su un outage Redis, come LoginThrottleService e VerificationResendRateLimiter. Tutti i confronti sono ora costanti. Il codice di reset è legato a un account quando il nome della richiesta uno: il codice di verifica accetta `email` (l'indirizzo digitato su la pagina di reset, risolto il modo /email/initiate lo risolve) e controlla solo i reset di quell'account. Un sconosciuto l'indirizzo è contato esattamente come uno conosciuto. La forma in codice funziona ancora per una pagina di login che non ha implementato tuttavia (kamo-login invia l'indirizzo nello stesso set di modifiche), sotto il budget della piattaforma. Metodi che scrivono quello che un codice sbagliato speso ora dichiarare noRollbackFor. I codici di recupero MFA erano già dietro LoginThrottleGate e sono 60 bit. Il controllo del telefono Vonage applica il proprio limite di tentativo. Test: - CodeAttemptLimiterTest: finestre, il quinto contrassegnato ultimo, indirizzo e budget della piattaforma, chiavi hashed, fail-open. - RecoveryCodeAttemptsTest: binding account, spendere sul quinto, rifiuto dopo, indirizzo sconosciuto contato, codice-solo funziona e funziona, SMS, risposte di sicurezza. - No, no. - CodeAttemptWritesCommitTest: ogni metodo attraverso un vero TransactionInterceptor commette il suo rifiuto. - RecoveryAttemptsWireTest: indirizzo e IP raggiungono il servizio; 429 mappatura su tutti e tre i controller. Dodici mutanti (ogni limite, spendere, vincolante, bilancio e noRollbackPer rimosso) ogni falliscono un test.

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