RFC 9116 security.txt 2022年4月
Foudil & Shafranovich 信息性 [页]
流:
互联网工程任务组(IETF)
RFC:
9116
类别:
信息性
发布:
ISSN:
2070-1721
作者:
E. Foudil
Y. Shafranovich
Nightwatch Cybersecurity

RFC 9116

一种有助于安全漏洞披露的文件格式

摘要

当安全漏洞被研究人员发现时, 往往缺少适当的报告渠道。因此, 漏洞可能会无人报告。本文档定义了一种机器可解析格式 (“security.txt”),用于帮助组织描述其漏洞披露实践, 从而使研究人员更容易报告漏洞。

本备忘录状态

本文档不是互联网标准轨道规范;它是 为信息性目的发布的。

本文档是互联网工程任务组 (IETF)的产物。它代表了 IETF 社区的共识。它已经 经过公开审查,并已获互联网工程指导组(IESG) 批准发布。并非所有由 IESG 批准的文档 都是任何级别的互联网标准候选文档; 参见 RFC 7841 第 2 节。

关于本文档当前状态、任何 勘误以及如何提供反馈的信息,可从 https://www.rfc-editor.org/info/rfc9116 获取。

目录

1. 引言

1.1. 动机、先前 工作和范围

许多安全研究人员会遇到这样的情况:他们无法 向组织报告安全漏洞,因为没有可用于联系特定 资源所有者的报告渠道,也没有关于此类所有者 漏洞披露实践的信息。

按照 第 4 节 of [RFC2142], 现有约定是使用 <SECURITY@domain> 电子邮件地址进行 安全问题相关通信。该约定每个域仅提供一个 基于电子邮件的单一通信渠道,并且没有提供 一种让域所有者发布其安全披露实践信息的方式。

此外,第 2 节 of [RFC3013] 为互联网服务提供商 (ISP)规定了联系约定,第 3.2 节 of [RFC2350] 为计算机安全事件 响应团队(CSIRT)规定了联系约定, 第 5.2 节 of [RFC2196] 为站点运营者 规定了联系约定。按照 [RFC7485],区域互联网注册机构 (RIR)和域名注册机构还为 IP 地址、 自治系统号(ASN)和域名的所有者提供联系信息。然而, 这些都没有解决安全研究人员如何定位组织的联系信息 和漏洞披露实践,以便报告漏洞的问题。

在本文档中,我们定义了一种更丰富、机器可解析且更具可扩展性 的方式,让组织可以传达关于其安全披露 实践以及联系途径的信息。漏洞披露的其他细节 不在本文档范围内。鼓励读者查阅其他 文档,例如 [ISO.29147.2018][CERT.CVD]

按照 [CERT.CVD], “漏洞响应”指产品漏洞报告, 它与网络入侵和网站被攻陷的报告 (“事件响应”)相关但不同。本文档定义的机制旨在 用于前者(“漏洞响应”)。如果实现者希望 将此机制用于事件响应,则应注意 第 5.1 节 中讨论的其他安全考虑。

“security.txt” 文件旨在作为组织维护的其他关于 其安全披露实践的公共资源的补充,而不是其替代品 或取代品。

1.2. 术语

本文档中的关键词 “MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、 “SHALL NOT”、 “SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“NOT RECOMMENDED”、“MAY” 和 “OPTIONAL”,当且仅当它们像这里所示以全大写形式出现时, 应按照 BCP 14 [RFC2119] [RFC8174] 中所述进行解释。

术语 “researcher” 对应于 [ISO.29147.2018][CERT.CVD] 中的术语 “finder” 和 “reporter”。 术语 “organization” 对应于 [ISO.29147.2018][CERT.CVD] 中的术语 “vendor”。

术语 “implementors” 包括参与 漏洞披露过程的所有各方。

2. 规范

本文档定义了一个放置在已知位置的文本文件, 它提供关于特定组织漏洞披露实践的信息。 此文件的格式是机器可解析的,并且必须遵循 第 4 节 中定义的 ABNF 语法。此文件旨在帮助安全研究人员 披露安全漏洞。

按照约定,该文件命名为 “security.txt”。其位置和范围在 第 3 节 中描述。

此文本文件包含多个具有不同值的字段。字段包含一个 “名称”,它是字段的第一部分,一直到冒号 (例如:“Contact:”),并遵循 第 3.6.8 节 of [RFC5322] 中为 “field-name” 定义的语法。字段名称不区分大小写(按照 第 2.3 节 of [RFC5234])。 “值”位于字段名称之后(例如:“mailto:security@example.com”),并遵循 第 3.2.5 节 of [RFC5322] 中为 “unstructured” 定义的语法。该文件可以包含空行。

