Cobertura

O que o yof cobre e o que não cobre

Classe a classe: o que o yof procura no seu código, o que o «Teste automatizado» testa numa app em funcionamento e o que nenhum dos dois faz.

Como ler a tabela

  • No código: padrões que as regras procuram nos ficheiros de um repositório ligado. Uma regra encontra um padrão e não executa o código, por isso a maior parte destes achados precisa de validação.
  • Ao vivo: testes sobre uma app em funcionamento. O «Teste automatizado» está em desenvolvimento e não está à venda, por isso nada com esta marca está ainda disponível para os clientes.
  • Não coberto: o que nenhum dos dois faz. Um relatório nunca se lê como se isto tivesse sido verificado.
ClasseNo códigoAo vivoNão coberto
Injeção de SQL
  • É construído SQL com dados do pedido
  • O texto enviado à sua app é executado como parte de uma consulta à base de dados Em desenvolvimento
Dados que passam por outra função ou outro ficheiro, a injeção armazenada (de segunda ordem) e as falhas internas de um ORM.
Injeção de NoSQL
  • Um filtro da base de dados recebe um valor diretamente do pedido
  • O texto enviado à sua app é executado como parte de uma consulta à base de dados Em desenvolvimento
As linguagens de consulta de outras bases de dados de documentos, e as linguagens que não são JavaScript nem TypeScript.
Injeção de comandos
  • É construído um comando de shell com dados do pedido
  • O texto enviado à sua app é executado como um comando do sistema Em desenvolvimento
Argumentos injetados num programa chamado sem shell, e outras linguagens.
Injeção em modelos
  • Dados do pedido são usados como template
  • O texto enviado à sua app é executado pelo seu motor de modelos Em desenvolvimento
Modelos lidos de uma base de dados, e motores de modelos que correm no browser.
Avaliação de código
  • Dados do pedido são executados como código
Sem teste ao vivoA avaliação através de um objeto isolado, e outras linguagens.
Cross-site scripting
  • Dados do pedido são escritos na página como HTML
  • O texto enviado à sua app volta como marcação viva da página Em desenvolvimento
Os contornos de confiança do Angular e do Vue, as definições de autoescape dos modelos do servidor, os scripts armazenados e uma prova num browser real.
Redirecionamento aberto
  • Um redirecionamento vai para onde o pedido disser
  • O seu site reencaminha visitantes para qualquer endereço do link Disponível hoje no yof attack
Listas de endereços permitidos que existem e podem ser contornadas.
Server-side request forgery
  • O servidor vai buscar um endereço tirado do pedido
  • O seu servidor acede a qualquer endereço indicado no pedido Em desenvolvimento
DNS rebinding, redirecionamentos que levam para dentro, e se é possível chegar aos metadados da cloud.
Cross-site request forgery
  • Início de sessão por cookie sem verificação CSRF no código
  • Um cookie de início de sessão é criado sem httpOnly ou sem sameSite
  • Falta uma marca de proteção ao cookie de sessão Disponível hoje no yof attack
  • Outro site pode fazer um utilizador com sessão alterar os seus dados Em desenvolvimento
Frameworks que não são apps ao estilo Express, uma verificação feita por um proxy, e se as predefinições do browser protegem a rota.
Carregamento de objetos com risco
  • Dados do pedido são carregados como objeto
  • A sua app entrega o corpo de um pedido a um leitor de objetos inseguro Em desenvolvimento
Java ObjectInputStream, .NET BinaryFormatter e as entidades externas de XML.
Criptografia fraca
  • Uma palavra-passe ou um token é guardado com um hash rápido ou quebrado
  • Um token ou código é gerado com uma função aleatória previsível
  • Há uma chave criptográfica escrita no código
  • A cifragem usa o modo ECB
  • A verificação de certificados está desligada
  • Um token de início de sessão é aceite sem verificar a assinatura
  • A sua app aceita um token de sessão que nunca verificou Em desenvolvimento
  • Os ids ou os tokens de sessão são fáceis de adivinhar Em desenvolvimento
