SlopGradeby Maxor Global LLC
Se connecterDémarrer l'essai gratuit de 14 jours
Flux de données déterministe · s'abstient quand il ne peut pas prouverLe moteur de détection derrière SlopGrade Firewall

La preuve,
pas la supposition.
Suivez la donnée.

La preuve est le seul signal de sécurité qui survit à chaque nouvelle exécution. Les regex devinent à partir de motifs ; les reviewers LLM devinent à partir du contexte, facturent par PR et envoient votre code ailleurs. heisen-slop suit chaque valeur de requête à travers votre code par analyse de flux déterministe, et quand il ne peut pas prouver un chemin, il s'abstient et le dit — au lieu d'une devinette générative. Un blocage est un chemin prouvé de l'entrée attaquant vers un sink dangereux — jamais un motif qui a simplement correspondu.

6
langages
29
classes de vulnérabilités
127
détecteurs langage × classe
23 ms
par fichier, en moyenne
Ce que c'est

Un moteur de flux, pas un scanner de motifs.

Le moteur lit votre code comme le ferait un interpréteur : il suit chaque valeur depuis son point d'entrée — un paramètre de requête, un champ de formulaire, un argument CLI — jusqu'à son point d'arrivée : un shell, une requête, un template, un désérialiseur. Il ne lève un finding que s'il peut prouver le chemin, et ne blanchit du code que s'il peut prouver que la valeur est une constante. Tout ce qu'il ne peut pas prouver, il s'abstient — ni blocage, ni faux vert.

Portée de détection

29 classes sur 6 langages — 127 détecteurs.

Chaque ✓ est un détecteur de flux de données actif qui suit l'entrée de la requête jusqu'à un sink dangereux dans ce langage. C'est la couche deep scan du Firewall ; le catalogue Firewall de 125 classes comprend aussi des gates de motifs que la GitHub Action exécute sur votre runner.

Classe de vulnérabilité
Python
JS / TS
Go
Java
Ruby
PHP
Injection et exécution de code
Injection SQLCWE-89
Injection de commandeCWE-78
Injection d'argumentsCWE-88
Injection de code / evalCWE-94
Injection NoSQLCWE-943
Injection de template (SSTI)CWE-1336
Injection LDAPCWE-90
Injection XPathCWE-643
Désérialisation non sécuriséeCWE-502
Entités externes XML (XXE)CWE-611
Injection JNDICWE-74
Pollution de prototypeCWE-1321
Chemins, redirections et sortie
Traversée de répertoireCWE-22
Zip slipCWE-22
SSRFCWE-918
Redirection ouverteCWE-601
Cross-site scripting (XSS)CWE-79
ReDoSCWE-1333
Crypto, jetons et transport
Cryptographie faibleCWE-327
Vérification TLS désactivéeCWE-295
Transport non chiffréCWE-319
Secret JWT dans le codeCWE-321
Vérification JWT désactivéeCWE-347
Sessions et configuration
Cookie non sécuriséCWE-614
Protection CSRF désactivéeCWE-352
CORS permissifCWE-942
Permissions en écriture pour tousCWE-732
Mode debug en productionCWE-489
Violation de frontière de confianceCWE-501
Détecteurs par langage · 127
27
23
21
24
23
9

✓ = un détecteur actif pour ce langage. — = non couvert dans ce langage aujourd'hui. Le deep scan hébergé laisse de côté la frontière de confiance : sur de vraies applications, c'était surtout du bruit.

Ce qu'il comprend

Il connaît votre framework, votre base de données et votre client HTTP.

Un moteur de taint ne vaut que par les sources et les sinks qu'il connaît. Voici ceux modélisés aujourd'hui — le reste est suivi comme du code ordinaire, et un appel inconnu fait s'abstenir le moteur plutôt que deviner.

