Couverture

Ce que yof couvre, et ce qu'il ne couvre pas

Classe par classe : ce que yof cherche dans votre code, ce que la « Mission automatisée » teste sur une app en marche, et ce que ni l'un ni l'autre ne fait.

Comment lire le tableau

  • Dans le code : des motifs que les règles cherchent dans les fichiers d'un dépôt lié. Une règle trouve un motif et n'exécute pas le code, donc la plupart de ces constats demandent une validation.
  • En direct : des tests sur une app en marche. La « Mission automatisée » est en développement et n'est pas en vente, donc rien de ce qui porte cette mention n'est encore disponible pour les clients.
  • Non couvert : ce que ni l'un ni l'autre ne fait. Un rapport ne se lit jamais comme si ces points avaient été vérifiés.
ClasseDans le codeEn directNon couvert
Injection SQL
  • Du SQL est construit à partir de données de la requête
  • Le texte envoyé à votre app est exécuté dans une requête de base de données En développement
Une saisie qui passe par une autre fonction ou un autre fichier, l'injection stockée (de second ordre) et les défauts internes d'un ORM.
Injection NoSQL
  • Un filtre de base de données prend une valeur directement dans la requête
  • Le texte envoyé à votre app est exécuté dans une requête de base de données En développement
Les langages de requête d'autres bases de documents, et les langages autres que JavaScript et TypeScript.
Injection de commandes
  • Une commande shell est construite à partir de données de la requête
  • Le texte envoyé à votre app est exécuté comme une commande système En développement
Les arguments injectés dans un programme appelé sans shell, et les autres langages.
Injection de gabarit
  • Des données de la requête servent de template
  • Le texte envoyé à votre app est exécuté par son moteur de gabarits En développement
Les gabarits lus dans une base de données, et les moteurs de gabarits qui tournent dans le navigateur.
Évaluation de code
  • Des données de la requête sont exécutées comme du code
Pas de test en directL'évaluation à travers un objet de bac à sable, et les autres langages.
Cross-site scripting
  • Des données de la requête sont écrites dans la page comme HTML
  • Le texte envoyé à votre app revient comme du code vivant dans la page En développement
Les contournements de confiance d'Angular et de Vue, les réglages autoescape des gabarits serveur, les scripts stockés et une preuve dans un vrai navigateur.
Redirection ouverte
  • Une redirection va là où la requête le dit
  • Votre site renvoie les visiteurs vers n'importe quelle adresse du lien Disponible aujourd'hui dans yof attack
Les listes d'adresses permises qui existent et se contournent.
Server-side request forgery
  • Le serveur va chercher une adresse prise dans la requête
  • Votre serveur va chercher n'importe quelle adresse nommée dans la requête En développement
Le DNS rebinding, les redirections qui mènent à l'intérieur, et l'accès aux métadonnées cloud.
Cross-site request forgery
  • Connexion par cookie sans contrôle CSRF dans le code
  • Un cookie de connexion est posé sans httpOnly ou sans sameSite
  • Le cookie de connexion n'a pas tous ses indicateurs de protection Disponible aujourd'hui dans yof attack
  • Un autre site peut faire modifier ses données à un utilisateur connecté En développement
Les frameworks autres que les apps de style Express, un contrôle fait par un proxy, et la protection que les réglages par défaut du navigateur donnent à la route.
Chargement d'objets risqué
  • Des données de la requête sont chargées comme objet
  • Votre app confie le corps d'une requête à un lecteur d'objets non sûr En développement
Java ObjectInputStream, .NET BinaryFormatter et les entités externes XML.
Cryptographie faible
  • Un mot de passe ou un jeton est haché avec un hachage rapide ou cassé
  • Un jeton ou un code est créé avec une fonction aléatoire prévisible
  • Une clé cryptographique est écrite dans le code
  • Le chiffrement utilise le mode ECB
  • La vérification des certificats est désactivée
  • Un jeton de connexion est accepté sans vérifier sa signature
  • Votre app accepte un jeton de connexion qu'elle n'a pas vérifié En développement
  • Les identifiants ou les jetons de connexion sont faciles à deviner En développement