字段必须始终由名称和值组成 (例如:“Contact: mailto:security@example.com”)。“security.txt” 文件 可以拥有无限数量的字段。每个字段必须出现在 自己单独的一行中。除非字段定义另有规定, 多个值不得链接在一起作为单个字段。 除非特定字段的定义中另有说明,否则一个字段可以 出现多次。

实现者应注意,某些字段可能 包含使用百分号编码的 URI(按照 第 2.1 节 of [RFC3986])。

2.1. 注释

任何以 “#”(%x23)符号开头的行必须 被解释为注释。注释内容可以包含 %x21-7E 和 %x80-FFFFF 范围内的任何 ASCII 或 Unicode 字符,以及制表符(%x09) 和空格(%x20)字符。

示例:

# This is a comment.

2.2. 行分隔符

每一行必须以回车和换行 字符(CRLF / %x0D %x0A)结束,或仅以换行字符(LF / %x0A)结束。

2.3. 数字签名

建议 使用 第 7 节 of [RFC4880] 中描述的 OpenPGP 明文签名 对 “security.txt” 文件进行数字签名。使用数字签名时,还 建议组织使用 “Canonical” 字段(按照 第 2.5.2 节), 从而允许数字签名认证该文件的位置。

在验证用于生成签名的密钥时, 安全研究人员始终有责任确保所使用的密钥 确实是其信任的密钥。

2.4. 可扩展性

与许多其他格式和协议一样,此格式可能需要随着时间推移 发生变化,以适应不断变化的互联网环境。因此, 可扩展性通过 第 6.2 节 中定义的字段 IANA 注册表提供。 通过该过程注册的任何字段必须 视为可选。为了鼓励可扩展性和互操作性, 研究人员必须忽略他们未明确支持的任何字段。

一般而言,实现者应“在自己所做的事情上保守, 在接受他人的内容时宽容”(按照 [RFC0793])。

2.5. 字段定义

除非另有说明,所有字段必须 视为可选。

2.5.1. Acknowledgments

“Acknowledgments” 字段表示指向某个页面的链接, 在该页面上会表彰提交报告的安全 研究人员。所引用的页面应列出报告安全漏洞 并协作修复这些漏洞的安全研究人员。组织应注意 限制所发布的漏洞信息,以防止 未来的攻击。

如果此字段表示 Web URI,则它必须以 “https://” 开头 (按照 第 2.7.2 节 of [RFC7230])。

示例:

Acknowledgments: https://example.com/hall-of-fame.html

安全致谢页面示例:

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

2.5.2. Canonical

“Canonical” 字段表示 “security.txt” 文件所在的规范 URI, 通常类似于 “https://example.com/.well-known/security.txt”。 如果此字段表示 Web URI,则它必须以 “https://” 开头 (按照 第 2.7.2 节 of [RFC7230])。

虽然此字段表示从给定 URI 检索到的 “security.txt” 旨在适用于该 URI,但它不得 被解释为适用于文件中列出的所有规范 URI。研究人员应该 使用额外的信任机制(例如数字签名,按照 第 2.3 节)来确定 特定规范 URI 是否适用。

如果此字段出现在 “security.txt” 文件中,而用于 检索该文件的 URI 未列在任何 canonical 字段中, 则该文件的内容不应该被信任。

Canonical: https://www.example.com/.well-known/security.txt
Canonical: https://someserver.example.com/.well-known/security.txt

2.5.3. Contact

“Contact” 字段表示研究人员 应用于报告安全漏洞的方法,例如电子邮件地址、电话号码和/或 带有联系信息的网页。此字段必须 始终存在于 “security.txt” 文件中。如果此字段表示 Web URI, 则它必须以 “https://” 开头(按照 第 2.7.2 节 of [RFC7230])。 安全电子邮件地址应使用 第 4 节 of [RFC2142] 中定义的约定。

该值必须遵循 第 3 节 of [RFC3986] 中描述的 URI 语法。 这意味着在指定电子邮件地址和电话号码时,必须使用 [RFC6068][RFC3966] 中定义的 “mailto” 和 “tel” URI 方案。 当此字段的值是电子邮件地址时, 建议使用加密(按照 第 2.5.4 节)。

这些字段应该按偏好顺序列出, 第一次出现的是首选 联系方式,第二次出现的是第二首选联系方式,依此类推。 在下面的示例中,第一个电子邮件地址 (“security@example.com”)是首选联系方式。

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

2.5.4. Encryption

