<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.17 (Ruby 3.3.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-httpbis-optimistic-upgrade-00" category="std" consensus="true" submissionType="IETF" updates="9298" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="Optimistic HTTP Upgrade Security">Security Considerations for Optimistic Use of HTTP Upgrade</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-optimistic-upgrade-00"/>
    <author fullname="Benjamin M. Schwartz">
      <organization>Meta Platforms, Inc.</organization>
      <address>
        <email>ietf@bemasc.net</email>
      </address>
    </author>
    <date year="2024" month="July" day="02"/>
    <area>Web and Internet Transport</area>
    <workgroup>HTTPBIS</workgroup>
    <abstract>
      <?line 30?>

<t>The HTTP/1.1 Upgrade mechanism allows the client to request a change to a new protocol.  This document discusses the security considerations that apply to data sent by the client before this request is confirmed, and updates RFC 9298 to avoid related security issues.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-httpbis-optimistic-upgrade/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/httpwg/http-extensions"/>.</t>
    </note>
  </front>
  <middle>
    <?line 35?>

<section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="background">
      <name>Background</name>
      <t>In HTTP/1.1, a client is permitted to send an "Upgrade" request header field (<xref section="7.8" sectionFormat="comma" target="RFC9110"/>) to indicate that it would like to use this connection for a protocol other than HTTP/1.1.  The server replies with a "101 (Switching Protocols)" status code if it accepts the protocol change.  However, that specification also permits the server to reject the upgrade request:</t>
      <ul empty="true">
        <li>
          <t>A server <bcp14>MAY</bcp14> ignore a received Upgrade header field if it wishes to continue using the current protocol on that connection.</t>
        </li>
      </ul>
      <t>This rejection of the upgrade is common, and can happen for a variety of reasons:</t>
      <ul spacing="normal">
        <li>
          <t>The server does not support any of the client's indicated Upgrade Tokens (i.e., the client's proposed new protocols), so it continues to use HTTP/1.1.</t>
        </li>
        <li>
          <t>The server knows that an upgrade to the offered protocol will not provide any improvement over HTTP/1.1 for this request to this resource, so it chooses to respond in HTTP/1.1.</t>
        </li>
        <li>
          <t>The server requires the client to authenticate before upgrading the protocol, so it replies with the status code "401 (Authentication Required)" and provides a challenge in an "Authorization" response header (<xref section="11.6.2" sectionFormat="comma" target="RFC9110"/>).</t>
        </li>
        <li>
          <t>The resource has moved, so the server replies with a 3XX redirect status code (<xref section="3.4" sectionFormat="comma" target="RFC9110"/>).</t>
        </li>
      </ul>
      <t>After rejecting the upgrade, the server will continue to interpret subsequent bytes on that connection in accordance with HTTP/1.1.</t>
      <t><xref target="RFC9110"/> also states:</t>
      <ul empty="true">
        <li>
          <t>A client cannot begin using an upgraded protocol on the connection until it has completely sent the request message (i.e., the client can't change the protocol it is sending in the middle of a message).</t>
        </li>
      </ul>
      <t>However, because of the possibility of rejection, the converse is not true: a client cannot necessarily begin using an upgraded protocol merely because it has finished sending the upgrade request message.</t>
      <t>In some cases, the client might expect that the upgrade will succeed.  If this expectation is correct, the client might be able to reduce delay by immediately sending the first bytes of the upgraded protocol "optimistically", without waiting for the server's response.  This document explores the security implications of this "optimistic" behavior.</t>
    </section>
    <section anchor="possible-security-issues">
      <name>Possible Security Issues</name>
      <t>When there are only two distinct parties involved in an HTTP/1.1 connection (i.e., the client and the server), HTTP Upgrade introduces no new security issues: each party must already be prepared for the other to send arbitrary data on the connection at any time.  However, HTTP connections often involve more than two parties, if the requests or responses include third-party data.  For example, a browser (party 1) might send an HTTP request to an origin (party 2) with path, headers, or body controlled by a website from a different origin (party 3).  Post-upgrade protocols such as WebSocket similarly are often used to convey data chosen by a third party.</t>
      <t>If the third-party data source is untrusted, we call the data it provides "attacker-controlled".  The combination of attacker-controlled data and optimistic HTTP Upgrade results in two significant security issues.</t>
      <section anchor="request-smuggling">
        <name>Request Smuggling</name>
        <t>In a Request Smuggling attack (<xref section="11.2" sectionFormat="comma" target="RFC9112"/>) the attacker-controlled data is chosen in such a way that it is interpreted by the server as an additional HTTP request.  These attacks allow the attacker to speak on behalf of the client while bypassing the client's own rules about what requests it will issue.  Request Smuggling can occur if the client and server have distinct interpretations of the data that flows between them.</t>
        <t>If the server accepts an HTTP Upgrade, it interprets the subsequent bytes in accordance with the new protocol.  If it rejects the upgrade, it interprets those bytes as HTTP/1.1.  However, the client doesn't know which interpretation the server will take until it receives the server's response status code.  If it uses the new protocol optimistically, this creates a risk that the server will interpret attacker-controlled data in the upgraded protocol as an additional HTTP request issued by the client.</t>
        <t>As a trivial example, consider an upgraded protocol in which the entire post-upgrade content might be freely attacker-controlled (e.g., "connect-tcp" <xref target="I-D.ietf-httpbis-connect-tcp"/>).  If the client is authenticated to the server using a connection-level authentication method such as TLS Client Certificates, the attacker could send an HTTP/1.1 POST request in the post-upgrade payload.  If the client delivers this payload optimistically, and the upgrade request fails, the server would interpret the payload as a subsequent authenticated request issued by the client.</t>
      </section>
      <section anchor="parser-exploits">
        <name>Parser Exploits</name>
        <t>A related category of attacks use protocol disagreement to exploit vulnerabilities in the server's request parsing logic.  These attacks apply when the HTTP client is trusted by the server, but the post-upgrade data source is not.  If the server software was developed under the assumption that some or all of the HTTP request data is not attacker-controlled, optimistic use of HTTP Upgrade can cause this assumption to be violated, exposing vulnerabilities in the server's HTTP request parser.</t>
      </section>
    </section>
    <section anchor="operational-issues">
      <name>Operational Issues</name>
      <t>If the server rejects the upgrade, the connection can continue to be used for HTTP/1.1.  There is no requirement to close the connection in response to an upgrade rejection, and keeping the connection open has performance advantages if additional HTTP requests to this server are likely.  Thus, it is normally inappropriate to close the connection in response to a rejected upgrade.</t>
    </section>
    <section anchor="impact-on-existing-upgrade-tokens">
      <name>Impact on Existing Upgrade Tokens</name>
      <t>At the time of writing, there are four distinct Upgrade Tokens that are registered, associated with published documents, and not marked obsolete.  This section considers the impact of this document's considerations on each registered Upgrade Token.</t>
      <section anchor="http">
        <name>"HTTP"</name>
        <t><xref target="RFC9110"/> is the source of the requirement quoted in <xref target="background"/>.  It also defines the "HTTP/*.*" family of Upgrade Tokens.  In HTTP/1.1, the only potentially applicable versions of this token are "0.9", "1.0", "1.1", and "2.0".</t>
        <t>Versions "0.9" and "1.0" are sufficiently syntactically similar to HTTP/1.1 that any such "downward upgrade" would be unlikely to result in the security concerns discussed here.  (An "upgrade" to version 1.1 has no effect at all.)</t>
        <t>A version number of "2.0" corresponds to HTTP/2.  Every HTTP/2 connection begins with a Client Connection Preface (<xref section="3.4" sectionFormat="of" target="RFC9113"/>) that was selected to ensure that a compliant HTTP/1.1 server will not process further data on this connection.  This avoids security issues if an "HTTP/2.0" Upgrade Token is used optimistically.</t>
      </section>
      <section anchor="tls">
        <name>"TLS"</name>
        <t><xref target="RFC2817"/> correctly highlights the possibility of the server rejecting the upgrade.  The security considerations documented here are applicable to any use of the "TLS" Upgrade Token, but no change is required in <xref target="RFC2817"/>.</t>
      </section>
      <section anchor="websocketwebsocket">
        <name>"WebSocket"/"websocket"</name>
        <t><xref section="4.1" sectionFormat="of" target="RFC6455"/> says:</t>
        <ul empty="true">
          <li>
            <t>Once the client's opening handshake has been sent, the client <bcp14>MUST</bcp14> wait for a response from the server before sending any further data.</t>
          </li>
        </ul>
        <t>Thus, optimistic use of HTTP Upgrade is already forbidden in the WebSocket protocol.  Additionally, the WebSocket protocol requires high-entropy masking of client-to-server frames (<xref section="5.1" sectionFormat="of" target="RFC6455"/>).</t>
      </section>
      <section anchor="connect-udp">
        <name>"connect-udp"</name>
        <t><xref section="5" sectionFormat="of" target="RFC9298"/> says:</t>
        <ul empty="true">
          <li>
            <t>A client <bcp14>MAY</bcp14> optimistically start sending UDP packets in HTTP Datagrams before receiving the response to its UDP proxying request.</t>
          </li>
        </ul>
        <t>However, in HTTP/1.1, this "proxying request" is an HTTP Upgrade request.  This upgrade is likely to be rejected in certain circumstances, such as when the UDP destination address (which is attacker-controlled) is invalid.  Additionally, the contents of the "connect-udp" protocol stream can include untrusted material (i.e., the UDP packets, which might come from other applications on the client device).  This creates the possibility of Request Smuggling attacks.  To avoid these concerns, this text is updated as follows:</t>
        <ul empty="true">
          <li>
            <t>When using HTTP/2 or later, a client <bcp14>MAY</bcp14> optimistically ...</t>
          </li>
        </ul>
        <t><xref section="3.3" sectionFormat="of" target="RFC9298"/> describes the requirement for a successful proxy setup response, including upgrading to the "connect-udp" protocol, and says:</t>
        <ul empty="true">
          <li>
            <t>If any of these requirements are not met, the client <bcp14>MUST</bcp14> treat this proxying attempt as failed and abort the connection.</t>
          </li>
        </ul>
        <t>However, this could be interpreted as an instruction to abort the underlying TLS and TCP connections in the event of an unsuccessful response such as "407 ("Proxy Authentication Required)".  To avoid an unnecessary delay in this case, this text is hereby updated as follows:</t>
        <ul empty="true">
          <li>
            <t>If any of these requirements are not met, the client <bcp14>MUST</bcp14> treat this proxying attempt as failed.  If the "Upgrade" response header field is absent, the client <bcp14>MAY</bcp14> reuse the connection for further HTTP/1.1 requests; otherwise it <bcp14>MUST</bcp14> abort the underlying connection.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="guidance-for-future-upgrade-tokens">
      <name>Guidance for Future Upgrade Tokens</name>
      <t>There are now several good examples of designs that prevent the security concerns discussed in this document and may be applicable in future specifications:</t>
      <ul spacing="normal">
        <li>
          <t>Forbid optimistic use of HTTP Upgrade (WebSocket, <xref section="4.1" sectionFormat="of" target="RFC6455"/>).</t>
        </li>
        <li>
          <t>Embed a fixed preamble that terminates HTTP/1.1 processing (HTTP/2, <xref section="3.4" sectionFormat="of" target="RFC9113"/>).</t>
        </li>
        <li>
          <t>Apply high-entropy masking of client-to-server data (WebSocket, <xref section="5.1" sectionFormat="of" target="RFC6455"/>).</t>
        </li>
      </ul>
      <t>Future specifications for Upgrade Tokens <bcp14>MUST</bcp14> account for the security issues discussed here and provide clear guidance on how clients can avoid them.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9298">
          <front>
            <title>Proxying UDP in HTTP</title>
            <author fullname="D. Schinazi" initials="D." surname="Schinazi"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document describes how to proxy UDP in HTTP, similar to how the HTTP CONNECT method allows proxying TCP in HTTP. More specifically, this document defines a protocol that allows an HTTP client to create a tunnel for UDP communications through an HTTP server that acts as a proxy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9298"/>
          <seriesInfo name="DOI" value="10.17487/RFC9298"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC9112">
          <front>
            <title>HTTP/1.1</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document specifies the HTTP/1.1 message syntax, message parsing, connection management, and related security concerns.</t>
              <t>This document obsoletes portions of RFC 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="99"/>
          <seriesInfo name="RFC" value="9112"/>
          <seriesInfo name="DOI" value="10.17487/RFC9112"/>
        </reference>
        <reference anchor="I-D.ietf-httpbis-connect-tcp">
          <front>
            <title>Template-Driven HTTP CONNECT Proxying for TCP</title>
            <author fullname="Benjamin M. Schwartz" initials="B. M." surname="Schwartz">
              <organization>Meta Platforms, Inc.</organization>
            </author>
            <date day="1" month="July" year="2024"/>
            <abstract>
              <t>   TCP proxying using HTTP CONNECT has long been part of the core HTTP
   specification.  However, this proxying functionality has several
   important deficiencies in modern HTTP environments.  This
   specification defines an alternative HTTP proxy service configuration
   for TCP connections.  This configuration is described by a URI
   Template, similar to the CONNECT-UDP and CONNECT-IP protocols.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-connect-tcp-03"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC2817">
          <front>
            <title>Upgrading to TLS Within HTTP/1.1</title>
            <author fullname="R. Khare" initials="R." surname="Khare"/>
            <author fullname="S. Lawrence" initials="S." surname="Lawrence"/>
            <date month="May" year="2000"/>
            <abstract>
              <t>This memo explains how to use the Upgrade mechanism in HTTP/1.1 to initiate Transport Layer Security (TLS) over an existing TCP connection. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2817"/>
          <seriesInfo name="DOI" value="10.17487/RFC2817"/>
        </reference>
        <reference anchor="RFC6455">
          <front>
            <title>The WebSocket Protocol</title>
            <author fullname="I. Fette" initials="I." surname="Fette"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code. The security model used for this is the origin-based security model commonly used by web browsers. The protocol consists of an opening handshake followed by basic message framing, layered over TCP. The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or s and long polling). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6455"/>
          <seriesInfo name="DOI" value="10.17487/RFC6455"/>
        </reference>
      </references>
    </references>
    <?line 161?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Mark Nottingham and Lucas Pardue for early reviews of this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7Va23IbOZJ9r6/Alh9a6iDZpuyetrWz3av2ZVoRtqVtyTsz
