SlopGradeby Maxor Global LLC
Se connecterDémarrer
Gate de contrôle d'accès · CWE-639 / BOLAPour les équipes qui livrent du code IA en SaaS multi-locataires

Bloquez les fuites de données inter-locataires
avant qu'elles n'atteignent main.

Une requête à portée d'organisation sans filtre d'org est la brèche SaaS la plus courante — et l'IA l'écrit sans cesse, parce que le test du chemin heureux passe quand même. SlopGrade attrape le .eq(org_id) manquant en CI, sur chaque pull request, avant le merge — déterministe, et seule une empreinte {fichier · ligne · classe} quitte votre runner.

n°1
classe de brèche SaaS
0
contenu de fichier ne sort
< 30 s
par pull request
0
faux positifs · 5 000+ repos
La confiance, prouvée — pas promise
Client open sourceMIT · auditez chaque ligne avant de l'épingler
Auditez l'empreinte--print-payload imprime les octets exacts envoyés
Épinglez le SHAfigez le code exact ; un tag peut être re-pointé
Le contenu resteseule l'empreinte structurelle est postée
Fail-openune panne ne casse jamais votre build
Le bug

Un filtre manquant, et le locataire A lit les données du locataire B.

La requête renvoie des lignes filtrées par id mais jamais par org_id. Tous les tests passent — les données de seed n'ont qu'une seule org. En production, n'importe quel utilisateur authentifié peut lire les factures de n'importe quel locataire en changeant un id. L'IA écrit ça sans cesse ; un relecteur humain glisse dessus. Pas le gate.

Ce que l'IA a livré

api/invoices.ts:44 — fuite entre locataires
// pas de filtre d'org — renvoie les lignes de N'IMPORTE quel locataire const { data } = await db .from("invoices") .select("*") .eq("id", req.params.id) // ✗ .eq("org_id", ctx.orgId) manquant

Ce qui quitte votre runner

l'empreinte structurelle — pas le code
{ "file": "api/invoices.ts", "line": 44, "kind": "cross-tenant-leak" }

Chemin, ligne, classe. Le contenu du fichier ne sort jamais. Auditez-le avec --print-payload.

Comment le gate l'attrape

Détecte → adapte → vérifie. Rien d'autre ne sort.

01 · DÉTECTE

Dans votre runner, sur le diff

Le client open source parcourt la pull request, résout chaque accès à une table à portée d'org, et signale toute requête qui lit par id sans prédicat d'org — dataflow intra-fonction, aucun code ne quitte la machine.

02 · ADAPTE

Verdict serveur + gate

L'empreinte est classée côté serveur. Une fuite dure bloque le check sur un repo privé payant ; les repos publics sont gatés gratuitement. Le paywall échoue en mode ouvert — jamais un build bloqué par erreur.

03 · VÉRIFIE

Correctif calculé dans le runner

Le constat est posté inline sur la ligne 44. Le correctif automatique — l'ajout du filtre d'org manquant — est généré et vérifié localement : il n'est proposé qu'une fois qu'un re-scan prouve que la fuite a disparu.

vs un SAST générique

La plupart des scanners ingèrent votre source. Celui-ci, jamais.

SAST générique
SlopGrade
Votre code source
téléversé dans leur cloud
ne quitte jamais le runner
Détection des fuites inter-locataires
rarement — règles de taint génériques
une classe de gate dédiée
Verdict
un score + une file de triage
passe / bloque déterministe
Faux positifs
notoirement bruyant
0 sur 5 000+ repos réels
Tarifs

Bloquez les fuites sur les repos privés. Par repo, jamais par siège.

Utilisateurs illimités. Le prix par repo baisse avec le volume. Le conseil est gratuit pour toujours, et le gate bloquant est gratuit sur les repos publics. Essai gratuit de 14 jours — sans carte.

1–4 repos
$24/repo/mois
facturé mensuellement
$24/mois en annuel
Démarrer l'essai
5–10 repos
$15/repo/mois
facturé mensuellement
$15/mois en annuel
Démarrer l'essai
11–20 repos
$11/repo/mois
facturé mensuellement
$11/mois en annuel
Démarrer l'essai

Les repos publics sont gatés gratuitement, pour toujours. Le blocage des repos privés démarre à $11/repo/mois · essai 14 jours, sans carte.

Prêt à bloquer la prochaine fuite d'isolation locataire avant le merge ?

Ajoutez-le à un seul fichier de workflow. La première pull request de code IA que vous scannez vous dira ce qu'elle allait laisser passer.

installation en 2 min · sans carte · le client est open source (MIT) · fail-open
FAQ

Fuites inter-locataires — les questions qu'une équipe sécurité pose.

Qu'est-ce qu'une fuite de données inter-locataires ?

Dans un SaaS multi-locataires, chaque ligne appartient à une organisation. Une fuite inter-locataires est une requête qui filtre par id d'enregistrement mais pas par l'org de l'appelant — un utilisateur authentifié du locataire A peut donc lire les données du locataire B en changeant un id. On l'appelle aussi BOLA / IDOR (CWE-639), et c'est la vulnérabilité SaaS sérieuse la plus courante.

Pourquoi les tests la ratent ?

Parce que le test du chemin heureux ne seed qu'une seule org, donc le filtre d'org manquant renvoie quand même la « bonne » ligne. Le bug n'apparaît qu'avec de vraies données multi-locataires en production. Un gate CI déterministe qui lit la forme de la requête l'attrape avant qu'elle ne soit livrée.

Mon code source quitte-t-il le runner ?

Non. Le client lit les fichiers en local et ne publie qu'une empreinte structurelle — chemins de fichiers plus {file, line, kind}. Lancez --print-payload pour auditer les octets exacts envoyés. Le contenu du fichier ne quitte jamais votre CI.

Va-t-il casser mon build avec des faux positifs ?

Démarrez en mode advisory — voyez chaque constat, ne bloquez rien — puis passez en gate quand vous avez confiance. Calibré à 0 faux positif sur 5 000+ repos réels, et fail-open par défaut : une panne ne casse jamais un build.

Quels langages et frameworks ?

JavaScript/TypeScript et Python aujourd'hui (Go et .NET couvrent le sous-ensemble cœur), à travers les query builders et ORM courants. Le gate inter-locataires est l'une des 10 classes gratuites du client open source.

Ajoutez-le à un fichier de workflow. Attrapez la fuite avant le merge.

# .github/workflows/slopgrade.yml jobs: slopgrade: permissions: contents: read id-token: write # zero secrets — GitHub proves your repo via OIDC steps: - uses: actions/checkout@v4 - uses: maxor-tech/slopgrade-firewall@<sha> # pin the SHA (a tag can be re-pointed) with: firewall-mode: "gate" # blocks a hard leak; free on public repos