Comprimentos de chave, versões de protocolo e certificados do serviço em funcionamento, criptografia própria e canais laterais.
Palavras-passe no código e na configuração
  • Há uma palavra-passe escrita no seu código ou na configuração
  • Há um utilizador e uma palavra-passe predefinidos escritos no código
  • Um endereço no seu código tem a palavra-passe dentro
Sem teste ao vivoO histórico do git de ficheiros que já não existem, se uma palavra-passe encontrada ainda funciona, e uma só palavra comum sem dígito nem símbolo.
Carregamento de ficheiros
  • Um carregamento mantém o nome ou o tipo de ficheiro que o visitante enviou
  • A pasta de carregamentos é servida como páginas web
  • Um ficheiro enviado é servido como uma página que o navegador executa Em desenvolvimento
O que o serviço de armazenamento ou a CDN faz com o ficheiro, malware no carregamento e limites de tamanho.
Dockerfile
  • Há um segredo escrito no seu Dockerfile
  • O seu Dockerfile executa uma transferência sem a verificar
  • A sua imagem base passou o fim de vida
  • O seu contentor corre a app como root
  • A imagem base do seu contentor não tem versão fixa
  • A sua imagem de contentor inclui um servidor SSH
  • A sua imagem base está fixada por tag, não por digest
  • O seu Dockerfile instala pacotes sem versão fixa
Sem teste ao vivoAs imagens construídas e os pacotes do sistema operativo dentro delas não são analisados. O fim de suporte só é conhecido para seis imagens base oficiais.
docker-compose
  • Um serviço do compose corre com os privilégios do host
  • Um serviço do compose pode controlar o próprio Docker
  • Há um segredo escrito no seu ficheiro compose
Sem teste ao vivoOs contentores em funcionamento, e os ficheiros env que não estão no repositório.
Manifestos de Kubernetes
  • Um contentor Kubernetes corre como privilegiado
  • Uma carga Kubernetes acede ao seu nó
  • Há um segredo escrito num manifesto Kubernetes
  • Um contentor Kubernetes pode correr como root
  • Um contentor Kubernetes pode ganhar mais privilégios
  • Um contentor Kubernetes não tem limites de recursos
  • Uma imagem Kubernetes não tem versão fixa
Sem teste ao vivoO cluster em funcionamento, os modelos de Helm não renderizados, RBAC, as políticas de rede e de admissão, e os ficheiros com âncoras YAML.
Terraform
  • Uma regra de firewall abre uma porta de administração a toda a internet
  • Um bucket de armazenamento é tornado público no Terraform
  • É criado armazenamento ou uma base de dados sem cifragem
  • Uma base de dados é acessível a partir da internet no Terraform
  • Há uma palavra-passe ou uma chave escrita nos seus ficheiros Terraform
Sem teste ao vivoA própria conta na cloud: o que está implementado pode diferir dos ficheiros. Valores vindos de variáveis, módulos ou funções, outros fornecedores e outros tipos de recurso.

Fora de todas as linhas

  • As imagens de contentor construídas e os pacotes do sistema operativo dentro delas não são analisados.
  • Estas regras leem ficheiros. Não olham para o sistema em funcionamento: o cluster, a conta na cloud ou o comportamento da app em produção.
  • Os dados do pedido são seguidos apenas dentro de uma função ou de um handler. Um valor que passa primeiro por outra função ou outro ficheiro não é seguido.
  • Linguagens: as regras de sintaxe leem JavaScript e TypeScript. O Python tem as formas simples e exatas. PHP, Ruby, Go, Java, Kotlin e C# têm algumas formas de uma só linha. Estas regras não leem outras linguagens.

Nunca coberto por verificações automáticas

  • Falhas na lógica de negócio, como um preço ou uma etapa que alguém consegue pular.
  • Fraquezas que ninguém conhece ainda (zero-days).
  • Pessoas e processos: phishing, senhas compartilhadas à mão, quem tem acesso.
  • Tudo fora do escopo citado neste relatório, e qualquer mudança depois da sua data.

Isto não é um teste de intrusão.

Como o yof verifica

O que o yof cobre e o que não cobre, classe a classe