Bloquea fugas de datos entre inquilinos
antes de que lleguen a main.
Una consulta con alcance de organización sin filtro de org es broken object-level authorization — n.º 1 del OWASP API Top 10 — y la IA la escribe constantemente, porque la prueba del camino feliz igual pasa. SlopGrade detecta el .eq(org_id) faltante en CI, en cada pull request, antes del merge — determinista, y en un repo privado, por defecto solo una huella {archivo · línea · clase} sale de tu runner.
Un filtro que falta, y el inquilino A lee los datos del inquilino B.
La consulta devuelve filas filtradas por id pero nunca por org_id. Todas las pruebas pasan — los datos de seed tienen una sola org. En producción, cualquier usuario autenticado puede leer las facturas de cualquier inquilino cambiando un id. La IA escribe esto constantemente; un revisor humano lo pasa por alto. El gate no.
Lo que la IA envió
Lo que sale de tu runner
Ruta, línea, clase. Por defecto, el contenido de un archivo privado se queda en el runner. Audítalo con --print-payload.
Detecta → adapta → verifica. En un repo privado, nada más sale por defecto.
En tu runner, sobre el diff
El cliente open source recorre la pull request, resuelve cada acceso a tabla con alcance de org, y marca cualquier consulta que lea por id sin un predicado de org — dataflow intra-función. Por defecto, ningún código privado sale de la máquina.
Veredicto del servidor + gate
La huella se clasifica en el servidor. Una fuga dura bloquea el check en un repo privado de pago; los repos públicos se gatean gratis. El paywall falla en modo abierto — nunca un build bloqueado por error.
Corrección calculada en el runner
El hallazgo se publica inline en la línea 44. Añades el filtro de org; el siguiente push vuelve a ejecutar el gate y el check pasa a verde.
La mayoría de los escáneres ingieren tu código privado. Por defecto, este no.
Bloquea fugas cross-tenant en repos privados. Solo para una persona, Team para un equipo.
El advisory es gratis en todo. El bloqueo es gratis en cada repo público y un repo privado. Solo cubre 10 repos privados para una persona; Team cubre 50, usuarios ilimitados. 14 días gratis, sin tarjeta.
¿Listo para bloquear la próxima fuga de aislamiento de inquilino antes del merge?
Añádelo a un solo archivo de workflow. La primera pull request de código IA que escanees te dirá lo que estaba a punto de dejar pasar.
Fugas entre inquilinos — las preguntas que hace un equipo de seguridad.
¿Qué es una fuga de datos entre inquilinos?
En un SaaS multi-inquilino, cada fila pertenece a una organización. Una fuga entre inquilinos es una consulta que filtra por id de registro pero no por la org de quien llama — así, un usuario autenticado del inquilino A puede leer los datos del inquilino B cambiando un id. También se llama BOLA / IDOR (CWE-639) y es el n.º 1 del OWASP API Security Top 10.
¿Por qué las pruebas la pasan por alto?
Porque la prueba del camino feliz solo hace seed de una org, así que el filtro de org que falta igual devuelve la fila «correcta». El bug solo aparece con datos multi-inquilino reales en producción. Un gate de CI determinista que lee la forma de la consulta lo detecta antes de que se envíe.
¿Mi código fuente sale del runner?
No por defecto. El cliente lee los archivos localmente y solo publica una huella estructural — rutas de archivo, {file, line, kind} y los nombres de tablas y columnas que necesita el control cross-tenant. Ejecuta --print-payload para auditar los bytes exactos enviados. Las excepciones son el deep scan (heisen-slop) en un repo público, activo por defecto, y el deep scan opt-in en un repo privado de pago: como máximo 80 archivos que contienen un sink, analizados en memoria y descartados. Un repo privado gratis nunca envía el código.
¿Romperá mi build con falsos positivos?
Empieza en modo advisory — ve cada hallazgo, no bloquees nada — luego cambia a gate cuando confíes. El gate detecta primero tu modelo de tenancy (filtro de fila, RLS o esquema por inquilino) antes de juzgar una consulta, y es fail-open por defecto: una caída nunca rompe un build.
¿Qué lenguajes y frameworks?
JavaScript/TypeScript y Python hoy (Go y .NET cubren el subconjunto principal), en los query builders y ORM habituales. El gate cross-tenant está en el cliente open-source gratuito.