“Encryption” 字段表示安全研究人员 应用于加密通信的加密密钥。密钥不得 出现在此字段中。相反,此字段的值 必须是指向可检索该密钥的位置的 URI。 如果此字段表示 Web URI,则它必须以 “https://” 开头 (按照 第 2.7.2 节 of [RFC7230])。

在验证密钥真实性时,安全研究人员 始终有责任确保所指定的密钥确实是 他们信任的密钥。研究人员不得假设该密钥 用于生成 第 2.3 节 中引用的数字签名。

可从 Web 服务器获得的 OpenPGP 密钥示例:

Encryption: https://example.com/pgp-key.txt

可从 OPENPGPKEY DNS 记录获得的 OpenPGP 密钥示例:

Encryption: dns:5d2d37ab76d47d36._openpgpkey.example.com?type=OPENPGPKEY

通过指纹引用 OpenPGP 密钥的示例:

Encryption: openpgp4fpr:5f2de5521c63a801ab59ccb603d49de44b29100f

2.5.5. Expires

“Expires” 字段表示在何日期和时间之后, “security.txt” 文件中包含的数据 被视为过时且不应使用(按照 第 5.3 节)。此字段的值按照 [ISO.8601-1][ISO.8601-2] 的互联网配置文件进行格式化,具体如 [RFC3339] 中所定义。建议 该字段的值小于未来一年,以避免过时。

此字段必须始终存在,并且 不得出现多于一次。

Expires: 2021-12-31T18:37:07z

2.5.6. Hiring

“Hiring” 字段用于链接到供应商的 安全相关职位。 如果此字段表示 Web URI,则它必须以 “https://” 开头 (按照 第 2.7.2 节 of [RFC7230])。

Hiring: https://example.com/jobs.html

2.5.7. Policy

“Policy” 字段表示指向漏洞 披露政策所在位置的链接。 这可以帮助安全研究人员了解 组织的漏洞报告实践。 如果此字段表示 Web URI,则它必须以 “https://” 开头 (按照 第 2.7.2 节 of [RFC7230])。

示例:

Policy: https://example.com/disclosure-policy.html

2.5.8. Preferred-Languages

“Preferred-Languages” 字段可用于表示 提交安全报告时偏好的自然语言集合。此集合可以 列出多个以逗号分隔的值。如果包含此字段, 则必须至少列出一个值。该集合中的值是 语言标签(如 [RFC5646] 中所定义)。 如果缺少此字段,安全研究人员可以假定英语是应使用的语言 (按照 第 4.5 节 of [RFC2277])。

它们出现的顺序并不表示优先级; 所列语言旨在具有同等优先级。

此字段不得出现多于一次。

示例(英语、西班牙语和法语):

Preferred-Languages: en, es, fr

2.6. 未签名 “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

2.7. 已签名 “security.txt” 文件示例

-----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-----

3. security.txt 文件的位置

对于基于 Web 的服务,组织必须将 “security.txt” 文件放置在 “/.well-known/” 路径下,例如 https://example.com/.well-known/security.txt, 按照域名或 IP 地址的 [RFC8615]。为了 旧版兼容性,“security.txt” 文件可以放置在顶级路径 或重定向(按照 第 6.4 节 of [RFC7231])到 “/.well-known/” 路径下的 “security.txt” 文件。如果 “security.txt” 文件 同时存在于两个位置,则必须使用 “/.well-known/” 路径下的那个。

该文件必须通过 HTTP 1.0 或更高版本访问, 并且文件访问必须使用 “https” 方案(按照 第 2.7.2 节 of [RFC7230])。 它必须具有 “text/plain” 的 Content-Type, 且默认 charset 参数设置为 “utf-8”(按照 第 4.1.3 节 of [RFC2046])。

检索 “security.txt” 文件以及这些文件中指示的资源可能会导致 重定向(按照 第 6.4 节 of [RFC7231])。 研究人员应执行额外分析(按照 第 5.2 节),以确保这些重定向 不是恶意的,或不是指向攻击者控制的资源。

3.1. 文件的范围

“security.txt” 文件必须仅适用于用于检索它的 URI 中的域 或 IP 地址,而不适用于其任何子域或父域。 “security.txt” 文件也可以适用于发布该文件的组织 提供的产品和服务。

按照 第 1.1 节,本规范 旨在用于漏洞响应。 如果实现者希望将其用于事件响应,则应注意 第 5.1 节 中讨论的其他 安全考虑。

组织应该使用 policy 指令(按照 第 2.5.7 节) 来提供关于其漏洞披露流程范围和细节的附加信息。

下面给出一些示例:

# The following only applies to example.com.
https://example.com/.well-known/security.txt

