| < draft-ietf-httpbis-cdn-loop-00.txt | draft-ietf-httpbis-cdn-loop-01.txt > | |||
|---|---|---|---|---|
| HTTP Working Group S. Ludin | HTTP Working Group S. Ludin | |||
| Internet-Draft Akamai Technologies | Internet-Draft Akamai Technologies | |||
| Intended status: Standards Track M. Nottingham | Intended status: Standards Track M. Nottingham | |||
| Expires: February 17, 2019 Fastly | Expires: April 27, 2019 Fastly | |||
| N. Sullivan | N. Sullivan | |||
| Cloudflare | Cloudflare | |||
| August 16, 2018 | October 24, 2018 | |||
| CDN Loop Prevention | CDN Loop Prevention | |||
| draft-ietf-httpbis-cdn-loop-00 | draft-ietf-httpbis-cdn-loop-01 | |||
| Abstract | Abstract | |||
| This specification defines the CDN-Loop request header field for | This specification defines the CDN-Loop request header field for | |||
| HTTP. | HTTP. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| skipping to change at page 1, line 34 ¶ | skipping to change at page 1, line 34 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on February 17, 2019. | This Internet-Draft will expire on April 27, 2019. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2018 IETF Trust and the persons identified as the | Copyright (c) 2018 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 | Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info) in effect on the date of | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 2. Conventions and Definitions . . . . . . . . . . . . . . . . . 3 | 1.1. Relationship to Via . . . . . . . . . . . . . . . . . . . 2 | |||
| 3. The CDN-Loop Request Header Field . . . . . . . . . . . . . . 3 | 1.2. Conventions and Definitions . . . . . . . . . . . . . . . 3 | |||
| 4. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | 2. The CDN-Loop Request Header Field . . . . . . . . . . . . . . 3 | |||
| 5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 4 | 3. Security Considerations . . . . . . . . . . . . . . . . . . . 4 | |||
| 6. References . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 6.1. Normative References . . . . . . . . . . . . . . . . . . 4 | 5. References . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 6.2. Informative References . . . . . . . . . . . . . . . . . 5 | 5.1. Normative References . . . . . . . . . . . . . . . . . . 5 | |||
| 5.2. Informative References . . . . . . . . . . . . . . . . . 5 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 5 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 1. Introduction | 1. Introduction | |||
| In modern deployments of HTTP servers, it is common to interpose | In modern deployments of HTTP servers, it is common to interpose | |||
| Content Delivery Networks (CDNs) to improve end-user perceived | Content Delivery Networks (CDNs) in front of origin servers to | |||
| latency, reduce operational costs, and improve scalability and | improve end-user perceived latency, reduce operational costs, and | |||
| reliability of services. | improve scalability and reliability of services. | |||
| Often, more than one CDN is in use by any one server; this happens | Often, more than one CDN is in use by a given origin. This happens | |||
| for a variety of reasons, such as cost savings, arranging for | for a variety of reasons, such as cost savings, arranging for | |||
| failover should one CDN have issues, or to directly compare their | failover should one CDN have issues, or to directly compare their | |||
| services. | services. | |||
| As a result, it is not unknown for CDNs to be configured in a "loop" | As a result, it is not unknown for forwarding CDNs to be configured | |||
| accidentally; because routing is achieved through a combination of | in a "loop" accidentally; because routing is achieved through a | |||
| DNS and forwarding rules, and site configurations are sometimes | combination of DNS and forwarding rules, and site configurations are | |||
| complex and managed by several parties. | sometimes complex and managed by several parties. | |||
| When this happens, it is difficult to debug. Additionally, it | When this happens, it is difficult to debug. Additionally, it | |||
| sometimes isn't accidental; loops between multiple CDNs be used as an | sometimes isn't accidental; loops between multiple CDNs be used as an | |||
| attack vector (e.g., see [loop-attack]), especially if one CDN | attack vector (e.g., see [loop-attack]), especially if one CDN | |||
| unintentionally strips the loop detection headers of another. | unintentionally strips the loop detection headers of another. | |||
| This specification defines the CDN-Loop request header field for HTTP | ||||
| to enable secure interoperability of forwarding CDNs. Having a | ||||
| header that is guaranteed not to be modified by other CDNs that are | ||||
| used by a shared customer helps give each CDN additional confidence | ||||
| that any purpose (debugging, data gathering, enforcement) that they | ||||
| use this header for is free from tampering due to how that customer | ||||
| configured the other CDNs. | ||||
| 1.1. Relationship to Via | ||||
| HTTP defines the Via header field in [RFC7230], Section 5.7.1 for | HTTP defines the Via header field in [RFC7230], Section 5.7.1 for | |||
| "tracking message forwards, avoiding request loops, and identifying | "tracking message forwards, avoiding request loops, and identifying | |||
| the protocol capabilities of senders along the request/response | the protocol capabilities of senders along the request/response | |||
| chain." | chain." | |||
| In theory, Via could be used to identify these loops. However, in | In theory, Via could be used to identify these loops. However, in | |||
| practice it is not used in this fashion, because some HTTP servers | practice it is not used in this fashion, because some HTTP servers | |||
| use Via for other purposes - in particular, some implementations | use Via for other purposes - in particular, some implementations | |||
| disable some HTTP/1.1 features when the Via header is present. | disable some HTTP/1.1 features when the Via header is present. | |||
| This specification defines the CDN-Loop request header field for | 1.2. Conventions and Definitions | |||
| HTTP, to address this shortcoming. | ||||
| 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 BCP | |||
| 14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| This specification uses the Augmented Backus-Naur Form (ABNF) | This specification uses the Augmented Backus-Naur Form (ABNF) | |||
| notation of [RFC5234] with a list extension, defined in Section 7 of | notation of [RFC5234] with a list extension, defined in Section 7 of | |||
| [RFC7230], that allows for compact definition of comma-separated | [RFC7230], that allows for compact definition of comma-separated | |||
| lists using a '#' operator (similar to how the '*' operator indicates | lists using a '#' operator (similar to how the '*' operator indicates | |||
| repetition). Additionally, it uses the OWS rule from [RFC7230] and | repetition). Additionally, it uses the OWS rule from [RFC7230] and | |||
| the parameter rule from [RFC7231]. | the parameter rule from [RFC7231]. | |||
| 3. The CDN-Loop Request Header Field | 2. The CDN-Loop Request Header Field | |||
| The CDN-Loop request header field is intended to help a Content | The CDN-Loop request header field is intended to help a Content | |||
| Delivery Network identify when an incoming request has already passed | Delivery Network identify when an incoming request has already passed | |||
| through that CDN's servers, to prevent loops. | through that CDN's servers, to prevent loops. | |||
| CDN-Loop = #cdn-id | CDN-Loop = #cdn-id | |||
| cdn-id = token *( OWS ";" OWS parameter ) | cdn-id = token *( OWS ";" OWS parameter ) | |||
| Conforming Content Delivery Networks SHOULD add a value to this | Conforming Content Delivery Networks SHOULD add a value to this | |||
| header field to all requests they generate or forward (creating the | header field to all requests they generate or forward (creating the | |||
| skipping to change at page 4, line 10 ¶ | skipping to change at page 4, line 18 ¶ | |||
| Note that the token syntax does not allow whitespace, DQUOTE or any | Note that the token syntax does not allow whitespace, DQUOTE or any | |||
| of the characters "(),/:;<=>?@[]{}". See [RFC7230], Section 3.2.6. | of the characters "(),/:;<=>?@[]{}". See [RFC7230], Section 3.2.6. | |||
| Likewise, note the rules for when parameter values need to be quoted | Likewise, note the rules for when parameter values need to be quoted | |||
| in [RFC7231], Section 3.1.1. | in [RFC7231], Section 3.1.1. | |||
| To be effective, intermediaries - including Content Delivery Networks | To be effective, intermediaries - including Content Delivery Networks | |||
| - MUST NOT remove this header field, or allow it to be removed (e.g., | - MUST NOT remove this header field, or allow it to be removed (e.g., | |||
| through configuration) and servers (including intermediaries) SHOULD | through configuration) and servers (including intermediaries) SHOULD | |||
| NOT use it for other purposes. | NOT use it for other purposes. | |||
| 4. Security Considerations | 3. Security Considerations | |||
| The threat model that the CDN-Loop header field addresses is a | ||||
| customer who is attempting to attack a service provider by | ||||
| configuring a forwarding loop by accident or malice. For it to | ||||
| function, CDNs cannot allow it to be modified by customers (see | ||||
| Section 2). | ||||
| The CDN-Loop header field can be generated by any client, and | The CDN-Loop header field can be generated by any client, and | |||
| therefore its contents cannot be trusted. CDNs who modify their | therefore its contents cannot be trusted. CDNs who modify their | |||
| behaviour based upon its contents should assure that this does not | behaviour based upon its contents should assure that this does not | |||
| become an attack vector (e.g., for Denial-of-Service). | become an attack vector (e.g., for Denial-of-Service). | |||
| It is possible to sign the contents of the header (either by putting | It is possible to sign the contents of the header (either by putting | |||
| the signature directly into the field's content, or using another | the signature directly into the field's content, or using another | |||
| header field), but such use is not defined (or required) by this | header field), but such use is not defined (or required) by this | |||
| specification. | specification. | |||
| 5. IANA Considerations | 4. IANA Considerations | |||
| This document registers the "CDN-Loop" header field in the Permanent | This document registers the "CDN-Loop" header field in the Permanent | |||
| Message Header Field Names registry. | Message Header Field Names registry. | |||
| o Header Field Name: CDN-Loop | o Header Field Name: CDN-Loop | |||
| o Protocol: http | o Protocol: http | |||
| o Status: standard | o Status: standard | |||
| o Reference: (this document) | o Reference: (this document) | |||
| 6. References | 5. References | |||
| 6.1. Normative References | 5.1. Normative References | |||
| [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/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
| DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
| <https://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
| skipping to change at page 5, line 14 ¶ | skipping to change at page 5, line 33 ¶ | |||
| [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | [RFC7231] Fielding, R., Ed. and J. Reschke, Ed., "Hypertext Transfer | |||
| Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | Protocol (HTTP/1.1): Semantics and Content", RFC 7231, | |||
| DOI 10.17487/RFC7231, June 2014, | DOI 10.17487/RFC7231, June 2014, | |||
| <https://www.rfc-editor.org/info/rfc7231>. | <https://www.rfc-editor.org/info/rfc7231>. | |||
| [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/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| 6.2. Informative References | 5.2. Informative References | |||
| [loop-attack] | [loop-attack] | |||
| Chen, J., Jiang, J., Zheng, X., Duan, H., Liang, J., Li, | Chen, J., Jiang, J., Zheng, X., Duan, H., Liang, J., Li, | |||
| K., Wan, T., and V. Paxson, "Forwarding-Loop Attacks in | K., Wan, T., and V. Paxson, "Forwarding-Loop Attacks in | |||
| Content Delivery Networks", ISBN 1-891562-41-X, | Content Delivery Networks", ISBN 1-891562-41-X, | |||
| DOI 10.14722/ndss.2016.23442, February 2016, | DOI 10.14722/ndss.2016.23442, February 2016, | |||
| <http://www.icir.org/vern/papers/cdn-loops.NDSS16.pdf>. | <http://www.icir.org/vern/papers/cdn-loops.NDSS16.pdf>. | |||
| Authors' Addresses | Authors' Addresses | |||
| End of changes. 16 change blocks. | ||||
| 29 lines changed or deleted | 43 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||