Pythonast · inter-fichiers : imports, 3 niveauxDjango, Flask, FastAPI / Starlette, Tornado, aiohttp, DRF. SQLAlchemy text(), Django .raw(), pymongo / motor. requests, urllib, httpx. Templates Jinja, Mako, Django.
JavaScript / TypeScripttree-sitter · inter-fichiers : imports relatifsExpress, Koa, Hapi, Fastify, paramètres de route Next.js et actions 'use server', resolvers GraphQL. knex, Sequelize, Prisma, pg, mysql, Mongo / Mongoose. axios, got, undici, node-fetch.
Gotree-sitter · inter-fichiers : le packagenet/http, gin, echo, fiber. Appels SQL de type db.Query et le driver Mongo. goja et gopher-lua (injection de code), gob (désérialisation), rs/cors et gin-contrib/cors.
Javatree-sitter · une seule classeServlets, @RequestParam Spring et consorts, JAX-RS. Requêtes JDBC, JPA / Hibernate. RestTemplate, WebClient, OkHttp. Velocity, FreeMarker, Pebble. DocumentBuilderFactory (XXE), CSRF Spring Security, JNDI.
Rubytree-sitter · inter-fichiers : require_relativeparams / cookies Rails, Sinatra et Rack. where, find_by_sql d'ActiveRecord. Nokogiri (XPath, XXE), ERB. Réglages CSRF de Rails.
Pas encore couvertsignalé, jamais sous-entenduLe flux de données C# / .NET (les gates de motifs de l'Action couvrent bien .NET), les alias de chemin TypeScript comme @/lib, et les appels Java vers une autre classe.
Où il se branche

Un seul moteur, atteint par les outils que vous utilisez déjà.

GitHub Actionchaque pull requestSur un repo privé, elle n'envoie par défaut qu'une empreinte {file, line, kind}. Avec deep-scan: "true" (heisen-slop, repos payants), et par défaut sur un repo public, elle envoie aussi les fichiers qui portent un sink — 80 fichiers / 2 M caractères au plus, ceux de la PR en premier. --print-payload montre d'abord les octets exacts.
Checks de pull requestinformatif par défautLes findings arrivent en check run et en annotations dans la PR. deep-scan-block: "true" permet aux findings prouvés de faire échouer le check ; la GitHub App peut rendre ce check obligatoire via la protection de branche.
Code Scanning (SARIF)onglet Security de GitHubupload-sarif: "true" envoie les résultats à côté de vos autres scanners. Un repo privé requiert GitHub Advanced Security pour l'onglet Security.
Serveur MCPvotre assistant IADemandez le statut des gates d'un repo, le dernier verdict CI et les findings du Firewall (repo_gate_status, ci_verdict, firewall_findings) avec une clé API.
Moteur hébergéen mémoire, puis jetéLa source est transmise, analysée en mémoire puis jetée — jamais journalisée, jamais conservée. Seul le finding (fichier, ligne, classe, raison en une ligne) est gardé pour votre historique CI.
Votre infrastructureEntreprisePour du code qui ne doit jamais sortir, le moteur peut tourner dans votre réseau, conçu pour fonctionner sans accès internet. Mis en place avec vous, pas un téléchargement public.

GitHub uniquement pour l'instant : GitLab et Bitbucket ne sont pas pris en charge par le Firewall.

Comment ça marche

Prouver → s'abstenir → décider. Rien n'est jamais deviné.

01 · PROUVER

Analyse de flux déterministe

Le moteur interprète chaque fichier de façon abstraite et suit le taint de chaque source vers chaque sink. Un chemin prouvé est un BLOCAGE (p = 0,94) ; une valeur prouvée constante est PROPRE (p = 0,02). 0 $, auditable, et identique à chaque exécution.

02 · S'ABSTENIR

S'abstient sur la bande ambiguë

Quand un sink dangereux rencontre une source de requête sans qu'aucun chemin ne soit prouvable, le moteur s'abstient : il ne rend aucun verdict pour ce cas. Il n'en fait jamais un blocage, et ne le compte jamais comme propre.

03 · DÉCIDER

Un verdict auditable

La preuve porte le sink et le flux — jamais votre code source. Sur SlopGrade Firewall, le deep scan est opt-in sur les repos privés et informatif par défaut ; bloquer sur ses findings est un réglage séparé. Seul Python peut rendre un CLEAN prouvé aujourd'hui ; les autres langages bloquent ou s'abstiennent.

Pourquoi il gagne

L'axe que les acteurs en place ne peuvent pas suivre.

vs. scanners regex

motif → bruit

Un regex se déclenche sur du texte qui a l'air dangereux. Le moteur se déclenche sur une donnée qui coule de façon prouvée vers un sink — une requête paramétrée sûre avec les mêmes mots-clés reste propre.

vs. revues par LLM

non déterministe · coût par appel · egress

Un LLM peut répondre autrement au re-run, coûte de l'argent par PR et envoie votre code à un tiers. Le chemin prouvé est déterministe — même code, même verdict — et ne fait aucun appel de modèle. Quand aucun chemin n'est prouvable, le moteur s'abstient au lieu de deviner, et le deep scan hébergé ne conserve jamais une ligne de votre code.