# This only applies to subdomain.example.com.
https://subdomain.example.com/.well-known/security.txt

# This security.txt file applies to IPv4 address of 192.0.2.0.
https://192.0.2.0/.well-known/security.txt

# This security.txt file applies to IPv6 address of 2001:db8:8:4::2.
https://[2001:db8:8:4::2]/.well-known/security.txt

4. 文件格式描述和 ABNF 语法

“security.txt” 文件的文件格式必须是纯文本(MIME 类型 “text/plain”),如 第 4.1.3 节 of [RFC2046] 中定义,并且必须 使用 Net-Unicode 形式的 UTF-8 [RFC3629] 编码 [RFC5198]

此文件的格式必须遵循下面的 ABNF 定义 (该定义纳入来自 [RFC5234] 的核心 ABNF 规则,并使用 [RFC7405] 中的区分大小写字符串支持)。

body             =  signed / unsigned

unsigned       =  *line (contact-field eol) ; one or more required
                  *line (expires-field eol) ; exactly one required
                  *line [lang-field eol] *line ; exactly one optional
                  ; order of fields within the file is not important
                  ; except that if contact-field appears more
                  ; than once, the order of those indicates
                  ; priority (see Section 3.5.3)

; signed is the production that should match the OpenPGP clearsigned
; document
signed           =  cleartext-header
                    1*(hash-header)
                    CRLF
                    cleartext
                    signature

cleartext-header =  %s"-----BEGIN PGP SIGNED MESSAGE-----" CRLF

hash-header      =  %s"Hash: " hash-alg *("," hash-alg) CRLF

hash-alg         =  token
                      ; imported from RFC 2045; see RFC 4880 Section
                      ; 10.3.3 for a pointer to the registry of
                      ; valid values

;cleartext       =  1*( UTF8-octets [CR] LF)
                      ; dash-escaped per RFC 4880 Section 7.1

cleartext        =  *((line-dash / line-from / line-nodash) [CR] LF)

line-dash        =  ("- ") "-" *UTF8-char-not-cr
                       ; MUST include initial "- "

line-from        =  ["- "] "From " *UTF8-char-not-cr
                      ; SHOULD include initial "- "

line-nodash      =  ["- "] *UTF8-char-not-cr
                      ; MAY include initial "- "

UTF8-char-not-dash =  UTF8-1-not-dash / UTF8-2 / UTF8-3 / UTF8-4
UTF8-1-not-dash  =  %x00-2C / %x2E-7F
UTF8-char-not-cr =  UTF8-1-not-cr / UTF8-2 / UTF8-3 / UTF8-4
UTF8-1-not-cr    =  %x00-0C / %x0E-7F

; UTF8 rules from RFC 3629
UTF8-octets      =  *( UTF8-char )
UTF8-char        =  UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4
UTF8-1           =  %x00-7F
UTF8-2           =  %xC2-DF UTF8-tail
UTF8-3           =  %xE0 %xA0-BF UTF8-tail / %xE1-EC 2( UTF8-tail ) /
                    %xED %x80-9F UTF8-tail / %xEE-EF 2( UTF8-tail )
UTF8-4           =  %xF0 %x90-BF 2( UTF8-tail ) /
                    %xF1-F3 3( UTF8-tail ) /
                    %xF4 %x80-8F 2( UTF8-tail )
UTF8-tail        =  %x80-BF

signature        =  armor-header
                    armor-keys
                    CRLF
                    signature-data
                    armor-tail

armor-header     =  %s"-----BEGIN PGP SIGNATURE-----" CRLF

armor-keys       =  *(token ": " *( VCHAR / WSP ) CRLF)
                      ; Armor Header Keys from RFC 4880

armor-tail       =  %s"-----END PGP SIGNATURE-----" CRLF

signature-data   =  1*(1*(ALPHA / DIGIT / "=" / "+" / "/") CRLF)
                      ; base64; see RFC 4648
                      ; includes RFC 4880 checksum

line             =  [ (field / comment) ] eol

eol              =  *WSP [CR] LF

field            =  ; optional fields
                    ack-field /
                    can-field /
                    contact-field / ; optional repeated instances
                    encryption-field /
                    hiring-field /
                    policy-field /
                    ext-field

fs               =  ":"

comment          =  "#" *(WSP / VCHAR / %x80-FFFFF)

ack-field        =  "Acknowledgments" fs SP uri

can-field        =  "Canonical" fs SP uri

contact-field    =  "Contact" fs SP uri

expires-field    =  "Expires" fs SP date-time

encryption-field =  "Encryption" fs SP uri

hiring-field     =  "Hiring" fs SP uri

