This document defines a text file to be placed in a known location that provides information about vulnerability disclosure practices of a particular organization. The format of this file is machine parsable and
MUST follow the ABNF grammar defined in
Section 4. This file is intended to help security researchers when disclosing security vulnerabilities.
By convention, the file is named "security.txt". The location and scope are described in
Section 3.
This text file contains multiple fields with different values. A field contains a "name", which is the first part of a field all the way up to the colon (for example: "Contact:") and follows the syntax defined for "field-name" in
Section 3.6.8 of
RFC 5322. Field names are case insensitive (as per
Section 2.3 of
RFC 5234). The "value" comes after the field name (for example: "mailto:security@example.com") and follows the syntax defined for "unstructured" in
Section 3.2.5 of
RFC 5322. The file
MAY also contain blank lines.
A field
MUST always consist of a name and a value (for example: "Contact: mailto:security@example.com"). A "security.txt" file can have an unlimited number of fields. Each field
MUST appear on its own line. Unless otherwise specified by the field definition, multiple values
MUST NOT be chained together for a single field. Unless otherwise indicated in a definition of a particular field, a field
MAY appear multiple times.
Implementors should be aware that some of the fields may contain URIs using percent-encoding (as per
Section 2.1 of
RFC 3986).
Any line beginning with the "#" (%x23) symbol
MUST be interpreted as a comment. The content of the comment may contain any ASCII or Unicode characters in the %x21-7E and %x80-FFFFF ranges plus the tab (%x09) and space (%x20) characters.
Example:
Every line
MUST end with either a carriage return and line feed characters (CRLF / %x0D %x0A) or just a line feed character (LF / %x0A).
It is
RECOMMENDED that a "security.txt" file be digitally signed using an OpenPGP cleartext signature as described in
Section 7 of
RFC 4880. When digital signatures are used, it is also
RECOMMENDED that organizations use the "Canonical" field (as per
Section 2.5.2), thus allowing the digital signature to authenticate the location of the file.
When it comes to verifying the key used to generate the signature, it is always the security researcher's responsibility to make sure the key being used is indeed one they trust.
Like many other formats and protocols, this format may need to be changed over time to fit the ever-changing landscape of the Internet. Therefore, extensibility is provided via an IANA registry for fields as defined in
Section 6.2. Any fields registered via that process
MUST be considered optional. To encourage extensibility and interoperability, researchers
MUST ignore any fields they do not explicitly support.
In general, implementors should "be conservative in what you do, be liberal in what you accept from others" (as per [
RFC 0793]).
Unless otherwise stated, all fields
MUST be considered optional.
The "Acknowledgments" field indicates a link to a page where security researchers are recognized for their reports. The page being referenced should list security researchers that reported security vulnerabilities and collaborated to remediate them. Organizations should be careful to limit the vulnerability information being published in order to prevent future attacks.
If this field indicates a web URI, then it
MUST begin with "https://" (as per
Section 2.7.2 of
RFC 7230).
Example:
Acknowledgments: https://example.com/hall-of-fame.html
Example security acknowledgments page:
We would like to thank the following researchers:
(2017-04-15) Frank Denis - Reflected cross-site scripting
(2017-01-02) Alice Quinn - SQL injection
(2016-12-24) John Buchner - Stored cross-site scripting
(2016-06-10) Anna Richmond - A server configuration issue
The "Canonical" field indicates the canonical URIs where the "security.txt" file is located, which is usually something like "https://example.com/.well-known/security.txt". If this field indicates a web URI, then it
MUST begin with "https://" (as per
Section 2.7.2 of
RFC 7230).
While this field indicates that a "security.txt" retrieved from a given URI is intended to apply to that URI, it
MUST NOT be interpreted to apply to all canonical URIs listed within the file. Researchers
SHOULD use an additional trust mechanism such as a digital signature (as per
Section 2.3) to make the determination that a particular canonical URI is applicable.
If this field appears within a "security.txt" file and the URI used to retrieve that file is not listed within any canonical fields, then the contents of the file
SHOULD NOT be trusted.
Canonical: https://www.example.com/.well-known/security.txt
Canonical: https://someserver.example.com/.well-known/security.txt
The "Contact" field indicates a method that researchers should use for reporting security vulnerabilities such as an email address, a phone number, and/or a web page with contact information. This field
MUST always be present in a "security.txt" file. If this field indicates a web URI, then it
MUST begin with "https://" (as per
Section 2.7.2 of
RFC 7230). Security email addresses should use the conventions defined in
Section 4 of
RFC 2142.
The value
MUST follow the URI syntax described in
Section 3 of
RFC 3986. This means that "mailto" and "tel" URI schemes must be used when specifying email addresses and telephone numbers, as defined in [
RFC 6068] and [
RFC 3966]. When the value of this field is an email address, it is
RECOMMENDED that encryption be used (as per
Section 2.5.4).
These
SHOULD be listed in order of preference, with the first occurrence being the preferred method of contact, the second occurrence being the second most preferred method of contact, etc. In the example below, the first email address ("security@example.com") is the preferred method of contact.
Contact: mailto:security@example.com
Contact: mailto:security%2Buri%2Bencoded@example.com
Contact: tel:+1-201-555-0123
Contact: https://example.com/security-contact.html
The "Encryption" field indicates an encryption key that security researchers should use for encrypted communication. Keys
MUST NOT appear in this field. Instead, the value of this field
MUST be a URI pointing to a location where the key can be retrieved. If this field indicates a web URI, then it
MUST begin with "https://" (as per
Section 2.7.2 of
RFC 7230).
When it comes to verifying the authenticity of the key, it is always the security researcher's responsibility to make sure the key being specified is indeed one they trust. Researchers must not assume that this key is used to generate the digital signature referenced in
Section 2.3.
Example of an OpenPGP key available from a web server:
Encryption: https://example.com/pgp-key.txt
Example of an OpenPGP key available from an OPENPGPKEY DNS record:
Encryption: dns:5d2d37ab76d47d36._openpgpkey.example.com?type=OPENPGPKEY
Example of an OpenPGP key being referenced by its fingerprint:
Encryption: openpgp4fpr:5f2de5521c63a801ab59ccb603d49de44b29100f
The "Expires" field indicates the date and time after which the data contained in the "security.txt" file is considered stale and should not be used (as per
Section 5.3). The value of this field is formatted according to the Internet profiles of [
ISO.8601-1] and [
ISO.8601-2] as defined in [
RFC 3339]. It is
RECOMMENDED that the value of this field be less than a year into the future to avoid staleness.
This field
MUST always be present and
MUST NOT appear more than once.
Expires: 2021-12-31T18:37:07z
The "Hiring" field is used for linking to the vendor's security-related job positions. If this field indicates a web URI, then it
MUST begin with "https://" (as per
Section 2.7.2 of
RFC 7230).
Hiring: https://example.com/jobs.html
The "Policy" field indicates a link to where the vulnerability disclosure policy is located. This can help security researchers understand the organization's vulnerability reporting practices. If this field indicates a web URI, then it
MUST begin with "https://" (as per
Section 2.7.2 of
RFC 7230).
Example:
Policy: https://example.com/disclosure-policy.html
The "Preferred-Languages" field can be used to indicate a set of natural languages that are preferred when submitting security reports. This set
MAY list multiple values, separated by commas. If this field is included, then at least one value
MUST be listed. The values within this set are language tags (as defined in [
RFC 5646]). If this field is absent, security researchers may assume that English is the language to be used (as per
Section 4.5 of
RFC 2277).
The order in which they appear is not an indication of priority; the listed languages are intended to have equal priority.
This field
MUST NOT appear more than once.
Example (English, Spanish and French):
Preferred-Languages: en, es, fr
# Our security address
Contact: mailto:security@example.com
# Our OpenPGP key
Encryption: https://example.com/pgp-key.txt
# Our security policy
Policy: https://example.com/security-policy.html
# Our security acknowledgments page
Acknowledgments: https://example.com/hall-of-fame.html
Expires: 2021-12-31T18:37:07z
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
# Canonical URI
Canonical: https://example.com/.well-known/security.txt
# Our security address
Contact: mailto:security@example.com
# Our OpenPGP key
Encryption: https://example.com/pgp-key.txt
# Our security policy
Policy: https://example.com/security-policy.html
# Our security acknowledgments page
Acknowledgments: https://example.com/hall-of-fame.html
Expires: 2021-12-31T18:37:07z
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.2
[signature]
-----END PGP SIGNATURE-----