sbMPqCqQRKtuA6BIcxz+l/2W/bI9mQDqQlLtedkHh0USBeT15MlEzefzxGlX
qkuR3qm8M9rtxaumtrpQRjqNv8SqMeKmdbrS1ulcfLRKNCvxy/39rfjYro0s
VJrILDNqi01GC8crRNw8TXLp1Lox+0thXZEkRZPXssL5hZErN9fKreYb59pM
23nTbzbv/D7zp08T22X40kI2t2/x4PWb+7dJ3VWZMpdJgd0vkxxyq9p29lI4
06kEkj1LpFESEv5ZZULWhbiunTK1cuLeyNq2jXFpsmvMw9o0XYt1JP7P13dp
8qD2+L64TLaq7rC5EGvtNl2GNSTobv0d/TdXnxyOJIulSdeSHDj95cXLF0ki
O7dpIJyY42EhVl1Zep1/VvVvstK1eL8Qd/lmJ437By9pzFrW+h/sgUvxXjkp
bkvp4IrKziB6vuBlqpK6vBRktH/P8MHmC2iUJDXW4dktpE10vRp9SubzuZCZ
dUbmWHi/Ueyn75aLZe+rSuUbnG4rIcuy2VnhsCovtaqdcI0w6u+dsk5IQcvW
ir6TolY70ZrGNXlTLoS432gr4NuuoqcKbfPOWuW3sjHQ8mmguY3Erm1b7mlL
WFBiKZ7O9mMJMgV9cCgdEEXBn9hrpU2lihl7N3hA/Pr2FTuBhdw2usAzMKQq
BikQS9hkEWxT6aIoVZI8oTSAx71otOVrtdK15s/ecAgMQZFhRfr+4919OvP/
iw83/Pevb/7j4/Wvb17T33e/XL171/+RhBV3v9x8fPd6+Gt48tXN+/dvPrz2
D+NbMfkqSd9f/TX1iqY3t/fXNx+u3qUCceQmZpeGnZMp/IRgb40ixaVNCmVz
ozN8wDM/v7r93/9ZPhefP/8LrHWxXL788iV8eLH84Tk+7Daq9qc1NZzjP8Il
+wTeUtLQLggVkctWO1kiQqUVdtPsarFRRsG03/4XWea/L8Ufs7xdPv8xfEEK
T76MNpt8yTY7/uboYW/EE1+dOKa35uT7A0tP5b366+RztPvoyz/+VOpaifny
xU8/JhRCP8uc8QSW+/wk6z98SZLrus+7GWWSj204r1Wm0o78BM8h/OGvWqQR
aPuI3yh8NGKlVVmIM++tl8vl0xkhLcWo+GHx4suXc9pF14Um1PUJph2CtsNT
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
iFytdvaoyV4k/wdHa7IXjCsAAA==

-->

</rfc>