lang-field       =  "Preferred-Languages" fs SP lang-values

policy-field     =  "Policy" fs SP uri

date-time        =  < imported from Section 5.6 of [RFC3339] >

lang-tag         =  < Language-Tag from Section 2.1 of [RFC5646] >

lang-values      =  lang-tag *(*WSP "," *WSP lang-tag)

uri              =  < URI as per Section 3 of [RFC3986] >

ext-field        =  field-name fs SP unstructured

field-name       =  < imported from Section 3.6.8 of [RFC5322] >

unstructured     =  < imported from Section 3.2.5 of [RFC5322] >

token            =  < imported from Section 5.1 of [RFC2045] >

ALPHA            =  %x41-5A / %x61-7A   ; A-Z / a-z

BIT              =  "0" / "1"

CHAR             =  %x01-7F
                      ; any 7-bit US-ASCII character,
                      ;  excluding NUL

CR               =  %x0D
                      ; carriage return

CRLF             =  CR LF
                      ; Internet standard newline

CTL              =  %x00-1F / %x7F
                      ; controls

DIGIT            =  %x30-39
                      ; 0-9

DQUOTE           =  %x22
                      ; " (Double Quote)

HEXDIG           =  DIGIT / "A" / "B" / "C" / "D" / "E" / "F"

HTAB             =  %x09
                      ; horizontal tab

LF               =  %x0A
                      ; linefeed

LWSP             =  *(WSP / CRLF WSP)
                      ; Use of this linear-white-space rule
                      ;  permits lines containing only white
                      ;  space that are no longer legal in
                      ;  mail headers and have caused
                      ;  interoperability problems in other
                      ;  contexts.
                      ; Do not use when defining mail
                      ;  headers and use with caution in
                      ;  other contexts.

OCTET            =  %x00-FF
                      ; 8 bits of data

SP               =  %x20

VCHAR            =  %x21-7E
                      ; visible (printing) characters

WSP              =  SP / HTAB
                      ; white space

“ext-field” 指扩展字段,这些字段在 第 2.4 节 中讨论。

5. 安全考虑

由于使用了 URI 和知名资源, [RFC3986][RFC8615] 的安全考虑适用于此处,此外还包括 下面列出的考虑事项。

5.1. 被攻陷的文件和 事件响应

攻陷网站的攻击者也能够攻陷 “security.txt” 文件,或设置到其自己站点的重定向。 这可能导致安全报告无法被组织接收, 或被发送给攻击者。

为了防止这种情况,组织应使用 “Canonical” 字段来指示 文件的位置(按照 第 2.5.2 节),对其 “security.txt” 文件进行数字签名(按照 第 2.3 节),并定期监控该文件 和所引用的资源,以检测篡改。

安全研究人员在使用文件中包含的信息之前,应验证 “security.txt” 文件,包括验证 数字签名并检查任何可用的历史记录。如果 “security.txt” 文件看起来可疑或已被攻陷, 则不应使用它。

虽然不建议这样做,但实现者可以选择使用 “security.txt” 文件中发布的信息进行事件响应。在这种情况下, 在信任此类信息之前应极其谨慎,因为 它可能已被攻击者攻陷。研究人员应使用其他方法 来验证此类数据,包括带外验证 Pretty Good Privacy(PGP) 签名、基于 DNSSEC 的方法等。

5.2. 重定向

检索文件以及文件中引用的任何资源时,研究人员 应记录任何重定向,因为它们可能通向攻击者控制的 不同域或 IP 地址。 在使用文件中包含的信息之前,建议进一步 检查此类重定向。

5.3. 不正确或过时的 信息

如果 “security.txt” 文件中引用的信息和资源不正确 或未保持最新,这可能导致安全报告无法被 组织接收,或被发送给错误的联系人,从而可能 将安全问题暴露给第三方。没有 “security.txt” 文件可能 比在此文件中包含过时信息更好。组织必须使用 “Expires” 字段(见 第 2.5.5 节)向研究人员指明 文件中的数据何时不再有效。

组织应确保此文件中的信息以及任何引用的 资源(例如网页、电子邮件地址和电话号码) 保持最新、可访问、由组织控制, 并保持安全。

5.4. 故意格式错误的 文件、资源和报告

被攻陷或恶意站点可能会创建异常 大或其他格式错误的文件,试图发现或利用 解析代码中的弱点。 研究人员应确保任何此类代码 能够稳健地处理大型或格式错误的文件和字段,并且他们可以选择不 解析大于 32 KB、字段长于 2,048 个字符或 包含超过 1,000 行的文件。ABNF 语法(如 第 4 节 中定义)也可作为验证这些文件的方式。

