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