Abdeckung

Was yof abdeckt und was nicht

Klasse für Klasse: wonach yof in deinem Code sucht, was der „Automatisierter Testlauf“ an einer laufenden App testet und was keines von beiden tut.

So liest du die Tabelle

  • Im Code: Muster, nach denen die Regeln in den Dateien eines verknüpften Repositorys suchen. Eine Regel findet ein Muster und führt den Code nicht aus, deshalb müssen die meisten dieser Funde bestätigt werden.
  • Live: Tests an einer laufenden App. Der „Automatisierter Testlauf“ ist in Entwicklung und nicht im Verkauf, also ist nichts mit dieser Markierung schon für Kunden verfügbar.
  • Nicht abgedeckt: was keines von beiden tut. Ein Bericht liest sich nie so, als wäre das geprüft worden.
KlasseIm CodeLiveNicht abgedeckt
SQL-Injection
  • SQL-Text wird aus Anfragedaten zusammengebaut
  • An Ihre App gesendeter Text wird als Teil einer Datenbankabfrage ausgeführt In Entwicklung
Eingaben, die durch eine andere Funktion oder Datei laufen, gespeicherte Injection (zweiter Ordnung) und Fehler in einem ORM.
NoSQL-Injection
  • Ein Datenbankfilter übernimmt einen Wert direkt aus der Anfrage
  • An Ihre App gesendeter Text wird als Teil einer Datenbankabfrage ausgeführt In Entwicklung
Abfragesprachen anderer Dokumentdatenbanken und andere Sprachen als JavaScript und TypeScript.
Command-Injection
  • Ein Shell-Befehl wird aus Anfragedaten zusammengebaut
  • An Ihre App gesendeter Text wird als Systembefehl ausgeführt In Entwicklung
Argumente, die in ein ohne Shell aufgerufenes Programm eingeschleust werden, und andere Sprachen.
Template-Injection
  • Anfragedaten werden als Template verwendet
  • An Ihre App gesendeter Text wird von der Template-Engine ausgeführt In Entwicklung
Templates, die aus einer Datenbank gelesen werden, und Template-Engines, die im Browser laufen.
Code-Auswertung
  • Anfragedaten werden als Code ausgeführt
Kein Live-TestAuswertung über ein Sandbox-Objekt und andere Sprachen.
Cross-Site-Scripting
  • Anfragedaten werden als HTML in die Seite geschrieben
  • An Ihre App gesendeter Text kommt als lebendiges Seitenmarkup zurück In Entwicklung
Trust-Bypässe von Angular und Vue, Autoescape-Einstellungen von Server-Templates, gespeicherte Skripte und ein Nachweis in einem echten Browser.
Offene Weiterleitung
  • Eine Weiterleitung führt dorthin, wohin die Anfrage es sagt
  • Ihre Seite leitet Besucher an jede Adresse im Link weiter Heute verfügbar in yof attack
Listen erlaubter Adressen, die es gibt und die sich umgehen lassen.
Server-Side Request Forgery
  • Der Server ruft eine Adresse aus der Anfrage ab
  • Ihr Server ruft jede Adresse ab, die eine Anfrage nennt In Entwicklung
DNS-Rebinding, Weiterleitungen, die nach innen führen, und die Erreichbarkeit von Cloud-Metadaten.
Cross-Site Request Forgery
  • Anmeldung per Cookie ohne CSRF-Prüfung im Code
  • Ein Anmelde-Cookie wird ohne httpOnly oder sameSite gesetzt
  • Dem Anmelde-Cookie fehlt ein Schutz-Flag Heute verfügbar in yof attack
  • Eine andere Website kann einen angemeldeten Nutzer seine Daten ändern lassen In Entwicklung
Andere Frameworks als Apps im Express-Stil, eine Prüfung durch einen Proxy und ob die Standardeinstellungen des Browsers die Route schützen.
Riskantes Laden von Objekten
  • Anfragedaten werden als Objekt geladen
  • Ihre App gibt einen Anfragekörper an einen unsicheren Objektleser In Entwicklung
Java ObjectInputStream, .NET BinaryFormatter und externe XML-Entitäten.
Schwache Kryptografie
  • Ein Passwort oder Token wird mit einem schnellen oder gebrochenen Hash gehasht
  • Ein Token oder Code entsteht mit einer vorhersagbaren Zufallsfunktion
  • Ein kryptografischer Schlüssel steht im Code
  • Die Verschlüsselung nutzt den ECB-Modus
  • Die Zertifikatsprüfung ist abgeschaltet
  • Ein Anmelde-Token wird ohne Prüfung der Signatur akzeptiert
  • Ihre App akzeptiert ein Anmelde-Token, das sie nie geprüft hat In Entwicklung
  • Ids oder Anmelde-Token sind leicht zu erraten In Entwicklung