同样的担忧也适用于 “security.txt” 文件中引用的任何其他资源, 以及发布此文件后收到的任何安全报告。 此类资源和报告可能是敌意的、格式错误的或恶意的。

5.5. 不暗示授予 测试许可

“security.txt” 文件的存在可能会被研究人员 解释为授予他们针对发布该文件的域或 IP 地址 或针对发布该文件的组织提供的产品和服务 进行安全测试的许可。 这可能导致研究人员对组织进行更多测试。另一方面, 不发布 “security.txt” 文件的决定可能会被 运营该网站的组织解释为向研究人员发出信号: 拒绝对该特定站点或项目进行测试的许可。这可能导致 研究人员向该组织报告安全问题时受到阻力。

因此,研究人员不应假定 “security.txt” 文件的存在或缺失授予或拒绝安全测试许可。 任何此类许可可以在公司的漏洞披露政策中说明 (按照 第 2.5.7 节),也可以在新字段中说明(按照 第 2.4 节)。

5.6. 多用户 环境

在多用户/多租户环境中,用户可能能够 接管 “security.txt” 文件的位置。组织应在根处保留 “security.txt” 命名空间,以确保没有第三方可以创建带有 “security.txt” 和 “/.well-known/security.txt” 名称的页面。

5.7. 保护传输中的 数据

为了防止 “security.txt” 文件在传输过程中被篡改, 实现者在提供文件本身以及检索其中 引用的任何 Web URI 时必须使用 HTTPS(按照 第 2.7.2 节 of [RFC7230])(除非本规范另有说明)。作为 TLS 握手的一部分,研究人员应按照 [RFC6125] 和以下考虑事项验证所提供的 X.509 证书:

  • 匹配仅针对 DNS-ID 标识符执行。
  • 服务器证书中的 DNS 域名可以包含通配符 字符 “*”,作为标识符中完整的最左侧标签。

还可以通过在线证书状态协议(OCSP) [RFC6960]、证书吊销列表(CRL)或类似机制 检查证书吊销状态。

在 “security.txt” 文件无法通过 HTTPS 提供(例如 localhost)或使用无效证书提供的情况下,建议进行额外的人工验证,因为 内容可能在传输过程中已被修改。

作为额外保护层,还建议 组织使用 OpenPGP 对其 “security.txt” 文件进行数字签名(按照 第 2.3 节)。 此外,为了保护安全报告在传输过程中不被篡改或观察, 组织应指定加密密钥(按照 第 2.5.4 节),除非 使用 HTTPS 提交报告。

然而,此类密钥有效性的确定不在 本规范范围内。安全研究人员需要建立其他安全方式来 验证它们。

5.8. 垃圾信息和虚假 报告

[RFC2142] 中的担忧类似,一旦 组织发布 “security.txt” 文件,通过垃圾报告进行 拒绝服务攻击会变得更容易。此外, 由于自动化扫描且没有人工分析,报告 以自动化方式发送的可能性也会增加。 攻击者还可以通过列出无关第三方的资源和/或联系信息, 利用此文件向这些第三方发送垃圾信息。

组织需要权衡发布此文件的优势, 与分析安全报告所需的可能缺点和增加的资源之间的关系。

安全研究人员在以自动化方式提交报告或提交自动化扫描产生的报告之前, 应审查 “security.txt” 文件中的所有信息。

6. IANA 考虑

实现者应注意, “security.txt” 文件中引用的任何资源不得指向 Well-Known URIs 命名空间,除非 它们已在 IANA 注册(按照 [RFC8615])。

6.1. Well-Known URIs 注册表

IANA 已使用以下附加值更新 “Well-Known URIs” 注册表 (使用 [RFC8615] 中的模板):

URI 后缀:
security.txt
变更控制者:
IETF
规范文档:
RFC 9116
状态:
永久

6.2. security.txt 字段注册表

IANA 已根据 [RFC8126] 创建 “security.txt Fields” 注册表。该注册表包含 用于 “security.txt” 文件的字段,这些字段由本规范定义。

新的注册或更新必须按照 [RFC8126] 的第 4.5 节和 5 节中所述的 “Expert Review” 指南发布。如此注册的任何新字段 均被本规范视为可选,除非发布本规范的新版本。

指定专家应确定拟议的注册或更新 是否为使用此格式的组织和研究人员提供价值,并且在行业接受的漏洞披露流程 (例如 [ISO.29147.2018][CERT.CVD])的背景下是否合理。

