security.txt
Kennt ihr noch die Datei robots.txt
, die auf verschiedenen Webseiten hinterlegt sind? Dahinter stand der Robots Exclusion Standard und die verschiedenen Bots sollen zuerst die Seite ausweren, bevor sie eine Webpräsenz indexieren. Daneben entstand auch die Idee für eine humans.txt
und mit dem “Erschaffen” des .well-known
-Verzeichnisses auf dem Webserver gibt es eine ganze Reihe Dateiformate zur Information oder für andere Zwecke.
Seit April 2022 gibt es nun den RFC 9116 für die Datei security.txt
. Diese soll anderen helfen, Sicherheitslücken an die richtige Stelle zu melden. Denn oftmals steht das Problem, dass eine Schwachstelle gefunden wurde und es vielleicht unklar ist, wohin diese zu melden ist.
Mail wäre natürlich eine mögliche Wahl. Im besten Fall existiert sogar eine E-Mail-Adresse namens security@
. Aber sehr häufig ist dies nicht der Fall. Mails an info@
oder ähnliche Adressen landen eher im Nirwana oder werden mit Standardtextbausteinen beantwortet. Daher ist ein gezielter, standardisierter Weg gut.
Der RFC 9116 definiert hierfür eben die Datei security.txt
, die im Unterordner .well-known
einer Webpräsenz liegen muss. Die Datei selbst muss über HTTPS erreichbar sein. Ein korrekter Pfad wäre also https://example.com/.well-known/security.txt
.
Doch was darf da drin stehen? Naheliegend sind Kontaktinformationen. Spezieller Informationen, an die man Informationen zu Schwachstellen melden kann. Hierfür ist der Eintrag Contact:
gedacht. Dieser muss in der Datei enthalten sein und sollte die Kontaktmöglichkeiten in absteigender Reihenfolge enthalten. Daneben benötigt die Datei zwingend ein Ablaufdatum. Eine Minimalversion der Datei kann also so aussehen:
Contact: mailto:security@example.com Expires: 2023-05-01T12:13:24+02:00
Weiterhin könnt ihr in der Datei Informationen zu einer Policy hinterlegen, welche Sprachen ihr sprecht, ob ihr Leute einstellt, wer in der Vergangenheit Lücken meldete und einen Verweis zu einem Schlüssel machen. Eine erweiterte Version der Datei sähe also so aus:
Contact: mailto:security@example.com Contact: +49-123-456-7890 Contact: https://example.com/meldeformular.html Policy: https://example.com/security-policy.html Preferred-Languages: de, en Acknowledgments: https://example.com/hall-of-fame.html Encryption: https://example.com/pgp-key.txt Expires: 2023-05-01T12:13:24+02:00
Hier sind mehrere Kontaktmöglichkeiten genannt. Es gibt eine Policy. Die Leute sprechen Deutsch und Englisch und ihr bekommt Infos über andere, die etwas gemeldet haben. Am Schluss findet sich auch ein PGP-Schlüssel. Optimalweise würde der über Web Key Discovery bereit gestellt. Aber das ist ein Thema für einen anderen Beitrag.
Schließlich könnt ihr den Eintrag auch noch mittels OpenPGP signieren. Dann sähe meine obige Datei so aus:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Contact: mailto:security@example.com Contact: +49-123-456-7890 Contact: https://example.com/meldeformular.html Policy: https://example.com/security-policy.html Preferred-Languages: de, en Acknowledgments: https://example.com/hall-of-fame.html Encryption: https://example.com/pgp-key.txt Expires: 2023-05-01T12:13:24+02:00 -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.2.19 [Viele Zeichen, die gpg auswerten kann] -----END PGP SIGNATURE-----
Wenn ihr also eine Schwachstelle gefunden habt, dann lohnt es sich nach der Datei zu schauen und die dort genannten Kontakte anzusprechen. Ich habe mal ein wenig gegraben. Bei den großen, bekannten Seiten, wie Google, Facebook, Twitter, GitHub usw., fand ich jeweils eine solche Datei. Seiten aus dem Microsoft-Universum wie auch viele chinesische Seiten haben keinerlei solche Informationen.
Ansonsten ist das Bild recht gemischt. Während beispielsweise Facebook und WhatsApp eine security.txt anbieten, hat Instagram keine, obwohl alle zum selben Konzern gehören.
Unter andere namhaften Seiten fand ich nichts bei
- Wikipedia
- Zoom
- Netflix
- Stackoverflow
- Apple
- und weiteren
Hier ist also noch ein wenig Arbeit zu tun. Wenn die Datei auch bei euch oder eurem Arbeigeber fehlt, sprecht die doch an und bittet die, diese Informationen bereitzustellen (und natürlich bei Bedarf zu aktualisieren).
Siehe auch:
Update: Ich hatte übersehen, dass das Expires:
-Feld auch ein Pflichtfeld ist und habe die obige Beschreibung ergänzt. Vielen Dank an Jürgen für den Hinweis!