Schlüssellängen, Protokollversionen und Zertifikate des laufenden Dienstes, eigene Kryptografie und Seitenkanäle.
Passwörter in Code und Konfiguration
  • Ein Passwort steht in Ihrem Code oder Ihrer Konfiguration
  • Ein Standard-Benutzername mit Standard-Passwort steht im Code
  • Eine Adresse in Ihrem Code enthält das Passwort
Kein Live-TestDie Git-Historie gelöschter Dateien, ob ein gefundenes Passwort noch funktioniert, und ein einzelnes einfaches Wort ohne Ziffer und Symbol.
Datei-Uploads
  • Ein Upload behält den Dateinamen oder Typ, den der Besucher gesendet hat
  • Der Upload-Ordner wird als Webseiten ausgeliefert
  • Eine hochgeladene Datei wird als Seite ausgeliefert, die ein Browser ausführt In Entwicklung
Was der Speicherdienst oder das CDN mit der Datei macht, Schadsoftware im Upload und Größenlimits.
Dockerfile
  • Ein Geheimnis steht in Ihrem Dockerfile
  • Ihr Dockerfile führt einen Download ungeprüft aus
  • Ihr Basis-Image hat sein Lebensende überschritten
  • Ihr Container startet die App als root
  • Das Basis-Image Ihres Containers hat keine feste Version
  • Ihr Container-Image enthält einen SSH-Server
  • Ihr Basis-Image ist per Tag festgelegt, nicht per Digest
  • Ihr Dockerfile installiert Pakete ohne feste Versionen
Kein Live-TestGebaute Images und die Betriebssystempakete darin werden nicht gescannt. Das Support-Ende ist nur für sechs offizielle Basis-Images bekannt.
docker-compose
  • Ein Compose-Dienst läuft mit den Rechten des Hosts
  • Ein Compose-Dienst kann Docker selbst steuern
  • Ein Geheimnis steht in Ihrer Compose-Datei
Kein Live-TestDie laufenden Container und env-Dateien, die nicht im Repository liegen.
Kubernetes-Manifeste
  • Ein Kubernetes-Container läuft privilegiert
  • Eine Kubernetes-Workload greift auf ihren Node zu
  • Ein Geheimnis steht in einem Kubernetes-Manifest
  • Ein Kubernetes-Container darf als root laufen
  • Ein Kubernetes-Container darf mehr Rechte erlangen
  • Ein Kubernetes-Container hat keine Ressourcengrenzen
  • Ein Kubernetes-Image hat keine feste Version
Kein Live-TestDer laufende Cluster, nicht gerenderte Helm-Templates, RBAC, Netzwerk- und Admission-Richtlinien und Dateien mit YAML-Ankern.
Terraform
  • Eine Firewall-Regel öffnet einen Admin-Port für das ganze Internet
  • Ein Storage-Bucket wird in Terraform öffentlich gemacht
  • Speicher oder eine Datenbank wird ohne Verschlüsselung angelegt
  • Eine Datenbank ist in Terraform aus dem Internet erreichbar
  • Ein Passwort oder Schlüssel steht in Ihren Terraform-Dateien
Kein Live-TestDas Cloud-Konto selbst: Was bereitgestellt ist, kann von den Dateien abweichen. Werte aus Variablen, Modulen oder Funktionen, andere Anbieter und andere Ressourcentypen.

Außerhalb jeder Zeile

  • Gebaute Container-Images und die Betriebssystem-Pakete darin werden nicht gescannt.
  • Diese Regeln lesen Dateien. Das laufende System sehen sie nicht an: den Cluster, das Cloud-Konto oder das Verhalten der laufenden App.
  • Anfragedaten werden nur innerhalb einer Funktion oder eines Handlers verfolgt. Ein Wert, der zuerst durch eine andere Funktion oder Datei geht, wird nicht verfolgt.
  • Sprachen: Die Syntaxregeln lesen JavaScript und TypeScript. Für Python gibt es die einfachen, exakten Formen. Für PHP, Ruby, Go, Java, Kotlin und C# gibt es einige einzeilige Formen. Andere Sprachen lesen diese Regeln nicht.

Von automatischen Prüfungen nie abgedeckt

  • Fehler in der Geschäftslogik, etwa ein Preis oder ein Schritt, den jemand überspringen kann.
  • Schwachstellen, die noch niemand kennt (Zero-Days).
  • Menschen und Abläufe: Phishing, von Hand geteilte Passwörter, wer Zugriff hat.
  • Alles außerhalb des in diesem Bericht genannten Umfangs und jede Änderung nach seinem Datum.

Dies ist kein Penetrationstest.

Wie yof prüft

Was yof abdeckt und was nicht, Klasse für Klasse