新的注册和更新必须包含 以下信息:

  1. 正在注册或更新的字段名称
  2. 字段的简短描述
  3. 该字段是否可以出现多于一次
  4. 新的或更新后的状态,该状态必须是 下列之一:

    current:
    该字段正在当前使用。
    deprecated:
    该字段曾经使用过,但不鼓励新的使用。
    historic:
    该字段不再 当前使用。
  5. 变更控制者
  6. 发布该字段规范的文档(如果 可用)

现有注册可由本文档未来的更新按适当情况 标记为 historic 或 deprecated。

初始注册表包含以下值:

字段名称:
Acknowledgments
描述:
指向表彰安全研究人员页面的链接
多次出现:
状态:
current
变更控制者:
IETF
参考:
RFC 9116
字段名称:
Canonical
描述:
此文件的规范 URI
多次出现:
状态:
current
变更控制者:
IETF
参考:
RFC 9116
字段名称:
Contact
描述:
用于报告漏洞的联系信息
多次出现:
状态:
current
变更控制者:
IETF
参考:
RFC 9116
字段名称:
Expires
描述:
此文件被视为过时的日期和时间
多次出现:
状态:
current
变更控制者:
IETF
参考:
RFC 9116
字段名称:
Encryption
描述:
指向用于加密通信的密钥的链接
多次出现:
状态:
current
变更控制者:
IETF
参考:
RFC 9116
字段名称:
Hiring
描述:
指向供应商安全相关职位的链接
多次出现:
状态:
current
变更控制者:
IETF
参考:
RFC 9116
字段名称:
Policy
描述:
指向安全政策页面的链接
多次出现:
状态:
current
变更控制者:
IETF
参考:
RFC 9116
字段名称:
Preferred-Languages
描述:
安全报告的偏好语言列表
多次出现:
状态:
current
变更控制者:
IETF
参考:
RFC 9116

7. 参考文献

7.1. 规范性参考文献

[RFC2046]
Freed, N. and N. Borenstein, “多用途互联网邮件扩展(MIME)第二部分:媒体类型”, RFC 2046, DOI 10.17487/RFC2046, , <https://www.rfc-editor.org/info/rfc2046>.
[RFC2119]
Bradner, S., “用于 RFC 中表示 要求级别的关键词”, BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC2142]
Crocker, D., “通用 服务、角色和功能的邮箱名称”, RFC 2142, DOI 10.17487/RFC2142, , <https://www.rfc-editor.org/info/rfc2142>.
[RFC2277]
Alvestrand, H., “IETF 关于字符集 和语言的政策”, BCP 18, RFC 2277, DOI 10.17487/RFC2277, , <https://www.rfc-editor.org/info/rfc2277>.
[RFC3339]
Klyne, G. and C. Newman, “互联网上的日期和时间:时间戳”, RFC 3339, DOI 10.17487/RFC3339, , <https://www.rfc-editor.org/info/rfc3339>.
[RFC3629]
Yergeau, F., “UTF-8,ISO 10646 的转换格式”, STD 63, RFC 3629, DOI 10.17487/RFC3629, , <https://www.rfc-editor.org/info/rfc3629>.
[RFC3966]
Schulzrinne, H., “用于电话 号码的 tel URI”, RFC 3966, DOI 10.17487/RFC3966, , <https://www.rfc-editor.org/info/rfc3966>.
[RFC3986]
Berners-Lee, T., Fielding, R., and L. Masinter, “统一资源标识符 (URI):通用语法”, STD 66, RFC 3986, DOI 10.17487/RFC3986, , <https://www.rfc-editor.org/info/rfc3986>.
[RFC4880]
Callas, J., Donnerhacke, L., Finney, H., Shaw, D., and R. Thayer, “OpenPGP 消息格式”, RFC 4880, DOI 10.17487/RFC4880, , <https://www.rfc-editor.org/info/rfc4880>.
[RFC5198]
Klensin, J. and M. Padlipsky, “用于网络交换的 Unicode 格式”, RFC 5198, DOI 10.17487/RFC5198, , <https://www.rfc-editor.org/info/rfc5198>.
[RFC5234]
Crocker, D., Ed. and P. Overell, “用于语法规范的扩展 BNF:ABNF”, STD 68, RFC 5234, DOI 10.17487/RFC5234, , <https://www.rfc-editor.org/info/rfc5234>.
[RFC5322]
Resnick, P., Ed., “互联网消息 格式”, RFC 5322, DOI 10.17487/RFC5322, , <https://www.rfc-editor.org/info/rfc5322>.
[RFC5646]
Phillips, A., Ed. and M. Davis, Ed., “用于标识语言的标签”, BCP 47, RFC 5646, DOI 10.17487/RFC5646, , <https://www.rfc-editor.org/info/rfc5646>.
[RFC6068]
Duerst, M., Masinter, L., and J. Zawinski, “‘mailto’ URI 方案”, RFC 6068, DOI 10.17487/RFC6068, , <https://www.rfc-editor.org/info/rfc6068>.
[RFC6125]
Saint-Andre, P. and J. Hodges, “在传输层安全性(TLS)背景下,使用 X.509(PKIX)证书 在互联网公钥基础设施中表示和验证基于域的应用服务身份”, RFC 6125, DOI 10.17487/RFC6125, , <https://www.rfc-editor.org/info/rfc6125>.
[RFC6960]
Santesson, S., Myers, M., Ankney, R., Malpani, A., Galperin, S., and C. Adams, “X.509 互联网公钥基础设施在线证书状态协议 - OCSP”, RFC 6960, DOI 10.17487/RFC6960, , <https://www.rfc-editor.org/info/rfc6960>.
[RFC7230]
Fielding, R., Ed. and J. Reschke, Ed., “超文本传输协议(HTTP/1.1):消息语法和路由”, RFC 7230, DOI 10.17487/RFC7230, , <https://www.rfc-editor.org/info/rfc7230>.
[RFC7231]
Fielding, R., Ed. and J. Reschke, Ed., “超文本传输协议(HTTP/1.1):语义和内容”, RFC 7231, DOI 10.17487/RFC7231, , <https://www.rfc-editor.org/info/rfc7231>.
[RFC7405]
Kyzivat, P., “ABNF 中的区分大小写字符串支持”, RFC 7405, DOI 10.17487/RFC7405, , <https://www.rfc-editor.org/info/rfc7405>.
[RFC8174]
Leiba, B., “RFC 2119 关键词中 大写与小写的歧义”, BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
[RFC8615]
Nottingham, M., “知名统一资源 标识符(URI)”, RFC 8615, DOI 10.17487/RFC8615, , <https://www.rfc-editor.org/info/rfc8615>.

