security.txt Under RFC 9116: Implementing a Vulnerability Disclosure Policy
AI generated
OWASP
0x00
Security · Vulnerability Disclosure · Standards · RFC 9116
security.txt under RFC 9116
implementing a vulnerability disclosure policy in practice

Anyone who finds a security flaw in someone else's web application runs into a simple but unresolved problem: who do you actually tell? Without a clear point of contact, many reports end up in a generic support inbox, get ignored, or, out of frustration, get posted publicly on social media instead. RFC 9116 solves this with a refreshingly simple idea: a standardized text file at a fixed path that bundles contact details, deadlines, and signatures for responsible reporting.

14 min read security.txt · RFC 9116 Vulnerability disclosure · PGP

1. The problem: no clear channel for reporting a vulnerability

Security researchers who stumble across a vulnerability during an audit, a bug bounty engagement, or just while browsing need a clear, fast way to report it responsibly. Without that channel, the remaining options are all mediocre: an email to a generic info@ address that disappears into a marketing inbox, a ticket in a public support system anyone can read, or, in the worst case, a tweet with vulnerability details because no other channel responded.

That uncertainty costs both sides time and trust. Operators often learn about critical flaws too late, or never through an official channel, while well-meaning researchers give up in frustration or default to going public for lack of an alternative. RFC 9116 closes exactly this gap with a convention simple enough to implement in a few minutes, yet impactful enough in practice to noticeably change how fast a company hears about a vulnerability.


# /.well-known/security.txt -- minimal example under RFC 9116
Contact: mailto:security@example-shop.com
Contact: https://example-shop.com/report-security-issue
Expires: 2026-12-31T23:59:59.000Z
Encryption: https://example-shop.com/.well-known/pgp-key.txt
Preferred-Languages: en, de
Canonical: https://example-shop.com/.well-known/security.txt
Policy: https://example-shop.com/security-policy
Acknowledgments: https://example-shop.com/security-hall-of-fame

2. The core idea behind RFC 9116

RFC 9116 was published as an official IETF standard in April 2022, replacing the earlier draft status the convention had been used under informally for years. The core idea is intentionally simple: a web application publishes a plain text file at the fixed, discoverable path /.well-known/security.txt, using a clearly defined field-value format to bundle the most important information for anyone reporting a security issue.

The /.well-known/ path is itself standardized under RFC 8615 and serves as a generic namespace for machine-readable website metadata, hosting other well-known resources besides security.txt, such as ACME challenges or OAuth metadata. Automated tools, security scanners, and human researchers now routinely check this path as a first step before reporting a vulnerability, because it is treated as a reliable, standardized source.

3. Required fields: Contact and Expires in detail

RFC 9116 mandates at least one Contact field and exactly one Expires field; every other field is optional. The Contact field states how researchers can reach an organization, and multiple contact lines are allowed and should be listed in order of priority. Valid values include email addresses using the mailto: scheme, phone numbers using the tel: scheme, and any HTTPS URL, for example a dedicated report form or a bug bounty program on a platform like HackerOne or Intigriti.

The Expires field states, in ISO 8601 format, how long the file should be considered valid, forcing operators to review and renew the contents on a regular basis. An expired security.txt file signals to tools and researchers alike that the listed contact details might be stale, which in practice is an effective mechanism against orphaned entries left unmaintained for years. A reasonable rhythm is an expiration date six to twelve months out, paired with a recurring calendar reminder to renew it.

4. Optional fields for a complete policy

Beyond the two required fields, RFC 9116 defines several optional fields that make a security.txt file considerably more useful. The Policy field links to a detailed vulnerability disclosure policy that spells out scope, permitted testing methods, exclusions, and how discovered data is handled. The Acknowledgments field links to a page where researchers are publicly credited after a successful, responsibly disclosed report, which is a meaningful non-monetary incentive for many security researchers.

The Preferred-Languages field states which languages reports are preferably submitted in, the Canonical field names the authoritative URL of the file itself and guards against tampered copies on mirror servers, and the Hiring field can point to open roles on the security team. All fields can be repeated, so multiple contact channels or multiple policy documents for different product areas can coexist side by side.

5. Signing with PGP: protecting the integrity of the file

Without additional protection, an attacker with server access could plant a forged security.txt file to intercept reports of genuine vulnerabilities or steer researchers toward a false trail. RFC 9116 therefore allows the file to be signed as an OpenPGP cleartext signature, so any tampering with the content becomes immediately detectable once someone verifies the signature against the public key.

In practice, the public PGP key itself is referenced through the Encryption field and also published under a well-known path, so researchers can both verify the security.txt file's signature and communicate encrypted with the security team. This combination of signing and encryption ensures sensitive vulnerability details never travel in plaintext over insecure channels, and that the contact information itself stays trustworthy.

6. Common mistakes in practical implementation

The most common mistake is a security.txt file created once and never maintained again, until the expiration date sits far in the past and the listed contact addresses no longer work. A second common mistake is placing the file outside /.well-known/, for example directly at the domain root, which some tools still accept as a fallback but which contradicts the RFC standard and is frequently missed by automated scanners.

A third mistake is a security.txt file with no clear link to an actual disclosure policy, leaving researchers with a contact address but no clarity on which testing methods are allowed or how long a response typically takes. Without an accompanying policy, the file remains a pure formality rather than a working reporting channel, and security researchers become more hesitant to reach out in the first place.

