summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc9461.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc9461.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc9461.txt')
-rw-r--r--doc/rfc/rfc9461.txt500
1 files changed, 500 insertions, 0 deletions
diff --git a/doc/rfc/rfc9461.txt b/doc/rfc/rfc9461.txt
new file mode 100644
index 0000000..6df9caa
--- /dev/null
+++ b/doc/rfc/rfc9461.txt
@@ -0,0 +1,500 @@
+
+
+
+
+Internet Engineering Task Force (IETF) B. Schwartz
+Request for Comments: 9461 Meta Platforms, Inc.
+Category: Standards Track November 2023
+ISSN: 2070-1721
+
+
+ Service Binding Mapping for DNS Servers
+
+Abstract
+
+ The SVCB DNS resource record type expresses a bound collection of
+ endpoint metadata, for use when establishing a connection to a named
+ service. DNS itself can be such a service, when the server is
+ identified by a domain name. This document provides the SVCB mapping
+ for named DNS servers, allowing them to indicate support for
+ encrypted transport protocols.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc9461.
+
+Copyright Notice
+
+ Copyright (c) 2023 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (https://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Revised BSD License text as described in Section 4.e of the
+ Trust Legal Provisions and are provided without warranty as described
+ in the Revised BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 2. Conventions and Definitions
+ 3. Identities and Names
+ 3.1. Special Case: Non-default Ports
+ 4. Applicable Existing SvcParamKeys
+ 4.1. "alpn"
+ 4.2. "port"
+ 4.3. Other Applicable SvcParamKeys
+ 5. New SvcParamKey: "dohpath"
+ 6. Limitations
+ 7. Examples
+ 8. Security Considerations
+ 8.1. Adversary on the Query Path
+ 8.1.1. Downgrade Attacks
+ 8.1.2. Redirection Attacks
+ 8.2. Adversary on the Transport Path
+ 9. IANA Considerations
+ 10. References
+ 10.1. Normative References
+ 10.2. Informative References
+ Appendix A. Mapping Summary
+ Acknowledgments
+ Author's Address
+
+1. Introduction
+
+ The SVCB resource record (RR) type [SVCB] provides clients with
+ information about how to reach alternative endpoints for a service.
+ These endpoints may offer improved performance or privacy properties.
+ The service is identified by a "scheme" indicating the service type,
+ a hostname, and, optionally, other information such as a port number.
+ A DNS server is often identified only by its IP address (e.g., in
+ DHCP), but in some contexts it can also be identified by a hostname
+ (e.g., "NS" records, manual resolver configuration) and sometimes
+ also a non-default port number.
+
+ The use of the SVCB RR type requires a mapping document for each
+ service type (Section 2.4.3 of [SVCB]), indicating how a client for
+ that service can interpret the contents of the SVCB SvcParams. This
+ document provides the mapping for the "dns" service type, allowing
+ DNS servers to offer alternative endpoints and transports, including
+ encrypted transports like DNS over TLS (DoT) [RFC7858], DNS over
+ HTTPS (DoH) [RFC8484], and DNS over QUIC (DoQ) [RFC9250].
+
+ The SVCB mapping described in this document is intended as a general-
+ purpose baseline. Subsequent specifications will adapt this
+ mechanism as needed to support specific configurations (e.g., for
+ communication between stub resolvers and recursive resolvers).
+
+2. Conventions and Definitions
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+3. Identities and Names
+
+ SVCB record names (i.e., QNAMEs) for DNS services are formed using
+ Port Prefix Naming (Section 2.3 of [SVCB]), with a scheme of "dns".
+ For example, SVCB records for a DNS service identified as
+ dns1.example.com would be queried at _dns.dns1.example.com.
+
+ In some use cases, the name used for retrieving these DNS records is
+ different from the server identity used to authenticate the secure
+ transport. To distinguish between these, this document uses the
+ following terms:
+
+ Binding authority: The service name (Section 1.3 of [SVCB]) and
+ optional port number used as input to Port Prefix Naming.
+
+ Authentication name: The name used for secure transport
+ authentication. This MUST be a DNS hostname or a literal IP
+ address. Unless otherwise specified, this is the service name
+ from the binding authority.
+
+3.1. Special Case: Non-default Ports
+
+ Normally, a DNS service is identified by an IP address or a domain
+ name. When connecting to the service using unencrypted DNS over UDP
+ or TCP, clients use the default port number for DNS (53). However,
+ in rare cases, a DNS service might be identified by both a name and a
+ port number. For example, the DNS URI scheme [DNSURI] optionally
+ includes an authority, comprised of a host and a port number (with a
+ default of 53). DNS URIs normally omit the authority or specify an
+ IP address, but a hostname and non-default port number are allowed.
+
+ When the binding authority specifies a non-default port number, Port
+ Prefix Naming places the port number in an additional prefix on the
+ name. For example, if the binding authority is
+ "dns1.example.com:9953", the client would query for SVCB records at
+ _9953._dns.dns1.example.com. If two DNS services operating on
+ different port numbers provide different behaviors, this arrangement
+ allows them to preserve the distinction when specifying alternative
+ endpoints.
+
+4. Applicable Existing SvcParamKeys
+
+4.1. "alpn"
+
+ This key indicates the set of supported protocols (Section 7.1 of
+ [SVCB]). There is no default protocol, so the "no-default-alpn" key
+ does not apply. If the "alpn" SvcParamKey is absent, the client MUST
+ treat the SVCB record as "incompatible" (as defined in Section 8 of
+ [SVCB]) unless some other recognized SvcParam indicates a supported
+ protocol.
+
+ If the protocol set contains any HTTP versions (e.g., "h2", "h3"),
+ then the record indicates support for DoH and the "dohpath" key MUST
+ be present (Section 5). All keys specified for use with the HTTPS
+ record are also permissible and apply to the resulting HTTP
+ connection.
+
+ If the protocol set contains protocols with different default ports
+ and no "port" key is specified, then protocols are contacted
+ separately on their default ports. Note that in this configuration,
+ Application-Layer Protocol Negotiation (ALPN) negotiation does not
+ defend against cross-protocol downgrade attacks.
+
+4.2. "port"
+
+ This key is used to indicate the target port for connection
+ (Section 7.2 of [SVCB]). If omitted, the client SHALL use the
+ default port number for each transport protocol (853 for DoT and DoQ,
+ 443 for DoH).
+
+ This key is automatically mandatory for this binding. This means
+ that a client that does not respect the "port" key MUST ignore any
+ SVCB record that contains this key. (See Section 8 of [SVCB] for the
+ definition of "automatically mandatory".)
+
+ Support for the "port" key can be unsafe if the client has implicit
+ elevated access to some network service (e.g., a local service that
+ is inaccessible to remote parties) and that service uses a TCP-based
+ protocol other than TLS. A hostile DNS server might be able to
+ manipulate this service by causing the client to send a specially
+ crafted TLS Server Name Indication (SNI) or session ticket that can
+ be misparsed as a command or exploit. To avoid such attacks, clients
+ SHOULD NOT support the "port" key unless one of the following
+ conditions applies:
+
+ * The client is being used with a DNS server that it trusts not to
+ attempt this attack.
+
+ * The client is being used in a context where implicit elevated
+ access cannot apply.
+
+ * The client restricts the set of allowed TCP port values to exclude
+ any ports where a confusion attack is likely to be possible (e.g.,
+ the "bad ports" list from Section 2.9 ("Port blocking") of
+ [FETCH]).
+
+4.3. Other Applicable SvcParamKeys
+
+ These SvcParamKeys from [SVCB] apply to the "dns" scheme without
+ modification:
+
+ * mandatory
+
+ * ipv4hint
+
+ * ipv6hint
+
+ Future SvcParamKeys might also be applicable.
+
+5. New SvcParamKey: "dohpath"
+
+ "dohpath" is a single-valued SvcParamKey whose value (in both
+ presentation format and wire format) MUST be a URI Template in
+ relative form ([RFC6570], Section 1.1) encoded in UTF-8 [RFC3629].
+ If the "alpn" SvcParam indicates support for HTTP, "dohpath" MUST be
+ present. The URI Template MUST contain a "dns" variable, and MUST be
+ chosen such that the result after DoH URI Template expansion
+ (Section 6 of [RFC8484]) is always a valid and functional ":path"
+ value ([RFC9113], Section 8.3.1).
+
+ When using this SVCB record, the client MUST send any DoH requests to
+ the HTTP origin identified by the "https" scheme, the authentication
+ name, and the port from the "port" SvcParam (if present). HTTP
+ requests MUST be directed to the resource resulting from DoH URI
+ Template expansion of the "dohpath" value.
+
+ Clients SHOULD NOT query for any HTTPS RRs when using "dohpath".
+ Instead, the SvcParams and address records associated with this SVCB
+ record SHOULD be used for the HTTPS connection, with the same
+ semantics as an HTTPS RR. However, for consistency, service
+ operators SHOULD publish an equivalent HTTPS RR, especially if
+ clients might learn about this DoH service through a different
+ channel.
+
+6. Limitations
+
+ This document is concerned exclusively with the DNS transport and
+ does not affect or inform the construction or interpretation of DNS
+ messages. For example, nothing in this document indicates whether
+ the service is intended for use as a recursive or authoritative DNS
+ server. Clients need to know the intended use of services based on
+ their context.
+
+ Not all features of this specification will be applicable or
+ effective in all contexts:
+
+ * If the authentication name is received over an insecure channel
+ (e.g., a glue NS record), this specification cannot prevent the
+ client from connecting to an attacker.
+
+ * Different transports might prove to be popular for different
+ purposes (e.g., querying a recursive resolver vs. an authoritative
+ server). Implementors are not obligated to implement all the
+ defined transports, although doing so is beneficial for
+ compatibility.
+
+ * Where resolution speed is a high priority, the SVCB TargetName
+ SHOULD follow the convention described in Section 10.2 of [SVCB],
+ and the use of AliasMode records (Section 2.4.2 of [SVCB]) is NOT
+ RECOMMENDED.
+
+7. Examples
+
+ * A resolver known as simple.example that supports DNS over TLS on
+ port 853 (implicitly, as this is its default port):
+
+ _dns.simple.example. 7200 IN SVCB 1 simple.example. alpn=dot
+
+ * A DoH-only resolver at https://doh.example/dns-query{?dns}. (DNS
+ over TLS is not supported.):
+
+ _dns.doh.example. 7200 IN SVCB 1 doh.example. (
+ alpn=h2 dohpath=/dns-query{?dns} )
+
+ * A resolver known as resolver.example that supports:
+
+ - DoT on resolver.example ports 853 (implicit in record 1) and
+ 8530 (explicit in record 2), with "resolver.example" as the
+ Authentication Domain Name,
+
+ - DoQ on resolver.example port 853 (record 1),
+
+ - DoH at https://resolver.example/q{?dns} (record 1), and
+
+ - an experimental protocol on fooexp.resolver.example:5353
+ (record 3):
+
+ _dns.resolver.example. 7200 IN \
+ SVCB 1 resolver.example. alpn=dot,doq,h2,h3 dohpath=/q{?dns}
+ SVCB 2 resolver.example. alpn=dot port=8530
+ SVCB 3 fooexp.resolver.example. \
+ port=5353 alpn=foo foo-info=...
+
+ * A name server named ns.example. whose service configuration is
+ published on a different domain:
+
+ _dns.ns.example. 7200 IN SVCB 0 _dns.ns.nic.example.
+
+8. Security Considerations
+
+8.1. Adversary on the Query Path
+
+ This section considers an adversary who can add or remove responses
+ to the SVCB query.
+
+ During secure transport establishment, clients MUST authenticate the
+ server to its authentication name, which is not influenced by the
+ SVCB record contents. Accordingly, this document does not mandate
+ the use of DNSSEC. This document also does not specify how clients
+ authenticate the name (e.g., selection of roots of trust), as this
+ procedure might vary according to the context.
+
+8.1.1. Downgrade Attacks
+
+ This attacker cannot impersonate the secure endpoint, but it can
+ forge a response indicating that the requested SVCB records do not
+ exist. For a SVCB-reliant client ([SVCB], Section 3), this only
+ results in a denial of service. However, SVCB-optional clients will
+ generally fall back to insecure DNS in this case, exposing all DNS
+ traffic to attacks.
+
+8.1.2. Redirection Attacks
+
+ SVCB-reliant clients always enforce the Authentication Domain Name,
+ but they are still subject to attacks using the transport, port
+ number, and "dohpath" value, which are controlled by this adversary.
+ By changing these values in the SVCB answers, the adversary can
+ direct DNS queries for $HOSTNAME to any port on $HOSTNAME and any
+ path on "https://$HOSTNAME". If the DNS client uses shared TLS or
+ HTTP state, the client could be correctly authenticated (e.g., using
+ a TLS client certificate or HTTP cookie).
+
+ This behavior creates a number of possible attacks for certain server
+ configurations. For example, if https://$HOSTNAME/upload accepts any
+ POST request as a public file upload, the adversary could forge a
+ SVCB record containing dohpath=/upload{?dns}. This would cause the
+ client to upload and publish every query, resulting in unexpected
+ storage costs for the server and privacy loss for the client.
+ Similarly, if two DoH endpoints are available on the same origin and
+ the service has designated one of them for use with this
+ specification, this adversary can cause clients to use the other
+ endpoint instead.
+
+ To mitigate redirection attacks, a client of this SVCB mapping MUST
+ NOT identify or authenticate itself when performing DNS queries,
+ except to servers that it specifically knows are not vulnerable to
+ such attacks. If an endpoint sends an invalid response to a DNS
+ query, the client SHOULD NOT send more queries to that endpoint and
+ MAY log this error. Multiple DNS services MUST NOT share a hostname
+ identifier (Section 3) unless they are so similar that it is safe to
+ allow an attacker to choose which one is used.
+
+8.2. Adversary on the Transport Path
+
+ This section considers an adversary who can modify network traffic
+ between the client and the alternative service (identified by the
+ TargetName).
+
+ For a SVCB-reliant client, this adversary can only cause a denial of
+ service. However, because DNS is unencrypted by default, this
+ adversary can execute a downgrade attack against SVCB-optional
+ clients. Accordingly, when the use of this specification is
+ optional, clients SHOULD switch to SVCB-reliant behavior if SVCB
+ resolution succeeds. Specifications making use of this mapping MAY
+ adjust this fallback behavior to suit their requirements.
+
+9. IANA Considerations
+
+ Per [SVCB], IANA has added the following entry to the "Service
+ Parameter Keys (SvcParamKeys)" registry.
+
+ +======+=======+================+=========+============+===========+
+ |Number|Name | Meaning |Format | Change | Reference |
+ | | | |Reference| Controller | |
+ +======+=======+================+=========+============+===========+
+ | 7 |dohpath| DNS-over-HTTPS |RFC 9461 | IETF | RFC 9461 |
+ | | | path template | | | |
+ +------+-------+----------------+---------+------------+-----------+
+
+ Table 1
+
+ Per [Attrleaf], IANA has added the following entry to the DNS
+ "Underscored and Globally Scoped DNS Node Names" registry:
+
+ +=========+============+===========+
+ | RR Type | _NODE NAME | Reference |
+ +=========+============+===========+
+ | SVCB | _dns | RFC 9461 |
+ +---------+------------+-----------+
+
+ Table 2
+
+10. References
+
+10.1. Normative References
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
+ 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
+ 2003, <https://www.rfc-editor.org/info/rfc3629>.
+
+ [RFC6570] Gregorio, J., Fielding, R., Hadley, M., Nottingham, M.,
+ and D. Orchard, "URI Template", RFC 6570,
+ DOI 10.17487/RFC6570, March 2012,
+ <https://www.rfc-editor.org/info/rfc6570>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8484] Hoffman, P. and P. McManus, "DNS Queries over HTTPS
+ (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018,
+ <https://www.rfc-editor.org/info/rfc8484>.
+
+ [RFC9113] Thomson, M., Ed. and C. Benfield, Ed., "HTTP/2", RFC 9113,
+ DOI 10.17487/RFC9113, June 2022,
+ <https://www.rfc-editor.org/info/rfc9113>.
+
+ [SVCB] Schwartz, B., Bishop, M., and E. Nygren, "Service Binding
+ and Parameter Specification via the DNS (SVCB and HTTPS
+ Resource Records)", RFC 9460, DOI 10.17487/RFC9460,
+ November 2023, <https://www.rfc-editor.org/info/rfc9460>.
+
+10.2. Informative References
+
+ [Attrleaf] Crocker, D., "Scoped Interpretation of DNS Resource
+ Records through "Underscored" Naming of Attribute Leaves",
+ BCP 222, RFC 8552, DOI 10.17487/RFC8552, March 2019,
+ <https://www.rfc-editor.org/info/rfc8552>.
+
+ [DNSURI] Josefsson, S., "Domain Name System Uniform Resource
+ Identifiers", RFC 4501, DOI 10.17487/RFC4501, May 2006,
+ <https://www.rfc-editor.org/info/rfc4501>.
+
+ [FETCH] WHATWG, "Fetch Living Standard", October 2023,
+ <https://fetch.spec.whatwg.org/>.
+
+ [RFC7858] Hu, Z., Zhu, L., Heidemann, J., Mankin, A., Wessels, D.,
+ and P. Hoffman, "Specification for DNS over Transport
+ Layer Security (TLS)", RFC 7858, DOI 10.17487/RFC7858, May
+ 2016, <https://www.rfc-editor.org/info/rfc7858>.
+
+ [RFC9250] Huitema, C., Dickinson, S., and A. Mankin, "DNS over
+ Dedicated QUIC Connections", RFC 9250,
+ DOI 10.17487/RFC9250, May 2022,
+ <https://www.rfc-editor.org/info/rfc9250>.
+
+Appendix A. Mapping Summary
+
+ This table serves as a non-normative summary of the DNS mapping for
+ SVCB.
+
+ +-----------------+------------------------------------+
+ | *Mapped scheme* | "dns" |
+ +-----------------+------------------------------------+
+ | *RR type* | SVCB (64) |
+ +-----------------+------------------------------------+
+ | *Name prefix* | _dns for port 53, else _$PORT._dns |
+ +-----------------+------------------------------------+
+ | *Required keys* | alpn or equivalent |
+ +-----------------+------------------------------------+
+ | *Automatically | port |
+ | mandatory keys* | |
+ +-----------------+------------------------------------+
+ | *Special | Supports all HTTPS RR SvcParamKeys |
+ | behaviors* | |
+ +-----------------+------------------------------------+
+ | | Overrides the HTTPS RR for DoH |
+ +-----------------+------------------------------------+
+ | | Default port is per-transport |
+ +-----------------+------------------------------------+
+ | | Cleartext fallback is discouraged |
+ +-----------------+------------------------------------+
+
+ Table 3
+
+Acknowledgments
+
+ Thanks to the many reviewers and contributors, including Andrew
+ Campling, Peter van Dijk, Paul Hoffman, Daniel Migault, Matt
+ Nordhoff, Eric Rescorla, Andreas Schulze, and Éric Vyncke.
+
+Author's Address
+
+ Benjamin Schwartz
+ Meta Platforms, Inc.
+ Email: ietf@bemasc.net