7.2. 资料性参考文献

[CERT.CVD]
Software Engineering Institute, “CERT 协调漏洞披露指南”, Carnegie Mellon University, CMU/SEI-2017-SR-022, .
[ISO.29147.2018]
ISO, “信息技术 - 安全 技术 - 漏洞披露”, ISO/IEC 29147:2018, .
[ISO.8601-1]
ISO, “日期和时间 - 信息交换 表示法 - 第 1 部分:基本规则”, ISO 8601-1:2019, .
[ISO.8601-2]
ISO, “日期和时间 - 信息交换 表示法 - 第 2 部分:扩展”, ISO 8601-2:2019, .
[RFC0793]
Postel, J., “传输控制 协议”, STD 7, RFC 793, DOI 10.17487/RFC0793, , <https://www.rfc-editor.org/info/rfc793>.
[RFC2196]
Fraser, B., “站点安全手册”, FYI 8, RFC 2196, DOI 10.17487/RFC2196, , <https://www.rfc-editor.org/info/rfc2196>.
[RFC2350]
Brownlee, N. and E. Guttman, “对计算机安全事件响应的期望”, BCP 21, RFC 2350, DOI 10.17487/RFC2350, , <https://www.rfc-editor.org/info/rfc2350>.
[RFC3013]
Killalea, T., “推荐的互联网服务 提供商安全服务和程序”, BCP 46, RFC 3013, DOI 10.17487/RFC3013, , <https://www.rfc-editor.org/info/rfc3013>.
[RFC7485]
Zhou, L., Kong, N., Shen, S., Sheng, S., and A. Servin, “WHOIS 注册对象的清单和分析”, RFC 7485, DOI 10.17487/RFC7485, , <https://www.rfc-editor.org/info/rfc7485>.
[RFC8126]
Cotton, M., Leiba, B., and T. Narten, “在 RFC 中编写 IANA 考虑章节的指南”, BCP 26, RFC 8126, DOI 10.17487/RFC8126, , <https://www.rfc-editor.org/info/rfc8126>.

致谢

作者感谢 Tom HudsonJobert AbmaGerben Janssen van DoornAustin HeapStephane BortzmeyerMax SmithEduardo VelaKrzysztof Kotowicz 在本文档开发过程中提供的帮助。

作者还感谢 IETF 的 LAST CALL、SAAG 和 SECDISPATCH 列表的多位成员提供的反馈。

Yakov Shafranovich 还要感谢 L.T.S. (感谢一切)。

作者地址

Edwin Foudil
Yakov Shafranovich
Nightwatch Cybersecurity