vs. SaaS cloud

votre code quitte votre infra

Les scanners hébergés dans le cloud copient votre repo à l'extérieur. Sur un repo privé, le run Firewall par défaut n'envoie qu'une empreinte structurelle. Le deep scan est analysé en mémoire puis jeté. Faire tourner le moteur dans votre infrastructure se met en place sous contrat Entreprise, sur demande.

Mesuré, pas affirmé

Chaque chiffre ici vient d'une exécution — y compris les faibles.

0 faux blocagesur 2 479 cas étiquetés que le moteur a tranchés (OWASP Benchmark Python, tests de règles Semgrep)
23 mspar fichier en moyenne, 1,6 s au pire, sur 60 008 vrais fichiers — 0 appel de modèle
3 sur 32verdicts Python faux sur des tests CodeQL jamais vus (tous des blocages ; 12 CLEAN sur 12 justes). JS : 106 blocages justes sur 112
~2 %des fichiers de vraies CVE (avis GitHub) reçoivent un verdict — le rappel sur de vraies vulnérabilités est la frontière

Lisez le premier chiffre avec le dernier : le moteur est précis quand il tranche, et il s'abstient souvent. Sur du vrai code CVE (avis GitHub, lot jamais vu), les blocages sont justes au moins 3 fois sur 4 (25 sur 32, un plancher : tout blocage sur le fichier corrigé compte comme faux) ; sur 52 089 pull requests open source ordinaires, il en a bloqué 245, dont 46 pour une vraie faille — c'est pourquoi le deep scan est informatif par défaut et le blocage est un opt-in séparé. Le pack de règles pour bibliothèques de la porte CI est noté de la même façon : une relecture du dépôt entier sur 240 de ses lignes MEDIUM en trouve environ 1 sur 4 de vraies (25,0 %, 18,0–32,9), et non les 32,5 % des étiquettes sur extrait. Seuls les désaccords ont eu une seconde lecture et rien n'a été exécuté : le pack reste informatif et ne bloque jamais.

Roadmap

Ce que nous construisons ensuite.

Rappel sur les vraies CVEUn mode bibliothèque pour les paquets publiés liste déjà des candidats (avis, jamais bloquants). En faire davantage de findings prouvés est le levier principal.
Inter-fichiers plus profondAlias de chemin TypeScript, appels Java entre classes, Go entre packages.
Plus de langagesUn moteur de flux de données C# sur le même cœur.
Questions

Réponses directes.

Suit-il la donnée d'un fichier à l'autre ?

Oui en Python (imports, 3 niveaux), JavaScript/TypeScript (imports relatifs), Ruby (require_relative) et Go (le package). Pas encore pour les alias de chemin TypeScript ni les appels Java vers une autre classe.

Mon code quitte-t-il mon infrastructure ?

Pas par défaut : le run Firewall envoie une empreinte structurelle — chemins de fichiers, {file, line, kind} et les noms de tables et de colonnes dont le contrôle cross-tenant a besoin, jamais le contenu des fichiers. Le deep scan (heisen-slop) est actif par défaut sur les repos publics et en option payante sur les repos privés — il envoie au moteur au plus 80 fichiers signalés par un détecteur local ou qui contiennent un appel dangereux ; le moteur les analyse en mémoire puis les jette. Quand aucun chemin n'est prouvable, le moteur s'abstient.

En quoi est-ce différent de Snyk, Semgrep ou CodeQL ?

Semgrep et Snyk Code partent de règles de motifs ; CodeQL fait du dataflow mais demande d'écrire des requêtes et n'a pas de gate d'isolation tenant. Le moteur ne bloque qu'un chemin prouvé et s'abstient quand il ne peut pas en prouver. La contrepartie, c'est le rappel : sur les propres tests de règles de Semgrep, Semgrep trouve davantage.

GitLab ou Bitbucket sont-ils pris en charge ?

Pas encore pour le Firewall — il est GitHub uniquement (Action, checks, OIDC).

Mettez la preuve dans votre pipeline.

Ajoutez le deep scan (heisen-slop) à vos PR — gratuit sur les repos publics, opt-in sur les repos privés, déterministe, informatif par défaut.

Régulé ou air-gap ? Parlons du moteur dans votre infrastructure →