Les longueurs de clés, les versions de protocoles et les certificats du service en marche, la cryptographie maison et les canaux auxiliaires.
Mots de passe dans le code et la config
  • Un mot de passe est écrit dans votre code ou votre configuration
  • Un identifiant et un mot de passe par défaut sont écrits dans le code
  • Une adresse dans votre code contient le mot de passe
Pas de test en directL'historique git des fichiers supprimés, le fait qu'un mot de passe trouvé marche encore, et un mot simple sans chiffre ni symbole.
Téléversement de fichiers
  • Un envoi de fichier garde le nom ou le type fourni par le visiteur
  • Le dossier des envois est servi comme des pages web
  • Un fichier téléversé est renvoyé comme une page que le navigateur exécute En développement
Ce que le service de stockage ou le CDN fait du fichier, un logiciel malveillant dans le fichier, et les limites de taille.
Dockerfile
  • Un secret est écrit dans votre Dockerfile
  • Votre Dockerfile exécute un téléchargement sans le vérifier
  • Votre image de base a dépassé sa fin de vie
  • Votre conteneur lance l'app en root
  • L'image de base de votre conteneur n'a pas de version fixe
  • Votre image de conteneur contient un serveur SSH
  • Votre image de base est fixée par tag, pas par digest
  • Votre Dockerfile installe des paquets sans version fixe
Pas de test en directLes images construites et les paquets du système qu'elles contiennent ne sont pas analysés. La fin de vie n'est connue que pour six images de base officielles.
docker-compose
  • Un service compose tourne avec les privilèges de l'hôte
  • Un service compose peut piloter Docker lui-même
  • Un secret est écrit dans votre fichier compose
Pas de test en directLes conteneurs en marche, et les fichiers env qui ne sont pas dans le dépôt.
Manifestes Kubernetes
  • Un conteneur Kubernetes tourne en mode privilégié
  • Une charge Kubernetes accède à son nœud
  • Un secret est écrit dans un manifeste Kubernetes
  • Un conteneur Kubernetes peut tourner en root
  • Un conteneur Kubernetes peut obtenir plus de privilèges
  • Un conteneur Kubernetes n'a pas de limites de ressources
  • Une image Kubernetes n'a pas de version fixe
Pas de test en directLe cluster en marche, les gabarits Helm non rendus, RBAC, les politiques réseau et d'admission, et les fichiers avec des ancres YAML.
Terraform
  • Une règle de pare-feu ouvre un port d'administration à tout Internet
  • Un bucket de stockage est rendu public dans Terraform
  • Un stockage ou une base de données est créé sans chiffrement
  • Une base de données est joignable depuis Internet dans Terraform
  • Un mot de passe ou une clé est écrit dans vos fichiers Terraform
Pas de test en directLe compte cloud lui-même : ce qui est déployé peut différer des fichiers. Les valeurs venues de variables, de modules ou de fonctions, les autres fournisseurs et les autres types de ressources.

En dehors de toutes les lignes

  • Les images de conteneurs construites et les paquets système qu'elles contiennent ne sont pas analysés.
  • Ces règles lisent des fichiers. Elles ne regardent pas le système en fonctionnement : le cluster, le compte cloud ou le comportement de l'app en ligne.
  • Les données de la requête sont suivies dans une seule fonction ou un seul gestionnaire. Une valeur qui passe d'abord par une autre fonction ou un autre fichier n'est pas suivie.
  • Langages : les règles de syntaxe lisent JavaScript et TypeScript. Python a les formes simples et exactes. PHP, Ruby, Go, Java, Kotlin et C# ont quelques formes d'une seule ligne. Les autres langages ne sont pas lus par ces règles.

Jamais couvert par des vérifications automatiques

  • Les failles de logique métier, comme un prix ou une étape qu'une personne peut contourner.
  • Les faiblesses que personne ne connaît encore (zero-days).
  • Les personnes et les processus : hameçonnage, mots de passe partagés à la main, qui a accès.
  • Tout ce qui sort du périmètre nommé dans ce rapport, et tout changement après sa date.

Ceci n'est pas un test d'intrusion.

Comment yof vérifie

Ce que yof couvre et ne couvre pas, classe par classe