Verificação de security.txt

Informe um site para ver se ele diz aos pesquisadores de segurança onde relatar um problema, e se esse arquivo está no lugar certo, bem formado e ainda dentro da validade. Se não houver um, você pode escrevê-lo abaixo.

Só o host importa: example.com e shop.example.com têm cada um o seu arquivo.

Ou experimente github.com, cloudflare.com, wikipedia.org

Escrever um security.txt

Preencha o que se aplica e copie o resultado. O arquivo é montado dentro desta página: nada do que você digitar aqui é enviado para nós.

Um endereço de e-mail ou o endereço https:// de um formulário. Use uma caixa compartilhada, não uma pessoa: pessoas vão embora.

Uma página que diz o que pode ser testado e o que quem relata pode esperar de você.

Códigos de idioma separados por vírgulas.

Adiciona uma linha Canonical, que vincula o arquivo ao seu endereço.

Definido para um ano a partir de hoje, o máximo que o padrão recomenda.

  1. Salve o texto como um arquivo chamado security.txt, com codificação UTF-8.
  2. Envie-o para uma pasta chamada .well-known na raiz do site, para que ele responda em https://your-domain/.well-known/security.txt.
  3. Faça a verificação acima: o arquivo precisa voltar por HTTPS como text/plain.
  4. Anote a data de expiração numa agenda. Um arquivo expirado é pior do que nenhum, porque parece abandonado.

Uma porta de entrada para más notícias

Mais cedo ou mais tarde, alguém de fora da sua organização percebe algo errado no seu site: uma página que mostra pedidos de outros clientes, um painel de administração esquecido, uma redefinição de senha que pode ser repetida. A maioria dessas pessoas quer avisar você. O difícil é achar a quem avisar. O formulário de contato vai para o comercial, o chat de suporte pede um número de pedido e ninguém responde o info@.

Um arquivo security.txt resolve esse problema específico. São algumas linhas de texto simples num endereço fixo, /.well-known/security.txt, dizendo para onde vão os relatos e até quando essa informação vale. O formato foi publicado como RFC 9116 em 2022. Scanners, plataformas de bug bounty e agências nacionais de segurança leem o arquivo automaticamente quando têm algo a repassar.

Contact: mailto:security@example.com
Expires: 2027-01-31T00:00:00.000Z
Preferred-Languages: en, de
Canonical: https://example.com/.well-known/security.txt
Policy: https://example.com/security-policy

O que esta verificação lê

Nosso servidor pede https://your-host/.well-known/security.txt e depois o endereço antigo /security.txt na raiz, se o primeiro não devolver nada. Os redirecionamentos são seguidos. Uma resposta com status 200 que acaba sendo uma página HTML conta como ausência de arquivo, já que muitos sites respondem a todo endereço desconhecido com a página inicial.

Quando há um arquivo, nós o avaliamos em três pontos.

ParteO que precisa ser verdade
Como é servidoNo endereço /.well-known/, por HTTPS, com Content-Type: text/plain. Um redirecionamento para outro domínio é apontado.
ContactPelo menos um, cada um sendo uma URI: mailto:, https:// ou tel:. Um endereço de e-mail sozinho, sem mailto:, é um erro.
ExpiresExatamente um, escrito como data e hora completas, por exemplo 2027-01-31T00:00:00.000Z, no futuro. Vencido é um erro; menos de 30 dias restantes ou mais de um ano à frente é um alerta.
Campos opcionaisEncryption, Acknowledgments, Policy, Hiring e CSAF precisam ser endereços https://. Preferred-Languages aparece uma vez e contém códigos de idioma. Canonical precisa incluir o endereço de onde o arquivo foi lido.

Nomes de campos fora do padrão são listados sem penalidade, já que extensões são permitidas. A verificação também diz se o texto está envolto numa assinatura OpenPGP em texto claro. Ela não verifica essa assinatura.

Os erros que mais vemos

Uma data vencida
Alguém escreveu o arquivo uma vez e esqueceu dele. A RFC 9116 diz que um arquivo vencido não deve ser usado, então quem quer relatar volta a ter que adivinhar. Renovar leva dois minutos: confirme os contatos, avance a data, publique.
Nenhum Expires
Arquivos escritos antes de 2022 seguiam um rascunho em que o campo era opcional. Agora ele é obrigatório.
Contact: security@example.com
O valor precisa ser uma URI. Escreva mailto:security@example.com.
O arquivo só na raiz
/security.txt é uma alternativa de reserva. Coloque o arquivo em /.well-known/ e redirecione o endereço antigo para ele.
Um Canonical copiado de outro site
Se o campo existe e não lista o endereço de onde o arquivo é servido, o arquivo contradiz a si mesmo.

Publicar um que você consiga manter vivo

Comece decidindo quem lê a caixa de e-mail. Um endereço compartilhado como security@ que chega a duas pessoas é melhor que uma pessoa nomeada. Depois use o gerador desta página. Ele acrescenta mailto: onde for preciso, formata a data e já a coloca um ano à frente.

Envie o resultado para uma pasta chamada .well-known na raiz do site. A maioria dos servidores envia arquivos .txt como text/plain sem precisar configurar. Se o seu esconde pastas que começam com ponto, adicione uma exceção. No nginx:

location = /.well-known/security.txt {
    default_type text/plain;
    charset utf-8;
}

A assinatura é opcional. Com o GnuPG, gpg --clearsign security.txt produz uma versão assinada para publicar no lugar. Inclua uma linha Canonical antes de assinar para que a assinatura cubra também o endereço.

Esta página lê um host, uma vez. Ela não sabe dizer se alguém responde no endereço de contato, se a política indicada existe ou se a assinatura é autêntica. A falta do arquivo não é uma falha de segurança e não reduz nenhuma nota aqui.

Perguntas frequentes

A falta de um security.txt é uma vulnerabilidade?

Não. O arquivo é uma cortesia que facilita os relatos e não protege nada por si só. Alguns scanners automáticos listam a ausência dele como achado de baixa gravidade. Encare isso como uma sugestão.

Onde exatamente fica o security.txt?

Em https://your-domain/.well-known/security.txt, servido por HTTPS como texto simples. Cada host é separado, então um arquivo em example.com não cobre app.example.com.

Publicar um endereço de contato vai atrair spam ou relatos falsos de bugs?

Espere alguns relatos automáticos de pouco valor, muitas vezes pedindo recompensa. Uma página curta de política que diga o que você considera dentro do escopo, e se paga recompensas, filtra a maioria deles. Apontar o Contact para um formulário web em vez de uma caixa de e-mail também ajuda.

Qual deve ser o prazo da data Expires?

Menos de um ano à frente, como recomenda a RFC. A data é uma promessa de que os contatos estavam corretos quando o arquivo foi revisado pela última vez, e por isso deve ser curta. Crie um lembrete um mês antes do vencimento.

Preciso assinar o arquivo com PGP?

Não. Uma assinatura ajuda o leitor a confirmar que o arquivo não foi alterado num servidor comprometido, e só funciona se a sua chave pública puder ser obtida em outro lugar. Muitos arquivos válidos não são assinados.

Qual é a diferença entre security.txt e robots.txt?

Os dois são arquivos de texto simples num endereço conhecido, lidos por software. O robots.txt diz aos rastreadores quais páginas deixar em paz. O security.txt diz a quem encontrou um problema de segurança como falar com você. Nenhum dos dois impõe nada.