7. Defining the internal response process for incoming reports

A security.txt file is only as effective as the internal process that follows an incoming report. A sensible workflow includes clear deadlines: an automated acknowledgment within a few hours, an initial technical assessment within a few business days, and transparent communication about the remediation timeline going forward. These deadlines ideally live directly in the linked policy, so reporters have a realistic expectation from the start.

Equally important is clear internal ownership: who reads incoming reports, who assesses severity, and who decides on priority and remediation timeline? Without defined responsibilities, reports easily fall between multiple teams and get handled with delay, which undermines the reporter's trust in the whole process and makes future voluntary reports less likely.

8. Automated maintenance instead of a one-time manual setup

Because the Expires field requires regular renewal, an automated solution beats manual upkeep tracked in a calendar. Many projects therefore generate the security.txt file from a central configuration source as part of the deployment process, automatically setting the expiration date a fixed interval into the future and regenerating the signature on every build whenever the content has changed.

Teams running multiple domains or subdomains also benefit from centralized monitoring that regularly checks whether the file is reachable, syntactically valid, and not expired across every relevant host. A simple automated check that runs daily as a cron job, compares the Expires date against the current date, and triggers an internal warning once a lead time threshold is reached reliably prevents the file from going stale unnoticed.

9. Conclusion: small effort, noticeable security benefit

security.txt under RFC 9116 is one of the best effort-to-impact security measures available. A single text file, created in a few minutes, gives security researchers a clear, reliable channel to report discovered vulnerabilities responsibly instead of going public for lack of an alternative or staying silent altogether.

The real value, however, only emerges through the surrounding processes: a clear policy, defined response deadlines, an accountable internal owner, and automated upkeep of the expiration date. Teams that implement these pieces together noticeably reduce the odds that a discovered vulnerability finds its way to the public before a fix was even possible.

Field Required Purpose Example value
Contact Yes (at least 1) Reporting channel for security researchers mailto:security@example-shop.com
Expires Yes (exactly 1) Validity date of the file 2026-12-31T23:59:59.000Z
Encryption No Link to the public PGP key https://example-shop.com/.well-known/pgp-key.txt
Policy No Link to the detailed disclosure policy https://example-shop.com/security-policy
Acknowledgments No Credit for successful reporters https://example-shop.com/security-hall-of-fame
Preferred-Languages No Preferred reporting languages en, de

Mironsoft

Security audits, OWASP-compliant hardening, and secure architecture

Applications that actually hold up against a real attack attempt?

We review existing applications for classic OWASP vulnerabilities, insecure authentication, and missing input validation, then build an architecture that structurally reduces attack surface instead of just patching individual symptoms.

Security Audit

Systematically checking OWASP Top 10, auth flows, and input validation for vulnerabilities.

Secure Architecture

Building rate limiting, encryption, and access controls correctly from the ground up.

Incident Readiness

Establishing logging, monitoring, and response processes for when things go wrong.

10. Summary

security.txt under RFC 9116 at a glance

Standard

RFC 9116 defines a text file at /.well-known/security.txt for reporting channels.

Required fields

At least one Contact field and exactly one Expires field are mandatory.

Integrity

PGP signing protects the file from undetected tampering.

Impact

Clear reporting channels meaningfully reduce the risk of premature public disclosure.

11. FAQ: security.txt under RFC 9116 at a glance

1What is security.txt under RFC 9116?
A standardized text file published at the fixed path /.well-known/security.txt that gives security researchers contact channels, deadlines, and other information needed to report vulnerabilities responsibly.
2Which fields are required in security.txt?
At least one Contact field with a valid reporting channel and exactly one Expires field with an expiration date in ISO 8601 format are mandatory. Every other field is optional.
3Where exactly must the file be placed?
At the path /.well-known/security.txt at the root of the relevant domain. Placing it outside this well-known directory does not conform to the RFC standard and is often missed by automated tools.
4Why is an Expires field mandatory?
The field forces operators to review and renew the contents regularly. An expired file signals that the listed contact details might be stale, which prevents orphaned entries left unmaintained for years.
5Why should the file be signed with PGP?
Without a signature, an attacker with server access could plant a forged security.txt to intercept reports. A PGP signature makes any tampering with the content immediately detectable.
6What belongs in an accompanying vulnerability disclosure policy?
Scope of tested systems, permitted and forbidden testing methods, handling of discovered data, expected response deadlines, and optionally rules for public credit after a successful fix.
7Does security.txt replace a bug bounty program?
No. security.txt is a reporting channel that also works without financial rewards. A Contact field can, however, point directly to an existing bug bounty program on a platform like HackerOne.
8How often should the file be updated?
At minimum before the Expires date passes; in practice a rhythm of six to twelve months works well. Many teams automate the renewal as part of the deployment process.
9Do search engines or browsers detect security.txt automatically?
No, the file is aimed exclusively at security researchers and automated scanning tools that specifically query the well-known path. It has no effect on search engine rankings or normal browser rendering.
10What happens if no security.txt file exists?
Security researchers then have to search for a contact channel themselves, which frequently causes delays, misdirected reports, or, in the worst case, an unfiltered public disclosure of the vulnerability.