Copertura

Cosa copre yof e cosa no

Classe per classe: cosa cerca yof nel tuo codice, cosa verifica il «Test automatizzato» su un'app in funzione e cosa non fa nessuno dei due.

Come leggere la tabella

  • Nel codice: schemi che le regole cercano nei file di un repository collegato. Una regola trova uno schema e non esegue il codice, quindi la maggior parte di questi risultati richiede una conferma.
  • Dal vivo: test su un'app in funzione. Il «Test automatizzato» è in sviluppo e non è in vendita, quindi nulla con questa indicazione è ancora disponibile per i clienti.
  • Non coperto: ciò che non fa nessuno dei due. Un report non si legge mai come se questi punti fossero stati controllati.
ClasseNel codiceDal vivoNon coperto
SQL injection
  • Il testo SQL è costruito con dati della richiesta
  • Il testo inviato alla tua app viene eseguito come parte di una query al database In sviluppo
I dati che passano per un'altra funzione o un altro file, l'iniezione memorizzata (di secondo ordine) e i difetti interni di un ORM.
NoSQL injection
  • Un filtro del database prende un valore direttamente dalla richiesta
  • Il testo inviato alla tua app viene eseguito come parte di una query al database In sviluppo
I linguaggi di query di altri database a documenti, e i linguaggi diversi da JavaScript e TypeScript.
Iniezione di comandi
  • Un comando shell è costruito con dati della richiesta
  • Il testo inviato alla tua app viene eseguito come comando di sistema In sviluppo
Gli argomenti iniettati in un programma chiamato senza shell, e gli altri linguaggi.
Iniezione nei template
  • Dati della richiesta sono usati come template
  • Il testo inviato alla tua app viene eseguito dal motore dei template In sviluppo
I template letti da un database, e i motori di template che girano nel browser.
Valutazione di codice
  • Dati della richiesta sono eseguiti come codice
Nessun test dal vivoLa valutazione attraverso un oggetto isolato, e gli altri linguaggi.
Cross-site scripting
  • Dati della richiesta sono scritti nella pagina come HTML
  • Il testo inviato alla tua app torna come markup vivo della pagina In sviluppo
Gli aggiramenti della fiducia di Angular e Vue, le impostazioni autoescape dei template del server, gli script memorizzati e una prova in un browser vero.
Reindirizzamento aperto
  • Un reindirizzamento va dove dice la richiesta
  • Il tuo sito manda i visitatori a qualsiasi indirizzo nel link Disponibile oggi in yof attack
Gli elenchi di indirizzi ammessi che esistono e si possono aggirare.
Server-side request forgery
  • Il server scarica un indirizzo preso dalla richiesta
  • Il tuo server raggiunge qualsiasi indirizzo indicato da una richiesta In sviluppo
Il DNS rebinding, i reindirizzamenti che portano all'interno, e la raggiungibilità dei metadati cloud.
Cross-site request forgery
  • Accesso tramite cookie senza controllo CSRF nel codice
  • Un cookie di accesso è impostato senza httpOnly o senza sameSite
  • Al cookie di accesso manca un flag di protezione Disponibile oggi in yof attack
  • Un altro sito può far cambiare i dati a un utente connesso In sviluppo
I framework diversi dalle app in stile Express, un controllo fatto da un proxy, e se le impostazioni predefinite del browser proteggono la route.
Caricamento di oggetti a rischio
  • Dati della richiesta sono caricati come oggetto
  • La tua app passa il corpo di una richiesta a un lettore di oggetti non sicuro In sviluppo
Java ObjectInputStream, .NET BinaryFormatter e le entità esterne XML.
Crittografia debole
  • Una password o un token è salvato con un hash veloce o violato
  • Un token o un codice è generato con una funzione casuale prevedibile
  • Una chiave crittografica è scritta nel codice
  • La cifratura usa la modalità ECB
  • Il controllo dei certificati è disattivato
  • Un token di accesso è accettato senza controllare la firma
  • La tua app accetta un token di accesso che non ha mai verificato In sviluppo
  • Gli id o i token di accesso sono facili da indovinare In sviluppo
