- Shipped
- 19 de agosto de 2026 a las 8:09 UTC
- Author
- Kamo
- Commit
- 19ddc01
Dos mitades de un incidente. Una cuenta registrada, verificada una dirección en un desechable proveedor, tomó una sesión de auto-login y creó cinco organizaciones en tres minutos y 42 segundos de ellos filas de byte "Acme Corp" difiriendo sólo en sus filas dominio. Produjo hileras de ZERO en system.access.logs, por lo que no hay IP y no hay usuario-agente en el registro para cualquiera de ellos. - Encontrando la bandera **************** - UserAuthenticationService: .u.is.fake = FALSE. entra en ACCOUNT-QUERY-PREFIX, no en una llamada. Los tres identificadores de inicio de sesión - nombre de usuario, correo electrónico de cuenta y el buzón primario volver a buscar llaves por id reutilizar esa proyección, por lo que una cláusula cierra las tres y una cuarto identificador añadido más tarde lo hereda. Una cuenta abanderada se lee como inexistente y obtiene el genérico "usuario no existe o la contraseña es incorrecta"; un mensaje que nombra el La bandera le diría a un abusador exactamente qué cambiar. - KSessionService.createSession: se niega rotundamente. Esta es la cintura más estrecha en el sistema para "que esta cuenta actifique" - cada *** se acuña aquí, así que una puerta cubre inicio de sesión de la contraseña, ingresa, SSO de escritorio, dispositivo auth Y el difo de registro auto-login post-verificación, que es como la cuenta en cuestión consiguió una sesión sin llamar nunca /login. Lanza en lugar de devolver nula, porque treinta llamantes asumir un identificador no nulo y lo haría NPE en otro lugar por completo; login y la sesión de autos camino atrápalo y da forma a una respuesta limpia. - FakeAccountGuard: dos niveles a propósito. El control de una sola cuenta es UNCACHED (restos las puertas duras, donde una respuesta rancio significa que una cuenta marcada todavía entra); los juegos de identificación son encajoneados por 60s (volvan a leer filtrando, donde el peor de los casos es un org sintético Permanecer en un listado por menos de un minuto). Fallas abiertas y esconder un púltido de filas no es vale 500 por un listado de org y NO caiga un fracaso, por lo que un blip no se convierte un minuto de la bandera en silencio sin funcionar. - OrgObjectStorageSweep: detiene la instantánea de los orgs sintéticos. Aquí es donde estaba el dinero: Las instantáneas se escriben por org por día para siempre, y cinco orcos abandonados ya lo habían hecho convertirse en el 9% de esa tabla. Una cuenta que no puede iniciar sesión no hace nada sobre el trabajo la plataforma sigue haciéndolo en su nombre. - FakeAccountController: bandera, una flábana, lista . detrás de MANAGE-ORGANIZACIONES en lugar de un nueva plataforma derecha, porque la plataforma de kamo-internal prueba de la cobertura afirma la derecha contra las superficies de la consola. Revoca sesiones en vivo sobre flagelación, desde el Las puertas están en MINTING una sesión, no en el uso de una; se niega a abanderar al Usuario del Sistema, que haría que la plataforma no pudiera entrar en cualquier niño org. Los agujeros **************** - /registrarse nunca lee "***Token". El registro IU siempre ha resuelto una Capcha Desafío y publicó el resultado; grep para el campo en todo Java no devolvió nada. El widget estaba en el navegador y el endpoint estaba muy abierto. Ahora verificada, y FAIL CIERRA asimétrico con el inicio de sesión a propósito: el inicio de sesión sólo puede verificar una carga útil cuando uno es presente, porque el cliente móvil no envía nada y lo requiere mucho que lo cerraría allí se cerraría Usuarios reales fuera. La inscripción tiene exactamente un cliente y ya envía la ficha. - CapchaVerificationService devolvió TRUE cuando el servicio-url-era se desconcertó, por lo que una configuración La omisión fue indistinguible de un desafío resuelto. Ahora rechaza, detrás "capcha.allow-sinconfigurado" (falso falso) para las carreras locales. Sin cambio de producción la propiedad se encuentra en kamowssecurity-config, pero el bypass latente se ha ido. - POST /org no tenía límite de tarifa de ningún tipo. Ahora con un tope por ACCOUNT (no por IP - una tecla IP castigaría a todos detrás de un NAT corporativo). Deliberadamente generoso: un cliente de verdad creado tres orcos en cinco minutos y medio, dos con el mismo nombre y alias, mientras que Desarrollando al mago. Un límite ajustado los habría bloqueado. Conteos intentos, no éxitos, y fracasa en un corte de Redis. - El alias de la org no tenía ninguna comprobación de singularidad en esta ruta - sólo el dominio lo hizo, razón por la cual cuatro orgs en vivo comparten "acme-corp" y por qué el creador varió sólo el dominio cada vez: era el único campo que el servidor rechazaría. Ahora un 409, con el proveedor de seguridad Porque es el par de inicio de sesión de la web-alias. - REGISACION / REGISTRATION-REJECTED / EMAIL-VERIFIED / ORG-CREATED están escritos con IP y agente del usuario. Cada elemento de detección tecla de reglas fuera de los eventos de inicio de sesión, por lo que todo el registro El embudo se sentó fuera del campo de visión del motor de detección. Deliberate NOTit hecho, habiendo comprobado: el inicio de sesión no se hace ***-estricto (rompe el móvil aplicación, necesita una versión coordinada); los dominios de correo electrónico desechable no están bloqueados (un real letreros de clientes de proton.me, y una regla de "no un proveedor convencional" bloquea real personas); no puntuable de autobloqueo de contenido (la señal de comportamiento de aspecto más fuerte. nombres de org duplicados creados de minutos de diferencia - coincide con un cliente real exactamente). Presualización de esquema ya satisfecha: KamoInitializer aplicado users.is-fake antes de la empuje compartido, verificado como "boolean NOT NULL DEFAULT falso" con su índice parcial, y volver-ran idempotentemente sin despejar la bandera.