Lunghezze delle chiavi, versioni dei protocolli e certificati del servizio in funzione, crittografia fatta in casa e canali laterali.
Password nel codice e nella configurazione
  • Una password è scritta nel tuo codice o nella configurazione
  • Un nome utente e una password predefiniti sono scritti nel codice
  • Un indirizzo nel tuo codice contiene la password
Nessun test dal vivoLa cronologia git dei file che non ci sono più, se una password trovata funziona ancora, e una sola parola comune senza cifra né simbolo.
Caricamento di file
  • Un caricamento mantiene il nome o il tipo di file inviato dal visitatore
  • La cartella dei caricamenti è servita come pagine web
  • Un file caricato viene servito come una pagina che il browser esegue In sviluppo
Ciò che il servizio di archiviazione o la CDN fa con il file, malware nel file caricato e limiti di dimensione.
Dockerfile
  • Un segreto è scritto nel tuo Dockerfile
  • Il tuo Dockerfile esegue un download senza controllarlo
  • La tua immagine base ha superato la fine del supporto
  • Il tuo container esegue l'app come root
  • L'immagine di base del tuo container non ha una versione fissa
  • La tua immagine del container include un server SSH
  • La tua immagine base è fissata per tag, non per digest
  • Il tuo Dockerfile installa pacchetti senza versione fissa
Nessun test dal vivoLe immagini costruite e i pacchetti del sistema operativo al loro interno non vengono analizzati. La fine del supporto è nota solo per sei immagini di base ufficiali.
docker-compose
  • Un servizio compose gira con i privilegi dell'host
  • Un servizio compose può controllare Docker stesso
  • Un segreto è scritto nel tuo file compose
Nessun test dal vivoI container in funzione, e i file env che non sono nel repository.
Manifest Kubernetes
  • Un container Kubernetes gira come privilegiato
  • Un carico Kubernetes accede al suo nodo
  • Un segreto è scritto in un manifest Kubernetes
  • Un container Kubernetes può girare come root
  • Un container Kubernetes può ottenere più privilegi
  • Un container Kubernetes non ha limiti di risorse
  • Un'immagine Kubernetes non ha una versione fissa
Nessun test dal vivoIl cluster in funzione, i template Helm non renderizzati, RBAC, le policy di rete e di admission, e i file con ancore YAML.
Terraform
  • Una regola del firewall apre una porta di amministrazione a tutta internet
  • Un bucket di archiviazione è reso pubblico in Terraform
  • Uno storage o un database è creato senza cifratura
  • Un database è raggiungibile da internet in Terraform
  • Una password o una chiave è scritta nei tuoi file Terraform
Nessun test dal vivoL'account cloud stesso: ciò che è distribuito può differire dai file. I valori che arrivano da variabili, moduli o funzioni, gli altri provider e gli altri tipi di risorsa.

Fuori da ogni riga

  • Le immagini dei container costruite e i pacchetti di sistema al loro interno non vengono analizzati.
  • Queste regole leggono file. Non guardano il sistema in funzione: il cluster, l'account cloud o il comportamento dell'app in produzione.
  • I dati della richiesta sono seguiti solo dentro una funzione o un handler. Un valore che passa prima per un'altra funzione o un altro file non viene seguito.
  • Linguaggi: le regole di sintassi leggono JavaScript e TypeScript. Python ha le forme semplici ed esatte. PHP, Ruby, Go, Java, Kotlin e C# hanno alcune forme su una sola riga. Queste regole non leggono altri linguaggi.

Mai coperto dai controlli automatici

  • Difetti nella logica di business, come un prezzo o un passaggio che qualcuno può saltare.
  • Debolezze che nessuno conosce ancora (zero-day).
  • Persone e processi: phishing, password condivise a mano, chi ha accesso.
  • Tutto ciò che è fuori dal perimetro indicato in questo rapporto, e ogni modifica dopo la sua data.

Questo non è un penetration test.

Come controlla yof

Cosa copre yof e cosa no, classe per classe