rfc8826xml2.original.xml | rfc8826.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
<!ENTITY RFC2119 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.2119.xml"> | ||||
<!ENTITY RFC3552 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.3552.xml"> | ||||
<!ENTITY RFC3552 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.3552.xml"> | ||||
<!ENTITY RFC2818 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.2818.xml"> | ||||
<!ENTITY RFC3261 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.3261.xml"> | ||||
<!ENTITY RFC3711 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.3711.xml"> | ||||
<!ENTITY RFC5479 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.5479.xml"> | ||||
<!ENTITY RFC6347 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6347.xml"> | ||||
<!ENTITY RFC4568 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.4568.xml"> | ||||
<!ENTITY RFC5763 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.5763.xml"> | ||||
<!ENTITY RFC4251 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.4251.xml"> | ||||
<!ENTITY RFC3760 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.3760.xml"> | ||||
<!ENTITY RFC6189 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6189.xml"> | ||||
<!ENTITY RFC8445 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8445.xml"> | ||||
<!ENTITY RFC6454 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6454.xml"> | ||||
<!ENTITY RFC6455 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6455.xml"> | ||||
<!ENTITY RFC6222 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6222.xml"> | ||||
<!ENTITY RFC7022 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.7022.xml"> | ||||
<!ENTITY RFC7675 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.7675.xml"> | ||||
<!ENTITY RFC8174 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.8174.xml"> | ||||
<!ENTITY RFC6749 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.6749.xml"> | ||||
<!ENTITY RFC7033 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | ||||
.7033.xml"> | ||||
<!ENTITY I-D.ietf-rtcweb-security-arch SYSTEM "http://xml2rfc.ietf.org/public/rf | ||||
c/bibxml3/reference.I-D.ietf-rtcweb-security-arch.xml"> | ||||
<!ENTITY I-D.ietf-rtcweb-overview SYSTEM "http://xml2rfc.ietf.org/public/rfc/bib | ||||
xml3/reference.I-D.ietf-rtcweb-overview.xml"> | ||||
<!ENTITY I-D.ietf-rtcweb-ip-handling SYSTEM "http://xml2rfc.ietf.org/public/rfc/ | ||||
bibxml3/reference.I-D.ietf-rtcweb-ip-handling.xml"> | ||||
]> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" submissionType="IETF" | |||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | category="std" consensus="true" number="8826" | |||
<?rfc toc="yes" ?> | docName="draft-ietf-rtcweb-security-12" ipr="pre5378Trust200902" | |||
<?rfc symrefs="yes" ?> | obsoletes="" updates="" xml:lang="en" tocInclude="true" tocDepth="4" | |||
<?rfc strict="yes" ?> | symRefs="true" sortRefs="true" version="3"> | |||
<?rfc compact="yes" ?> | <!-- xml2rfc v2v3 conversion 2.34.0 --> | |||
<?rfc sortrefs="yes" ?> | ||||
<?rfc colonspace="yes" ?> | ||||
<?rfc rfcedstyle="no" ?> | ||||
<!-- Don't change this. It breaks stuff --> | ||||
<?rfc tocdepth="4"?> | ||||
<rfc category="std" docName="draft-ietf-rtcweb-security-12" | ||||
ipr="pre5378Trust200902"> | ||||
<front> | <front> | |||
<title abbrev="WebRTC Security">Security Considerations for WebRTC</title> | <title abbrev="WebRTC Security">Security Considerations for WebRTC</title> | |||
<seriesInfo name="RFC" value="8826"/> | ||||
<author fullname="Eric Rescorla" initials="E.K." surname="Rescorla"> | <author fullname="Eric Rescorla" initials="E." surname="Rescorla"> | |||
<organization>RTFM, Inc.</organization> | <organization>RTFM, Inc.</organization> | |||
<address> | <address> | |||
<postal> | <postal> | |||
<street>2064 Edgewood Drive</street> | <street>2064 Edgewood Drive</street> | |||
<city>Palo Alto</city> | <city>Palo Alto</city> | |||
<region>CA</region> | <region>CA</region> | |||
<code>94303</code> | <code>94303</code> | |||
<country>United States of America</country> | ||||
<country>USA</country> | ||||
</postal> | </postal> | |||
<phone>+1 650 678 2350</phone> | <phone>+1 650 678 2350</phone> | |||
<email>ekr@rtfm.com</email> | <email>ekr@rtfm.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="October" year="2020"/> | ||||
<date year="2019" /> | <!-- [rfced] Please insert any keywords (beyond those that appear in | |||
the title) for use on https://www.rfc-editor.org/search. --> | ||||
<keyword>example</keyword> | ||||
<area>ART</area> | <abstract> | |||
<workgroup>RTC-Web</workgroup> | <!-- [rfced] In this cluster, we have been expanding WebRTC in the body of the | |||
document (but not the title) as Web Real-Time Communication. Do you want to | ||||
include this expansion somewhere, or is not needed with the current | ||||
explanatory text? | ||||
Original (first occurrence): | ||||
WebRTC is a protocol suite for use with real-time applications that | ||||
can be deployed in browsers - "real time communication on the Web". | ||||
This document defines the WebRTC threat model and analyzes the | ||||
security threats of WebRTC in that model. | ||||
--> | ||||
<abstract> | ||||
<t> | <t> | |||
WebRTC is a protocol suite for use with real-time applications that can | WebRTC is a protocol suite for use with | |||
be deployed in browsers - "real time communication on the Web". This | real-time applications that can be deployed in browsers -- "real-time | |||
document defines the WebRTC threat model and analyzes the security threa | communication on the Web". This document defines the WebRTC threat | |||
ts of | model and analyzes the security threats of WebRTC in that model. | |||
WebRTC in that model. | ||||
</t> | </t> | |||
</abstract> | </abstract> | |||
</front> | </front> | |||
<middle> | <middle> | |||
<section title="Introduction" anchor="sec.introduction"> | <section anchor="sec.introduction" numbered="true" toc="default"> | |||
<name>Introduction</name> | ||||
<t> | <t> | |||
The Real-Time Communications on the Web (RTCWEB) working group has stand ardized | The Real-Time Communications on the Web (RTCWEB) Working Group has stand ardized | |||
protocols for real-time communications between Web browsers, generally | protocols for real-time communications between Web browsers, generally | |||
called "WebRTC" <xref target="I-D.ietf-rtcweb-overview"/>. The | called "WebRTC" <xref target="RFC8825" format="default"/>. The | |||
major use cases for WebRTC technology are real-time audio and/or video c alls, | major use cases for WebRTC technology are real-time audio and/or video c alls, | |||
Web conferencing, and direct data transfer. Unlike most conventional rea | Web conferencing, and direct data transfer. Unlike most conventional rea | |||
l-time systems, | l-time systems | |||
(e.g., SIP-based <xref target="RFC3261" /> soft phones) WebRTC communica | (e.g., SIP-based <xref target="RFC3261" format="default"/> soft | |||
tions are directly controlled | phones), WebRTC communications are directly controlled by some Web | |||
by some Web server. A simple case is shown below. | server. A simple case is shown below. | |||
</t> | </t> | |||
<figure anchor="fig.simple"> | ||||
<figure title="A simple WebRTC system" anchor="fig.simple"> | <name>A Simple WebRTC System</name> | |||
<artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
+----------------+ | +----------------+ | |||
| | | | | | |||
| Web Server | | | Web Server | | |||
| | | | | | |||
+----------------+ | +----------------+ | |||
^ ^ | ^ ^ | |||
/ \ | / \ | |||
HTTP / \ HTTP | HTTP / \ HTTP | |||
or / \ or | or / \ or | |||
WebSockets / \ WebSockets | WebSockets / \ WebSockets | |||
v v | v v | |||
JS API JS API | JS API JS API | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
| | Media | | | | | Media | | | |||
| Browser |<---------->| Browser | | | Browser |<---------->| Browser | | |||
| | | | | | | | | | |||
+-----------+ +-----------+ | +-----------+ +-----------+ | |||
Alice Bob | Alice Bob ]]></artwork> | |||
]]></artwork> | ||||
</figure> | </figure> | |||
<t> | <t> | |||
In the system shown in <xref target="fig.simple"/>, Alice and Bob both h | In the system shown in <xref target="fig.simple" format="default"/>, Ali | |||
ave | ce and Bob both have | |||
WebRTC-enabled browsers and they visit some Web server which operates a | WebRTC-enabled browsers and they visit some Web server that operates a | |||
calling service. Each of their browsers exposes standardized JavaScript | calling service. Each of their browsers exposes standardized JavaScript | |||
calling APIs (implemented as browser built-ins) | (JS) calling APIs (implemented as browser built-ins) | |||
which are used by the Web server to set up a call between Alice and Bob. | which are used by the Web server to set up a call between Alice and Bob. | |||
The Web server also serves as the signaling channel to transport | The Web server also serves as the signaling channel to transport | |||
control messages between the browsers. | control messages between the browsers. | |||
While this system is topologically similar to a conventional SIP-based | While this system is topologically similar to a conventional SIP-based | |||
system (with the Web server acting as the signaling service and browsers | system (with the Web server acting as the signaling service and browsers | |||
acting as softphones), control has moved to the central Web server; | acting as softphones), control has moved to the central Web server; | |||
the browser simply provides API points that are used by the calling serv ice. | the browser simply provides API points that are used by the calling serv ice. | |||
As with any Web application, the Web server can move logic between | As with any Web application, the Web server can move logic between | |||
the server and JavaScript in the browser, but regardless of where the | the server and JavaScript in the browser, but regardless of where the | |||
code is executing, it is ultimately under control of the server. | code is executing, it is ultimately under control of the server. | |||
</t> | </t> | |||
<t> | <t> | |||
It should be immediately apparent that this type of system poses new | It should be immediately apparent that this type of system poses new | |||
security challenges beyond those of a conventional VoIP system. In parti cular, | security challenges beyond those of a conventional Voice over IP (VoIP) system. In particular, | |||
it needs to contend with malicious calling services. | it needs to contend with malicious calling services. | |||
For example, if the calling service | For example, if the calling service | |||
can cause the browser to make a call at any time to any callee of its | can cause the browser to make a call at any time to any callee of its | |||
choice, then this facility can be used to bug a user's computer without | choice, then this facility can be used to bug a user's computer without | |||
their knowledge, simply by placing a call to some recording service. | their knowledge, simply by placing a call to some recording service. | |||
More subtly, if the exposed APIs allow the server to instruct the | More subtly, if the exposed APIs allow the server to instruct the | |||
browser to send arbitrary content, then they can be used to bypass | browser to send arbitrary content, then they can be used to bypass | |||
firewalls or mount denial of service attacks. Any successful system | firewalls or mount DoS attacks. Any successful system | |||
will need to be resistant to this and other attacks. | will need to be resistant to this and other attacks. | |||
</t> | </t> | |||
<t> | <t> | |||
A companion document <xref target="I-D.ietf-rtcweb-security-arch"/> desc ribes a security | A companion document <xref target="RFC8827" format="default"/> describes a security | |||
architecture intended to address the issues raised in this document. | architecture intended to address the issues raised in this document. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec-term" title="Terminology"> | <section anchor="sec-term" numbered="true" toc="default"> | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | <name>Terminology</name> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
"OPTIONAL" in this document are to be interpreted as described in | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only w | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
hen, they appear in all | "<bcp14>SHOULD NOT</bcp14>", | |||
capitals, as shown here.</t> | "<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> | ||||
</section> | </section> | |||
<section anchor="sec.web-security" numbered="true" toc="default"> | ||||
<section title="The Browser Threat Model" anchor="sec.web-security"> | <name>The Browser Threat Model</name> | |||
<t> | <t> | |||
The security requirements for WebRTC follow directly from the | The security requirements for WebRTC follow directly from the | |||
requirement that the browser's job is to protect the user. | requirement that the browser's job is to protect the user. | |||
Huang et al. <xref target="huang-w2sp"/> summarize the core browser secu | Huang et al. <xref target="huang-w2sp" format="default"/> summarize | |||
rity guarantee as: | the core browser security guarantee as follows: | |||
</t> | ||||
<t> | ||||
<list style="hanging"> | ||||
<t> | ||||
Users can safely visit arbitrary web sites and execute scripts provi | ||||
ded by those sites. | ||||
</t> | ||||
</list> | ||||
</t> | </t> | |||
<t></t> | <!-- DNE --> | |||
<ul empty="true"> | ||||
<li>Users can safely visit arbitrary web sites and execute scripts provide | ||||
d by those sites.</li></ul> | ||||
<t> | <t> | |||
It is important to realize that this includes sites hosting arbitrary ma licious | It is important to realize that this includes sites hosting arbitrary ma licious | |||
scripts. The motivation for this requirement is simple: it is trivial fo r attackers | scripts. The motivation for this requirement is simple: it is trivial fo r attackers | |||
to divert users to sites of their choice. For instance, an attacker can purchase | to divert users to sites of their choice. For instance, an attacker can purchase | |||
display advertisements which direct the user (either automatically or vi a user | display advertisements which direct the user (either automatically or vi a user | |||
clicking) to their site, at which point the browser will execute the att acker's | clicking) to their site, at which point the browser will execute the att acker's | |||
scripts. Thus, it is important that it be safe to view arbitrarily malic ious pages. | scripts. Thus, it is important that it be safe to view arbitrarily malic ious pages. | |||
Of course, browsers inevitably have bugs which cause them to fall short of this | Of course, browsers inevitably have bugs which cause them to fall short of this | |||
goal, but any new WebRTC functionality must be designed with the intent to | goal, but any new WebRTC functionality must be designed with the intent to | |||
meet this standard. The remainder of this section provides more backgrou nd | meet this standard. The remainder of this section provides more backgrou nd | |||
on the existing Web security model. | on the existing Web security model. | |||
</t> | </t> | |||
<t> | <t> | |||
In this model, then, the browser acts as a Trusted Coomputing Base (TCB) both | In this model, then, the browser acts as a Trusted Computing Base (TCB) both | |||
from the user's perspective and to some extent from the server's. While HTML | from the user's perspective and to some extent from the server's. While HTML | |||
and JavaScript (JS) provided by the server can cause the browser to exec ute a variety of | and JavaScript provided by the server can cause the browser to execute a variety of | |||
actions, those scripts operate in a sandbox that isolates them both from | actions, those scripts operate in a sandbox that isolates them both from | |||
the user's computer and from each other, as detailed below. | the user's computer and from each other, as detailed below. | |||
</t> | </t> | |||
<t> | <t> | |||
Conventionally, we refer to either web attackers, who are able to induce | Conventionally, we refer to either Web attackers, who are able to induce | |||
you to visit their sites but do not control the network, and network | you to visit their sites but do not control the network, and network | |||
attackers, who are able to control your network. Network attackers corre | attackers, who are able to control your network. | |||
spond | ||||
to the <xref target="RFC3552"/> "Internet Threat Model". Note that in so | <!-- [rfced] Section 3: Should "network, and" be "network, or," or | |||
me | should the word "either" be removed? | |||
cases, a network attacker is also a web attacker, since transport protoc | ||||
ols | Original: | |||
Conventionally, we refer to either web attackers, who are able to | ||||
induce you to visit their sites but do not control the network, and | ||||
network attackers, who are able to control your network. --> | ||||
Network attackers correspond | ||||
to the <xref target="RFC3552" format="default"/> "Internet Threat Model" | ||||
. Note that in some | ||||
cases, a network attacker is also a Web attacker, since transport protoc | ||||
ols | ||||
that do not provide integrity protection allow the network to inject tra ffic | that do not provide integrity protection allow the network to inject tra ffic | |||
as if they were any communications peer. TLS, and HTTPS in particular, p revent | as if they were any communications peer. TLS, and HTTPS in particular, p revent | |||
against these attacks, but when analyzing HTTP connections, we must assu me | against these attacks, but when analyzing HTTP connections, we must assu me | |||
that traffic is going to the attacker. | that traffic is going to the attacker. | |||
</t> | </t> | |||
<section title="Access to Local Resources" anchor="sec.resources"> | <section anchor="sec.resources" numbered="true" toc="default"> | |||
<name>Access to Local Resources</name> | ||||
<t> | <t> | |||
While the browser has access to local resources such as keying materia l, | While the browser has access to local resources such as keying materia l, | |||
files, the camera, and the microphone, it strictly limits or forbids w eb | files, the camera, and the microphone, it strictly limits or forbids W eb | |||
servers from accessing those same resources. For instance, while it is possible | servers from accessing those same resources. For instance, while it is possible | |||
to produce an HTML form which will allow file upload, a script cannot do | to produce an HTML form which will allow file upload, a script cannot do | |||
so without user consent and in fact cannot even suggest a specific fil e | so without user consent and in fact cannot even suggest a specific fil e | |||
(e.g., /etc/passwd); the user must explicitly select the file and cons ent | (e.g., /etc/passwd); the user must explicitly select the file and cons ent | |||
to its upload. [Note: in many cases browsers are explicitly designed t o | to its upload. (Note: In many cases, browsers are explicitly designed to | |||
avoid dialogs with the semantics of "click here to bypass security che cks", as | avoid dialogs with the semantics of "click here to bypass security che cks", as | |||
extensive research <xref target="cranor-wolf"/> shows that users are p | extensive research <xref target="cranor-wolf" format="default"/> shows | |||
rone to | that users are prone to | |||
consent under such circumstances.] | consent under such circumstances.) | |||
</t> | </t> | |||
<t> | <t> | |||
Similarly, while Flash programs (SWFs) <xref target="SWF"/> can access the camera and microphone, they | Similarly, while Flash programs (SWFs) <xref target="SWF" format="defa ult"/> can access the camera and microphone, they | |||
explicitly require that the user consent to that access. In addition, | explicitly require that the user consent to that access. In addition, | |||
some resources simply cannot be accessed from the browser at all. For | some resources simply cannot be accessed from the browser at all. For | |||
instance, there is no real way to run specific executables directly fr om a | instance, there is no real way to run specific executables directly fr om a | |||
script (though the user can of course be induced to download executabl e | script (though the user can of course be induced to download executabl e | |||
files and run them). | files and run them). | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Same-Origin Policy" anchor="sec.same-origin"> | <section anchor="sec.same-origin" numbered="true" toc="default"> | |||
<name>Same-Origin Policy</name> | ||||
<t> | <t> | |||
Many other resources are accessible but isolated. For instance, | Many other resources are accessible but isolated. For instance, | |||
while scripts are allowed to make HTTP requests via the XMLHttpRequest () API (see <xref target="XmlHttpRequest"/>) | while scripts are allowed to make HTTP requests via the XMLHttpRequest () API (see <xref target="XmlHttpRequest" format="default"/>) | |||
those requests are not allowed to be made to any server, but rather so lely | those requests are not allowed to be made to any server, but rather so lely | |||
to the same ORIGIN from whence the script came <xref target="RFC6454"/ | to the same ORIGIN from whence the script came <xref target="RFC6454" | |||
> | format="default"/> | |||
(although CORS <xref target="CORS"/> and WebSockets | (although Cross-Origin Resource Sharing (CORS) <xref target="CORS" for | |||
<xref target="RFC6455"/> provide an escape hatch from this restriction | mat="default"/> and WebSockets | |||
, | <xref target="RFC6455" format="default"/> provide an escape hatch from | |||
as described below.) | this restriction, | |||
This SAME ORIGIN POLICY (SOP) prevents server A from mounting attacks | as described below). | |||
This SAME-ORIGIN POLICY (SOP) prevents server A from mounting attacks | ||||
on server B via the user's browser, which protects both the user | on server B via the user's browser, which protects both the user | |||
(e.g., from misuse of his credentials) and the server B (e.g., from | (e.g., from misuse of his credentials) and server B (e.g., from | |||
DoS attack). | DoS attacks). | |||
<!-- [rfced] Section 3.2: Are "ORIGIN" and "SAME ORIGIN POLICY" | ||||
written in all capitals for emphasis (in which case perhaps we | ||||
could use the <strong> element (Section 2.50 of RFC 7991)), or should | ||||
we write them as "origin" (as used elsewhere in this document and | ||||
this cluster) and "Same-Origin Policy" (as used elsewhere in this | ||||
document and in several published RFCs)? | ||||
Also, per the "Gender-Specific Language" section of | ||||
<https://www.rfc-editor.org/styleguide/part2/>, please let us know | ||||
if we may change instances of "his," "him," "himself," and "he" to | ||||
"their," "them," "themselves," and "they." | ||||
Original "(as described below.)" has been fixed): | ||||
For instance, | ||||
while scripts are allowed to make HTTP requests via the | ||||
XMLHttpRequest() API (see [XmlHttpRequest]) those requests are not | ||||
allowed to be made to any server, but rather solely to the same | ||||
ORIGIN from whence the script came [RFC6454] (although CORS [CORS] | ||||
and WebSockets [RFC6455] provide an escape hatch from this | ||||
restriction, as described below.) This SAME ORIGIN POLICY (SOP) | ||||
prevents server A from mounting attacks on server B via the user's | ||||
browser, which protects both the user (e.g., from misuse of his | ||||
credentials) and the server B (e.g., from DoS attack). --> | ||||
</t> | </t> | |||
<t> | <t> | |||
More generally, SOP forces scripts from each site to run in their own, isolated, | More generally, SOP forces scripts from each site to run in their own, isolated, | |||
sandboxes. While there are techniques to allow them to interact, those interactions | sandboxes. While there are techniques to allow them to interact, those interactions | |||
generally must be mutually consensual (by each site) and are limited t o certain | generally must be mutually consensual (by each site) and are limited t o certain | |||
channels. For instance, multiple pages/browser panes from the same ori | channels. For instance, multiple pages / browser panes from the same o | |||
gin | rigin | |||
can read each other's JS variables, but pages from the different origi | can read each other's JS variables, but pages from different | |||
ns--or | origins -- or | |||
even iframes from different origins on the same page--cannot. | even iframes from different origins on the same page -- cannot. | |||
</t> | </t> | |||
<!-- TODO: Picture --> | ||||
<!-- [rfced] Section 3.3: We found a "TODO: Picture" comment in the | ||||
XML file, just after the section title. Is a diagram missing? --> | ||||
</section> | </section> | |||
<section title="Bypassing SOP: CORS, WebSockets, and consent to communicat | <section anchor="sec.cors-etc" numbered="true" toc="default"> | |||
e" anchor="sec.cors-etc"> | <name>Bypassing SOP: CORS, WebSockets, and Consent to Communicate</name> | |||
<t> | <t> | |||
While SOP serves an important security function, it also makes it inco nvenient to | While SOP serves an important security function, it also makes it inco nvenient to | |||
write certain classes of applications. In particular, mash-ups, in whi ch a script | write certain classes of applications. In particular, mash-ups, in whi ch a script | |||
from origin A uses resources from origin B, can only be achieved via a certain amount of hackery. | from origin A uses resources from origin B, can only be achieved via a certain amount of hackery. | |||
The W3C Cross-Origin Resource Sharing (CORS) spec <xref target="CORS"/ > is a response to this | The W3C CORS spec <xref target="CORS" format="default"/> is a response to this | |||
demand. In CORS, when a script from origin A executes what would other wise be a forbidden | demand. In CORS, when a script from origin A executes what would other wise be a forbidden | |||
cross-origin request, the browser instead contacts the target server t o determine | cross-origin request, the browser instead contacts the target server t o determine | |||
whether it is willing to allow cross-origin requests from A. If it is so willing, | whether it is willing to allow cross-origin requests from A. If it is so willing, | |||
the browser then allows the request. This consent verification process is designed | the browser then allows the request. This consent verification process is designed | |||
to safely allow cross-origin requests. | to safely allow cross-origin requests. | |||
</t> | </t> | |||
<t> | <t> | |||
While CORS is designed to allow cross-origin HTTP requests, WebSockets <xref target="RFC6455"/> allows | While CORS is designed to allow cross-origin HTTP requests, WebSockets <xref target="RFC6455" format="default"/> allows | |||
cross-origin establishment of transparent channels. Once a WebSockets connection | cross-origin establishment of transparent channels. Once a WebSockets connection | |||
has been established from a script to a site, the script can exchange any traffic it | has been established from a script to a site, the script can exchange any traffic it | |||
likes without being required to frame it as a series of HTTP request/r esponse | likes without being required to frame it as a series of HTTP request/r esponse | |||
transactions. As with CORS, a WebSockets transaction starts with a con sent verification | transactions. As with CORS, a WebSockets transaction starts with a con sent verification | |||
stage to avoid allowing scripts to simply send arbitrary data to anoth er origin. | stage to avoid allowing scripts to simply send arbitrary data to anoth er origin. | |||
</t> | </t> | |||
<t> | <t> | |||
While consent verification is conceptually simple--just do a handshake | While consent verification is conceptually simple -- just do a handsha | |||
before you | ke before you | |||
start exchanging the real data--experience has shown that designing a | start exchanging the real data -- experience has shown that designing | |||
correct consent verification system is difficult. In particular, Huang | a | |||
et al. <xref target="huang-w2sp"/> | correct consent verification system is difficult. In particular, Huang | |||
et al. <xref target="huang-w2sp" format="default"/> | ||||
have shown vulnerabilities in the existing Java and Flash consent veri fication | have shown vulnerabilities in the existing Java and Flash consent veri fication | |||
techniques and in a simplified version of the WebSockets handshake. In particular, | techniques and in a simplified version of the WebSockets handshake. In particular, | |||
it is important to be wary of CROSS-PROTOCOL attacks in which the atta cking script | it is important to be wary of CROSS-PROTOCOL attacks in which the atta cking script | |||
generates traffic which is acceptable to some non-Web protocol state m achine. | generates traffic which is acceptable to some non-Web protocol state m achine. | |||
In order to resist this form of attack, WebSockets incorporates a mask ing technique | In order to resist this form of attack, WebSockets incorporates a mask ing technique | |||
intended to randomize the bits on the wire, thus making it more diffic ult to generate | intended to randomize the bits on the wire, thus making it more diffic ult to generate | |||
traffic which resembles a given protocol. | traffic which resembles a given protocol. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.rtc-web" numbered="true" toc="default"> | ||||
<section title="Security for WebRTC Applications" anchor="sec.rtc-web"> | <name>Security for WebRTC Applications</name> | |||
<section title="Access to Local Devices" anchor="sec.rtc-dev-access"> | <section anchor="sec.rtc-dev-access" numbered="true" toc="default"> | |||
<name>Access to Local Devices</name> | ||||
<t> | <t> | |||
As discussed in <xref target="sec.introduction"/>, allowing arbitrary | As discussed in <xref target="sec.introduction" format="default"/>, al lowing arbitrary | |||
sites to initiate calls violates the core Web security guarantee; | sites to initiate calls violates the core Web security guarantee; | |||
without some access restrictions on local devices, any malicious site | without some access restrictions on local devices, any malicious site | |||
could simply bug a user. At minimum, then, it MUST NOT be possible for | could simply bug a user. At minimum, then, it <bcp14>MUST NOT</bcp14> be possible for | |||
arbitrary sites to initiate calls to arbitrary locations without user | arbitrary sites to initiate calls to arbitrary locations without user | |||
consent. This immediately raises the question, however, of what should | consent. This immediately raises the question, however, of what should | |||
be the scope of user consent. | be the scope of user consent. | |||
</t> | </t> | |||
<t> | <t> | |||
In order for the user to | In order for the user to | |||
make an intelligent decision about whether to allow a call | make an intelligent decision about whether to allow a call | |||
(and hence his camera and microphone input to be routed somewhere), | (and hence his camera and microphone input to be routed somewhere), | |||
he must understand either who is requesting access, where the media | he must understand who is requesting access, where the media | |||
is going, or both. As detailed below, there are two basic conceptual | is going, or both. As detailed below, there are two basic conceptual | |||
models: | models: | |||
</t> | </t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>You are sending your media to entity A because you want to | |||
<t>You are sending your media to entity A because you want to | talk to entity A (e.g., your mother).</li> | |||
talk to Entity A (e.g., your mother).</t> | <li>Entity A (e.g., a calling service) asks to access the user's devic | |||
<t>Entity A (e.g., a calling service) asks to access the user's devi | es with the assurance | |||
ces with the assurance | that it will transfer the media to entity B (e.g., your mother).</li | |||
that it will transfer the media to entity B (e.g., your mother)</t> | > | |||
</list> | </ol> | |||
</t> | ||||
<t> | <t> | |||
In either case, identity is at the heart of any consent decision. | In either case, identity is at the heart of any consent decision. | |||
Moreover, the identity of the party the browser is connecting to is al l that the browser can meaningfully enforce; | Moreover, the identity of the party the browser is connecting to is al l that the browser can meaningfully enforce; | |||
if you are calling A, A can simply forward the media to C. Similarly, | if you are calling A, A can simply forward the media to C. Similarly, | |||
if you authorize A to place a call to B, A can call C instead. | if you authorize A to place a call to B, A can call C instead. | |||
In either cases, all the browser is able to do is verify and check | In either case, all the browser is able to do is verify and check | |||
authorization for whoever is controlling where the media goes. | authorization for whoever is controlling where the media goes. | |||
The target of the media can of course advertise a security/privacy | The target of the media can of course advertise a security/privacy | |||
policy, but this is not something that the browser can | policy, but this is not something that the browser can | |||
enforce. Even so, there are a variety of different consent scenarios | enforce. Even so, there are a variety of different consent scenarios | |||
that motivate different technical consent mechanisms. | that motivate different technical consent mechanisms. | |||
We discuss these mechanisms in the sections below. | We discuss these mechanisms in the sections below. | |||
</t> | </t> | |||
<t> | <t> | |||
It's important to understand that consent to access local devices | It's important to understand that consent to access local devices | |||
is largely orthogonal to consent to transmit various kinds of | is largely orthogonal to consent to transmit various kinds of | |||
data over the network (see <xref target="sec.rtc-comm-consent"/>). | data over the network (see <xref target="sec.rtc-comm-consent" format= "default"/>). | |||
Consent for device access is largely a matter of protecting | Consent for device access is largely a matter of protecting | |||
the user's privacy from malicious sites. By contrast, | the user's privacy from malicious sites. By contrast, | |||
consent to send network traffic is about preventing the | consent to send network traffic is about preventing the | |||
user's browser from being used to attack its local network. | user's browser from being used to attack its local network. | |||
Thus, we need to ensure communications consent even if the | Thus, we need to ensure communications consent even if the | |||
site is not able to access the camera and microphone at | site is not able to access the camera and microphone at | |||
all (hence WebSockets's consent mechanism) and similarly | all (hence WebSockets's consent mechanism); similarly, | |||
we need to be concerned with the site accessing the | we need to be concerned with the site accessing the | |||
user's camera and microphone even if the data is to be | user's camera and microphone even if the data is to be | |||
sent back to the site via conventional HTTP-based network | sent back to the site via conventional HTTP-based network | |||
mechanisms such as HTTP POST. | mechanisms such as HTTP POST. | |||
</t> | </t> | |||
<section title="Threats from Screen Sharing"> | <section numbered="true" toc="default"> | |||
<name>Threats from Screen Sharing</name> | ||||
<t> | <t> | |||
In addition to camera and microphone access, there has been | In addition to camera and microphone access, there has been | |||
demand for screen and/or application sharing functionality. | demand for screen and/or application sharing functionality. | |||
Unfortunately, the security implications of this | Unfortunately, the security implications of this | |||
functionality are much harder for users to intuitively | functionality are much harder for users to intuitively | |||
analyze than for camera and microphone access. | analyze than for camera and microphone access. | |||
(See http://lists.w3.org/Archives/Public/public-webrtc/2013Mar/0024. html | (See <eref brackets="angle" target="https://lists.w3.org/Archives/Pu blic/public-webrtc/2013Mar/0024.html"/> | |||
for a full analysis.) | for a full analysis.) | |||
</t> | </t> | |||
<t> | <t> | |||
The most obvious threats are simply those of "oversharing". | The most obvious threats are simply those of "oversharing". | |||
I.e., the user may believe they are sharing a window when | That is, the user may believe they are sharing a window when | |||
in fact they are sharing an application, or may forget they | in fact they are sharing an application, or may forget they | |||
are sharing their whole screen, icons, notifications, and all. | are sharing their whole screen, icons, notifications, and all. | |||
This is already an issue with existing screen sharing technologies | This is already an issue with existing screen sharing technologies | |||
and is made somewhat worse if a partially trusted site is responsibl e for asking | and is made somewhat worse if a partially trusted site is responsibl e for asking | |||
for the resource to be shared rather than having the user propose it . | for the resource to be shared rather than having the user propose it . | |||
</t> | </t> | |||
<t> | <t> | |||
A less obvious threat involves the impact of screen sharing on the | A less obvious threat involves the impact of screen sharing on the | |||
Web security model. A key part of the Same-Origin Policy is that | Web security model. A key part of the Same-Origin Policy is that | |||
HTML or JS from site A can reference content from site B and cause | HTML or JS from site A can reference content from site B and cause | |||
the browser to load it, but (unless explicitly permitted) cannot | the browser to load it, but (unless explicitly permitted) cannot | |||
see the result. However, if a web application from a site is | see the result. However, if a Web application from a site is | |||
screen sharing the browser, then this violates that invariant, | screen sharing the browser, then this violates that invariant, | |||
with serious security consequences. For example, an attacker site | with serious security consequences. For example, an attacker site | |||
might request screen sharing and then briefly open up a new | might request screen sharing and then briefly open up a new | |||
Window to the user's bank or webmail account, using screen sharing | window to the user's bank or webmail account, using screen sharing | |||
to read the resulting displayed content. A more sophisticated | to read the resulting displayed content. A more sophisticated | |||
attack would be open up a source view window to a site and use the | attack would be to open up a source view window to a site and use th | |||
screen sharing result to view anti cross-site request forgery tokens | e | |||
. | screen sharing result to view anti-cross-site request forgery tokens | |||
. | ||||
</t> | </t> | |||
<t> | <t> | |||
These threats suggest that screen/application sharing might need | These threats suggest that screen/application sharing might need | |||
a higher level of user consent than access to the camera or | a higher level of user consent than access to the camera or | |||
microphone. | microphone. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Calling Scenarios and User Expectations"> | <section numbered="true" toc="default"> | |||
<name>Calling Scenarios and User Expectations</name> | ||||
<t> | <t> | |||
While a large number of possible calling scenarios are possible, the | While a large number of possible calling scenarios are possible, the | |||
scenarios discussed in this section illustrate many of | scenarios discussed in this section illustrate many of | |||
the difficulties of identifying the relevant scope of consent. | the difficulties of identifying the relevant scope of consent. | |||
</t> | </t> | |||
<section title="Dedicated Calling Services"> | <section numbered="true" toc="default"> | |||
<name>Dedicated Calling Services</name> | ||||
<t> | <t> | |||
The first scenario we consider is a dedicated calling service. In this | The first scenario we consider is a dedicated calling service. In this | |||
case, the user has a relationship with a calling site | case, the user has a relationship with a calling site | |||
and repeatedly makes calls on it. It is likely | and repeatedly makes calls on it. It is likely | |||
that rather than having to give permission for each call | that rather than having to give permission for each call, | |||
that the user will want to give the calling service long-term | the user will want to give the calling service long-term | |||
access to the camera and microphone. This is a natural fit | access to the camera and microphone. This is a natural fit | |||
for a long-term consent mechanism (e.g., installing an | for a long-term consent mechanism (e.g., installing an | |||
app store "application" to indicate permission for the | app store "application" to indicate permission for the | |||
calling service.) | calling service). | |||
A variant of the dedicated calling service is a gaming site | A variant of the dedicated calling service is a gaming site | |||
(e.g., a poker site) which hosts a dedicated calling service | (e.g., a poker site) which hosts a dedicated calling service | |||
to allow players to call each other. | to allow players to call each other. | |||
</t> | </t> | |||
<t> | <t> | |||
With any kind of service where the user may use the same | With any kind of service where the user may use the same | |||
service to talk to many different people, there is a question | service to talk to many different people, there is a question | |||
about whether the user can know who they are talking to. | about whether the user can know who they are talking to. | |||
If I grant permission to calling service A to make calls | If I grant permission to calling service A to make calls | |||
on my behalf, then I am implicitly granting it permission | on my behalf, then I am implicitly granting it permission | |||
to bug my computer whenever it wants. This suggests another | to bug my computer whenever it wants. This suggests another | |||
consent model in which a site is authorized to make calls | consent model in which a site is authorized to make calls | |||
but only to certain target entities (identified via | but only to certain target entities (identified via | |||
media-plane cryptographic mechanisms as described in | media-plane cryptographic mechanisms as described in | |||
<xref target="sec.during-attack"/> and especially | <xref target="sec.during-attack" format="default"/> and especially | |||
<xref target="sec.third-party-id"/>.) Note that the | <xref target="sec.third-party-id" format="default"/>). Note that t | |||
he | ||||
question of consent here is related to but | question of consent here is related to but | |||
distinct from the question of peer identity: I | distinct from the question of peer identity: I | |||
might be willing to allow a calling site to in general | might be willing to allow a calling site to in general | |||
initiate calls on my behalf but still have some calls | initiate calls on my behalf but still have some calls | |||
via that site where I can be sure that the site is not | via that site where I can be sure that the site is not | |||
listening in. | listening in. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Calling the Site You're On"> | <section numbered="true" toc="default"> | |||
<name>Calling the Site You're On</name> | ||||
<t> | <t> | |||
Another simple scenario is calling the site you're actually visiti ng. | Another simple scenario is calling the site you're actually visiti ng. | |||
The paradigmatic case here is the "click here to talk to a | The paradigmatic case here is the "click here to talk to a | |||
representative" windows that appear on many shopping sites. | representative" windows that appear on many shopping sites. | |||
In this case, the user's expectation is that they are | In this case, the user's expectation is that they are | |||
calling the site they're actually visiting. However, it is | calling the site they're actually visiting. However, it is | |||
unlikely that they want to provide a general consent to such | unlikely that they want to provide a general consent to such | |||
a site; just because I want some information on a car | a site; just because I want some information on a car | |||
doesn't mean that I want the car manufacturer to be able | doesn't mean that I want the car manufacturer to be able | |||
to activate my microphone whenever they please. Thus, | to activate my microphone whenever they please. Thus, | |||
this suggests the need for a second consent mechanism | this suggests the need for a second consent mechanism | |||
where I only grant consent for the duration of a given | where I only grant consent for the duration of a given | |||
call. As described in <xref target="sec.resources"/>, | call. As described in <xref target="sec.resources" format="default "/>, | |||
great care must be taken in the design of this interface | great care must be taken in the design of this interface | |||
to avoid the users just clicking through. Note also | to avoid the users just clicking through. Note also | |||
that the user interface chrome, which is the representation | that the user interface chrome, which is the representation | |||
through which the user interacts with the user agent itself, | through which the user interacts with the user agent itself, | |||
must clearly display elements | must clearly display elements | |||
showing that the call is continuing in order to avoid attacks | showing that the call is continuing in order to avoid attacks | |||
where the calling site just leaves it up indefinitely but | where the calling site just leaves it up indefinitely but | |||
shows a Web UI that implies otherwise. | shows a Web UI that implies otherwise. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="Origin-Based Security"> | <section numbered="true" toc="default"> | |||
<t> | <name>Origin-Based Security</name> | |||
<t> | ||||
Now that we have described the calling scenarios, we can start to reas on about | Now that we have described the calling scenarios, we can start to reas on about | |||
the security requirements. | the security requirements. | |||
</t> | </t> | |||
<t> | <t> | |||
As discussed in <xref target="sec.same-origin"/>, the basic unit of | As discussed in <xref target="sec.same-origin" format="default"/>, the | |||
basic unit of | ||||
Web sandboxing is the origin, and so it is natural to scope consent | Web sandboxing is the origin, and so it is natural to scope consent | |||
to origin. Specifically, a script from origin A MUST only be allowed | to the origin. Specifically, a script from origin A <bcp14>MUST</bcp14 | |||
to initiate communications (and hence to access camera and microphone) | > only be allowed | |||
to initiate communications (and hence to access the camera and microph | ||||
one) | ||||
if the user has specifically authorized access for that origin. | if the user has specifically authorized access for that origin. | |||
It is of course technically possible to have coarser-scoped permission s, | It is of course technically possible to have coarser-scoped permission s, | |||
but because the Web model is scoped to origin, this creates a difficul t | but because the Web model is scoped to the origin, this creates a diff icult | |||
mismatch. | mismatch. | |||
</t> | </t> | |||
<t> | <t> | |||
Arguably, origin is not fine-grained enough. Consider the situation wh | Arguably, the origin is not fine-grained enough. Consider the situatio | |||
ere | n where | |||
Alice visits a site and authorizes it to make a single call. If consen t is | Alice visits a site and authorizes it to make a single call. If consen t is | |||
expressed solely in terms of origin, then at any future visit to that | expressed solely in terms of the origin, then upon any future visit to | |||
site (including one induced via mash-up or ad network), the site can | that | |||
site (including one induced via a mash-up or ad network), the site can | ||||
bug Alice's computer, use the computer to place bogus calls, etc. | bug Alice's computer, use the computer to place bogus calls, etc. | |||
While in principle Alice could grant and then | While in principle Alice could grant and then | |||
revoke the privilege, in practice privileges accumulate; if we are con cerned | revoke the privilege, in practice privileges accumulate; if we are con cerned | |||
about this attack, something else is needed. There are a number of pot ential countermeasures to | about this attack, something else is needed. There are a number of pot ential countermeasures to | |||
this sort of issue. | this sort of issue. | |||
</t> | </t> | |||
<t><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="Individual Consent"></t><t>Ask the user for permission fo | <dt>Individual Consent</dt> | |||
r each call.</t> | <dd>Ask the user for permission for each call.</dd> | |||
<t></t> | <dt>Callee-oriented Consent</dt> | |||
<t hangText="Callee-oriented Consent"></t><t>Only allow calls to a giv | <dd>Only allow calls to a given user.</dd> | |||
en user.</t> | <dt>Cryptographic Consent</dt> | |||
<t></t> | <dd>Only allow calls to a given set of peer keying material or | |||
<t hangText="Cryptographic Consent"></t><t>Only allow calls to a given | to a cryptographically established identity.</dd> | |||
set of peer keying material or | </dl> | |||
to a cryptographically established identity.</t> | <t> | |||
</list> | ||||
</t> | ||||
<t> | ||||
Unfortunately, none of these approaches is satisfactory for all cases. | Unfortunately, none of these approaches is satisfactory for all cases. | |||
As discussed above, individual consent puts the user's approval | As discussed above, individual consent puts the user's approval | |||
in the UI flow for every call. Not only does this quickly become annoy ing | in the UI flow for every call. Not only does this quickly become annoy ing | |||
but it can train the user to simply click "OK", at which point the con sent becomes | but it can train the user to simply click "OK", at which point the con sent becomes | |||
useless. Thus, while it may be necessary to have individual consent in some | useless. Thus, while it may be necessary to have individual consent in some | |||
case, this is not a suitable solution for (for instance) the calling | cases, this is not a suitable solution for (for instance) the calling | |||
service case. Where necessary, in-flow user interfaces must be careful ly | service case. Where necessary, in-flow user interfaces must be careful ly | |||
designed to avoid the risk of the user blindly clicking through. | designed to avoid the risk of the user blindly clicking through. | |||
</t> | </t> | |||
<t> | <t> | |||
The other two options are designed to restrict calls to a given target . | The other two options are designed to restrict calls to a given target . | |||
Callee-oriented consent provided by the calling site | Callee-oriented consent provided by the calling site | |||
would not work well because a malicious site can claim that the | would not work well because a malicious site can claim that the | |||
user is calling any user of his choice. One fix for this is to tie cal ls to a | user is calling any user of his choice. One fix for this is to tie cal ls to a | |||
cryptographically-established identity. While not suitable for all cas es, | cryptographically established identity. While not suitable for all cas es, | |||
this approach may be useful for some. If we consider the case | this approach may be useful for some. If we consider the case | |||
of advertising, it's not particularly convenient | of advertising, it's not particularly convenient | |||
to require the advertiser to instantiate an iframe on the hosting site just | to require the advertiser to instantiate an iframe on the hosting site just | |||
to get permission; a more convenient approach is to cryptographically tie | to get permission; a more convenient approach is to cryptographically tie | |||
the advertiser's certificate to the communication directly. We're stil l | the advertiser's certificate to the communication directly. We're stil l | |||
tying permissions to origin here, but to the media origin (and-or dest | tying permissions to the origin here, but to the media origin (and/or | |||
ination) | destination) | |||
rather than to the Web origin. <xref target="I-D.ietf-rtcweb-security- | rather than to the Web origin. <xref target="RFC8827" format="default" | |||
arch"/> | /> | |||
describes mechanisms | describes mechanisms which facilitate this sort of consent. | |||
which facilitate this sort of consent. | </t> | |||
</t> | <t> | |||
<t> | ||||
Another case where media-level cryptographic identity makes sense is w hen a user | Another case where media-level cryptographic identity makes sense is w hen a user | |||
really does not trust the calling site. For instance, I might be worri ed that | really does not trust the calling site. For instance, I might be worri ed that | |||
the calling service will attempt to bug my computer, but I also want t o be | the calling service will attempt to bug my computer, but I also want t o be | |||
able to conveniently call my friends. If consent is tied to particular | able to conveniently call my friends. If consent is tied to particular | |||
communications endpoints, then my risk is limited. Naturally, it | communications endpoints, then my risk is limited. Naturally, it | |||
is somewhat challenging to design UI primitives which express this sor t | is somewhat challenging to design UI primitives that express this sort | |||
of policy. The problem becomes even more challenging in multi-user | of policy. The problem becomes even more challenging in multi-user | |||
calling cases. | calling cases. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Security Properties of the Calling Page"> | <name>Security Properties of the Calling Page</name> | |||
<t> | <t> | |||
Origin-based security is intended to secure against web attackers. How | Origin-based security is intended to secure against Web attackers. How | |||
ever, we must | ever, we must | |||
also consider the case of network attackers. Consider the case where I have | also consider the case of network attackers. Consider the case where I have | |||
granted permission to a calling service by an origin that has the HTTP scheme, | granted permission to a calling service by an origin that has the HTTP scheme, | |||
e.g., http://calling-service.example.com. If I ever use my computer on | e.g., <http://calling-service.example.com>. If I ever use my com puter on | |||
an unsecured network (e.g., a hotspot or if my own home wireless netwo rk | an unsecured network (e.g., a hotspot or if my own home wireless netwo rk | |||
is insecure), and browse any HTTP site, then an attacker can bug my co mputer. The attack proceeds | is insecure), and browse any HTTP site, then an attacker can bug my co mputer. The attack proceeds | |||
like this: | like this: | |||
</t> | </t> | |||
<t> | <ol spacing="normal" type="1"> | |||
<list style="numbers"> | <li>I connect to <http://anything.example.org/>. Note that thi | |||
<t>I connect to http://anything.example.org/. Note that this site is | s site is unaffiliated | |||
unaffiliated | with the calling service.</li> | |||
with the calling service.</t> | <li>The attacker modifies my HTTP connection to inject an IFRAME (or | |||
<t>The attacker modifies my HTTP connection to inject an IFRAME (or | a redirect) | |||
a redirect) | to <http://calling-service.example.com>.</li> | |||
to http://calling-service.example.com</t> | <li>The attacker forges the response from <http://calling-service | |||
<t>The attacker forges the response from http://calling-service.exa | .example.com/> to | |||
mple.com/ to | inject JS to initiate a call to himself.</li> | |||
inject JS to initiate a call to himself.</t> | </ol> | |||
</list> | ||||
</t> | <t> | |||
<t> | ||||
Note that this attack does not depend on the media being insecure. Bec ause the | Note that this attack does not depend on the media being insecure. Bec ause the | |||
call is to the attacker, it is also encrypted to him. Moreover, it nee d not | call is to the attacker, it is also encrypted to him. Moreover, it nee d not | |||
be executed immediately; the attacker can "infect" the origin semi-per manently | be executed immediately; the attacker can "infect" the origin semi-per manently | |||
(e.g., with a web worker or a popped-up window that is hidden under th e main window.) | (e.g., with a Web worker or a popped-up window that is hidden under th e main window) | |||
and thus be able to bug me long | and thus be able to bug me long | |||
after I have left the infected network. This risk is created by allowi ng | after I have left the infected network. This risk is created by allowi ng | |||
calls at all from a page fetched over HTTP. | calls at all from a page fetched over HTTP. | |||
</t> | </t> | |||
<t> | <t> | |||
Even if calls are only possible from HTTPS [RFC2818] sites, | Even if calls are only possible from HTTPS <xref target="RFC2818" form | |||
at="default"/> sites, | ||||
if those sites include active content (e.g., JavaScript) from an untru sted | if those sites include active content (e.g., JavaScript) from an untru sted | |||
site, that JavaScript is executed in the security context of the page | site, that JavaScript is executed in the security context of the page | |||
<xref target="finer-grained"/>. This could lead to compromise of a cal | <xref target="finer-grained" format="default"/>. This could lead to co | |||
l | mpromise of a call | |||
even if the parent page is safe. Note: this issue is not restricted | even if the parent page is safe. Note: This issue is not restricted | |||
to PAGES which contain untrusted content. If any page from a | to PAGES which contain untrusted content. | |||
<!-- [rfced] Section 4.1.4: Is "PAGES" capped for emphasis, or | ||||
should it be "pages"? (We see "a page" and "the page" used in nearby | ||||
text in this section.) If emphasis is desired, perhaps we could use | ||||
the <strong> element (Section 2.50 of RFC 7991) here. | ||||
Original: | ||||
Note: this issue is not restricted to PAGES | ||||
which contain untrusted content. --> | ||||
If any page from a | ||||
given origin ever loads JavaScript from an attacker, then it is | given origin ever loads JavaScript from an attacker, then it is | |||
possible for that attacker to infect the browser's notion of that | possible for that attacker to infect the browser's notion of that | |||
origin semi-permanently. | origin semi-permanently. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.rtc-comm-consent" numbered="true" toc="default"> | ||||
<section title="Communications Consent Verification" anchor="sec.rtc-comm- | <name>Communications Consent Verification</name> | |||
consent"> | ||||
<t> | <t> | |||
As discussed in <xref target="sec.cors-etc"/>, allowing web applicatio ns unrestricted network access | As discussed in <xref target="sec.cors-etc" format="default"/>, allowi ng Web applications unrestricted network access | |||
via the browser introduces the risk of using the browser as an attack platform against | via the browser introduces the risk of using the browser as an attack platform against | |||
machines which would not otherwise be accessible to the malicious site | machines which would not otherwise be accessible to the malicious | |||
, for | site -- for | |||
instance because they are topologically restricted (e.g., behind a fir | instance, because they are topologically restricted (e.g., behind a fi | |||
ewall or NAT). | rewall or NAT). | |||
In order to prevent this form of attack as well as cross-protocol atta | In order to prevent this form of attack as well as cross-protocol atta | |||
cks it is | cks, it is | |||
important to require that the target of traffic explicitly consent to receiving | important to require that the target of traffic explicitly consent to receiving | |||
the traffic in question. Until that consent has been verified for a gi ven endpoint, | the traffic in question. Until that consent has been verified for a gi ven endpoint, | |||
traffic other than the consent handshake MUST NOT be sent to that endp oint. | traffic other than the consent handshake <bcp14>MUST NOT</bcp14> be se nt to that endpoint. | |||
</t> | </t> | |||
<t> | <t> | |||
Note that consent verification is not sufficient to prevent overuse of | Note that consent verification is not sufficient to prevent overuse of | |||
network resources. Because WebRTC allows for a Web site to create | network resources. Because WebRTC allows for a Web site to create | |||
data flows between two browser instances without user consent, it is | data flows between two browser instances without user consent, it is | |||
possible for a malicious site to chew up a significant amount of a use r's | possible for a malicious site to chew up a significant amount of a use r's | |||
bandwidth without incurring significant costs to himself by setting | bandwidth without incurring significant costs to himself by setting | |||
up such a channel to another user. However, as a practical matter | up such a channel to another user. However, as a practical matter | |||
there are a large number of Web sites which can act as data sources, | there are a large number of Web sites which can act as data sources, | |||
so an attacker can at least use downlink bandwidth with existing | so an attacker can at least use downlink bandwidth with existing | |||
Web APIs. However, this potential DoS vector reinforces the need | Web APIs. However, this potential DoS vector reinforces the need | |||
for adequate congestion control for WebRTC protocols to ensure that | for adequate congestion control for WebRTC protocols to ensure that | |||
they play fair with other demands on the user's bandwidth. | they play fair with other demands on the user's bandwidth. | |||
</t> | </t> | |||
<section title="ICE" anchor="sec.ice"> | <section anchor="sec.ice" numbered="true" toc="default"> | |||
<name>ICE</name> | ||||
<t> | <t> | |||
Verifying receiver consent requires some sort of explicit handshake, b ut conveniently | Verifying receiver consent requires some sort of explicit handshake, b ut conveniently | |||
we already need one in order to do NAT hole-punching. Interactive Conn ectivity Establishment (ICE) <xref target="RFC8445"/> includes a handshake | we already need one in order to do NAT hole-punching. Interactive Conn ectivity Establishment (ICE) <xref target="RFC8445" format="default"/> includes a handshake | |||
designed to verify that the receiving element wishes to receive traffi c from the | designed to verify that the receiving element wishes to receive traffi c from the | |||
sender. It | sender. It | |||
is important to remember here that the site initiating ICE is | is important to remember here that the site initiating ICE is | |||
presumed malicious; in order for the handshake to be secure the | presumed malicious; in order for the handshake to be secure, the | |||
receiving element MUST demonstrate receipt/knowledge of some value | receiving element <bcp14>MUST</bcp14> demonstrate receipt/knowledge of | |||
some value | ||||
not available to the site (thus preventing the site from forging | not available to the site (thus preventing the site from forging | |||
responses). In order to achieve this objective with ICE, the STUN | responses). In order to achieve this objective with ICE, the | |||
transaction IDs must be generated by the browser and MUST NOT be made | Session Traversal Utilities for NAT (STUN) | |||
transaction IDs must be generated by the browser and <bcp14>MUST NOT</ | ||||
bcp14> be made | ||||
available to the initiating script, even via a diagnostic interface. | available to the initiating script, even via a diagnostic interface. | |||
Verifying receiver consent also requires verifying the receiver wants | Verifying receiver consent also requires verifying the receiver wants | |||
to receive traffic from a particular sender, and at this time; for | to receive traffic from a particular sender, and at this time; for | |||
example a malicious site may simply attempt ICE to known servers | example, a malicious site may simply attempt ICE to known servers | |||
that are using ICE for other sessions. ICE provides this verification | that are using ICE for other sessions. ICE provides this verification | |||
as well, by using the STUN credentials as a form of per-session shared | as well, by using the STUN credentials as a form of per-session shared | |||
secret. Those credentials are known to the Web application, but would | secret. Those credentials are known to the Web application, but would | |||
need to also be known and used by the STUN-receiving element to be use ful. | need to also be known and used by the STUN-receiving element to be use ful. | |||
</t> | </t> | |||
<t> | <t> | |||
There also needs to be some mechanism for the browser to verify that | There also needs to be some mechanism for the browser to verify that | |||
the target of the traffic continues to wish to receive it. Because I CE keepalives are | the target of the traffic continues to wish to receive it. Because I CE keepalives are | |||
indications, they will not work here. | indications, they will not work here. | |||
<xref target="RFC7675"/> describes the mechanism | <xref target="RFC7675" format="default"/> describes the mechanism | |||
for providing consent freshness. | for providing consent freshness. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Masking" anchor="sec.masking"> | <section anchor="sec.masking" numbered="true" toc="default"> | |||
<name>Masking</name> | ||||
<t> | <t> | |||
Once consent is verified, there still is some concern about misinter pretation | Once consent is verified, there still is some concern about misinter pretation | |||
attacks as described by Huang et al.<xref target="huang-w2sp"/>. | attacks as described by Huang et al. <xref target="huang-w2sp" forma | |||
Where TCP is used the risk is substantial due to the potential | t="default"/>. | |||
presence of transparent proxies and therefore if TCP is to be used, | Where TCP is used, the risk is substantial due to the potential | |||
then WebSockets style masking MUST be employed. | presence of transparent proxies; therefore, if TCP is to be used, | |||
then WebSockets-style masking <bcp14>MUST</bcp14> be employed. | ||||
</t> | </t> | |||
<t> | <t> | |||
Since DTLS (with the anti-chosen plaintext mechanisms required by | Since DTLS (with the anti-chosen plaintext mechanisms required by | |||
TLS 1.1) does not allow the attacker to generate predictable | TLS 1.1) does not allow the attacker to generate predictable | |||
ciphertext, there is no need for masking of protocols running over | ciphertext, there is no need for masking of protocols running over | |||
DTLS (e.g. SCTP over DTLS, UDP over DTLS, etc.). | DTLS (e.g., SCTP over DTLS, UDP over DTLS, etc.). | |||
</t> | </t> | |||
<t> | <t> | |||
Note that in principle an attacker could exert some control | Note that in principle an attacker could exert some control | |||
over SRTP packets by using a combination of the WebAudio API | over Secure Real-time Transport Protocol (SRTP) packets by using a c ombination of the WebAudio API | |||
and extremely tight timing control. | and extremely tight timing control. | |||
The primary risk here seems to be carriage of SRTP over TURN TCP. | The primary risk here seems to be carriage of SRTP over Traversal | |||
Using Relays around NAT (TURN) TCP. | ||||
However, as SRTP packets have an extremely characteristic packet | However, as SRTP packets have an extremely characteristic packet | |||
header it seems unlikely that any but the most aggressive | header it seems unlikely that any but the most aggressive | |||
intermediaries would be confused into thinking that another | intermediaries would be confused into thinking that another | |||
application layer protocol was in use. | application-layer protocol was in use. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Backward Compatibility"> | <section numbered="true" toc="default"> | |||
<name>Backward Compatibility</name> | ||||
<t> | <t> | |||
A requirement to use ICE limits compatibility with legacy non-ICE cl ients. | A requirement to use ICE limits compatibility with legacy non-ICE cl ients. | |||
It seems unsafe to completely remove the requirement for some check. | It seems unsafe to completely remove the requirement for some check. | |||
All proposed checks have the common feature that the browser | All proposed checks have the common feature that the browser | |||
sends some message to the candidate traffic recipient | sends some message to the candidate traffic recipient | |||
and refuses to send other traffic until that message has been | and refuses to send other traffic until that message has been | |||
replied to. The message/reply pair must be generated in such | replied to. The message/reply pair must be generated in such | |||
a way that an attacker who controls the Web application | a way that an attacker who controls the Web application | |||
cannot forge them, generally by having the message contain some | cannot forge them, generally by having the message contain some | |||
secret value that must be incorporated (e.g., echoed, hashed into, | secret value that must be incorporated (e.g., echoed, hashed into, | |||
etc.). Non-ICE candidates for this role (in cases where the | etc.). Non-ICE candidates for this role (in cases where the | |||
legacy endpoint has a public address) include: | legacy endpoint has a public address) include: | |||
</t> | </t> | |||
<t> | <ul spacing="normal"> | |||
<list style="symbols"> | <li>STUN checks without using ICE (i.e., the non-RTC-web endpoint se | |||
<t>STUN checks without using ICE (i.e., the non-RTC-web endpoint s | ts up a STUN responder).</li> | |||
ets up a STUN responder.)</t> | <li>Use of the RTP Control Protocol (RTCP) as an implicit reachabili | |||
<t>Use of RTCP as an implicit reachability check.</t> | ty check.</li> | |||
</list> | </ul> | |||
</t> | ||||
<t> | <t> | |||
In the RTCP approach, the WebRTC endpoint is allowed to send | In the RTCP approach, the WebRTC endpoint is allowed to send | |||
a limited number of RTP packets prior to receiving consent. This | a limited number of RTP packets prior to receiving consent. This | |||
allows a short window of attack. In addition, some legacy endpoints | allows a short window of attack. In addition, some legacy endpoints | |||
do not support RTCP, so this is a much more expensive solution for | do not support RTCP, so this is a much more expensive solution for | |||
such endpoints, for which it would likely be easier to implement ICE . | such endpoints, for which it would likely be easier to implement ICE . | |||
For these two reasons, an RTCP-based approach does not seem to | For these two reasons, an RTCP-based approach does not seem to | |||
address the security issue satisfactorily. | address the security issue satisfactorily. | |||
</t> | </t> | |||
<t> | <t> | |||
skipping to change at line 683 ¶ | skipping to change at line 714 ¶ | |||
the recipient is running some kind of STUN endpoint but unless | the recipient is running some kind of STUN endpoint but unless | |||
the STUN responder is integrated with the ICE username/password | the STUN responder is integrated with the ICE username/password | |||
establishment system, the WebRTC endpoint cannot verify that | establishment system, the WebRTC endpoint cannot verify that | |||
the recipient consents to this particular call. This may be an | the recipient consents to this particular call. This may be an | |||
issue if existing STUN servers are operated at addresses that | issue if existing STUN servers are operated at addresses that | |||
are not able to handle bandwidth-based attacks. Thus, this | are not able to handle bandwidth-based attacks. Thus, this | |||
approach does not seem satisfactory either. | approach does not seem satisfactory either. | |||
</t> | </t> | |||
<t> | <t> | |||
If the systems are tightly integrated (i.e., the STUN endpoint respo nds with | If the systems are tightly integrated (i.e., the STUN endpoint respo nds with | |||
responses authenticated with ICE credentials) then this issue | responses authenticated with ICE credentials), then this issue | |||
does not exist. However, such a design is very close to an ICE-Lite | does not exist. However, such a design is very close to an ICE-Lite | |||
implementation (indeed, arguably is one). | implementation (indeed, arguably is one). | |||
An intermediate approach would be to have a STUN extension that indi cated | An intermediate approach would be to have a STUN extension that indi cated | |||
that one was responding to WebRTC checks but not computing | that one was responding to WebRTC checks but not computing | |||
integrity checks based on the ICE credentials. This would allow the | integrity checks based on the ICE credentials. This would allow the | |||
use of standalone STUN servers without the risk of confusing them | use of standalone STUN servers without the risk of confusing them | |||
with legacy STUN servers. If a non-ICE legacy solution is needed, | with legacy STUN servers. If a non-ICE legacy solution is needed, | |||
then this is probably the best choice. | then this is probably the best choice. | |||
</t> | </t> | |||
<t> | <t> | |||
Once initial consent is verified, we also need to verify continuing | Once initial consent is verified, we also need to verify continuing | |||
consent, in order to avoid attacks where two people briefly share | consent, in order to avoid attacks where two people briefly share | |||
an IP (e.g., behind a NAT in an Internet cafe) and the attacker | an IP (e.g., behind a NAT in an Internet cafe) and the attacker | |||
arranges for a large, unstoppable, traffic flow to the | arranges for a large, unstoppable, traffic flow to the | |||
network and then leaves. The appropriate technologies here are | network and then leaves. The appropriate technologies here are | |||
fairly similar to those for initial consent, though are perhaps | fairly similar to those for initial consent, though are perhaps | |||
weaker since the threats are less severe. | weaker since the threats are less severe. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.ip.location" numbered="true" toc="default"> | ||||
<section title="IP Location Privacy" anchor="sec.ip.location"> | <name>IP Location Privacy</name> | |||
<t> | <t> | |||
Note that as soon as the callee sends their ICE candidates, the | Note that as soon as the callee sends their ICE candidates, the | |||
caller learns the callee's IP addresses. The callee's server reflexi ve | caller learns the callee's IP addresses. The callee's server-reflexi ve | |||
address reveals a lot of information about the callee's location. | address reveals a lot of information about the callee's location. | |||
<!-- [rfced] Section 4.2.4: Per author feedback for RFC 8839 and per | ||||
other documents in this cluster, we hyphenated the term "server | ||||
reflexive". Please let us know any objections. | ||||
Original: | ||||
The callee's server | ||||
reflexive address reveals a lot of information about the callee's | ||||
location. | ||||
Currently: | ||||
The callee's server- | ||||
reflexive address reveals a lot of information about the callee's | ||||
location. --> | ||||
In order to avoid tracking, implementations may wish to suppress | In order to avoid tracking, implementations may wish to suppress | |||
the start of ICE negotiation until the callee has answered. In | the start of ICE negotiation until the callee has answered. In | |||
addition, either side may wish to hide their location from the other | addition, either side may wish to hide their location from the other | |||
side entirely by forcing all traffic through a TURN server. | side entirely by forcing all traffic through a TURN server. | |||
</t> | </t> | |||
<t> | <t> | |||
In ordinary operation, the site learns the browser's IP address, | In ordinary operation, the site learns the browser's IP address, | |||
though it may be hidden via mechanisms like Tor [http://www.torproj | though it may be hidden via mechanisms like Tor <eref | |||
ect.org] or a VPN. | brackets="angle" target="https://www.torproject.org"/> or a VPN. | |||
However, because sites can cause the browser to provide | However, because sites can cause the browser to provide | |||
IP addresses, this provides a mechanism for sites to learn | IP addresses, this provides a mechanism for sites to learn | |||
about the user's network environment even if the user is behind | about the user's network environment even if the user is behind | |||
a VPN that masks their IP address. Implementations may wish | a VPN that masks their IP address. Implementations may wish | |||
to provide settings which suppress all non-VPN candidates if | to provide settings which suppress all non-VPN candidates if | |||
the user is on certain kinds of VPN, especially privacy-oriented | the user is on certain kinds of VPN, especially privacy-oriented | |||
systems such as Tor. See <xref target="I-D.ietf-rtcweb-ip-handling "/> | systems such as Tor. See <xref target="RFC8828" format="default"/> | |||
for additional information. | for additional information. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.rtc-comsec" numbered="true" toc="default"> | ||||
<section title="Communications Security" anchor="sec.rtc-comsec"> | <name>Communications Security</name> | |||
<t> | <t> | |||
Finally, we consider a problem familiar from the SIP world: communicat ions security. | Finally, we consider a problem familiar from the SIP world: communicat ions security. | |||
For obvious reasons, it MUST be possible for the communicating parties to establish | For obvious reasons, it <bcp14>MUST</bcp14> be possible for the commun icating parties to establish | |||
a channel which is secure against both message recovery and message mo dification. | a channel which is secure against both message recovery and message mo dification. | |||
(See <xref target="RFC5479"/> for more details.) | (See <xref target="RFC5479" format="default"/> for more details.) | |||
This service must be provided for both data and voice/video. | This service must be provided for both data and voice/video. | |||
Ideally the same security mechanisms would be used for both types of c ontent. | Ideally the same security mechanisms would be used for both types of c ontent. | |||
Technology for providing this | Technology for providing this | |||
service (for instance, SRTP <xref target="RFC3711"/>, DTLS <xref targe | service (for instance, SRTP <xref target="RFC3711" format="default"/>, | |||
t="RFC6347"/> and | DTLS <xref target="RFC6347" format="default"/>, and | |||
DTLS-SRTP <xref target="RFC5763"/>) is well understood. However, we mu | DTLS-SRTP <xref target="RFC5763" format="default"/>) is well understoo | |||
st | d. However, we must | |||
examine this technology in the WebRTC context, where the threat | examine this technology in the WebRTC context, where the threat | |||
model is somewhat different. | model is somewhat different. | |||
</t> | </t> | |||
<t> | <t> | |||
In general, it is important to understand that unlike a conventional S IP proxy, | In general, it is important to understand that unlike a conventional S IP proxy, | |||
the calling service (i.e., the Web server) controls not only the chann el | the calling service (i.e., the Web server) controls not only the chann el | |||
between the communicating endpoints but also the application running o n | between the communicating endpoints but also the application running o n | |||
the user's browser. | the user's browser. | |||
While in principle it is possible for the browser to cut the calling s ervice | While in principle it is possible for the browser to cut the calling s ervice | |||
out of the loop and directly present trusted information (and perhaps get | out of the loop and directly present trusted information (and perhaps get | |||
consent), practice in modern browsers is to avoid this whenever possib le. | consent), practice in modern browsers is to avoid this whenever possib le. | |||
"In-flow" modal dialogs which require the user to consent to specific | "In&nbhy;flow" modal dialogs which | |||
actions are particularly disfavored as human factors research indicate s | actions are particularly disfavored as human factors research indicate s | |||
that unless they are made extremely invasive, users simply agree to | that unless they are made extremely invasive, users simply agree to | |||
them without actually consciously giving consent. <xref target="abarth -rtcweb"/>. | them without actually consciously giving consent <xref target="abarth- rtcweb" format="default"/>. | |||
Thus, nearly all the UI will necessarily be rendered by the | Thus, nearly all the UI will necessarily be rendered by the | |||
browser but under control of the calling service. This likely includes the | browser but under control of the calling service. This likely includes the | |||
peer's identity information, which, after all, is only meaningful in | peer's identity information, which, after all, is only meaningful in | |||
the context of some calling service. | the context of some calling service. | |||
</t> | </t> | |||
<t> | <t> | |||
This limitation does not mean that preventing attack by the calling se rvice | This limitation does not mean that preventing attack by the calling se rvice | |||
is completely hopeless. However, we need to distinguish between two | is completely hopeless. However, we need to distinguish between two | |||
classes of attack: | classes of attack: | |||
</t> | </t> | |||
<t><list style="hanging"> | <dl newline="true" spacing="normal"> | |||
<t hangText="Retrospective compromise of calling service."></t><t>The | <dt>Retrospective compromise of calling service:</dt> | |||
calling service | <dd>The calling service | |||
is non-malicious during a call but subsequently is compromised and wis hes to | is non-malicious during a call but subsequently is compromised and wis hes to | |||
attack an older call (often called a "passive attack")</t> | attack an older call (often called a "passive attack").</dd> | |||
<t></t> | <dt>During-call attack by calling service:</dt> | |||
<t hangText="During-call attack by calling service."></t><t>The callin | <dd>The calling service is compromised | |||
g service is compromised | during the call it wishes to attack (often called an "active attack"). | |||
during the call it wishes to attack (often called an "active attack"). | </dd> | |||
</t> | </dl> | |||
</list> | ||||
</t> | ||||
<t> | <t> | |||
Providing security against the former type of attack is practical usin g the | Providing security against the former type of attack is practical usin g the | |||
techniques discussed in <xref target="sec.retrospective-compromise"/>. | techniques discussed in <xref target="sec.retrospective-compromise" fo rmat="default"/>. | |||
However, it is extremely difficult to prevent a | However, it is extremely difficult to prevent a | |||
trusted but malicious calling service from actively attacking a user's calls, | trusted but malicious calling service from actively attacking a user's calls, | |||
either by mounting a Man-in-the-Middle (MITM) attack or by diverting t hem entirely. | either by mounting a Man-in-the-Middle (MITM) attack or by diverting t hem entirely. | |||
(Note that this attack applies equally to a network attacker if commun ications | (Note that this attack applies equally to a network attacker if commun ications | |||
to the calling service are not secured.) We discuss some potential app roaches | to the calling service are not secured.) We discuss some potential app roaches | |||
and why they are likely to be impractical in <xref target="sec.during- attack"/>. | and why they are likely to be impractical in <xref target="sec.during- attack" format="default"/>. | |||
</t> | </t> | |||
<section title="Protecting Against Retrospective Compromise" anchor="sec | <section anchor="sec.retrospective-compromise" numbered="true" toc="defa | |||
.retrospective-compromise"> | ult"> | |||
<name>Protecting against Retrospective Compromise</name> | ||||
<t> | <t> | |||
In a retrospective attack, the calling service was uncompromised dur ing | In a retrospective attack, the calling service was uncompromised dur ing | |||
the call, but that an attacker subsequently wants to recover the con tent of the | the call, but an attacker subsequently wants to recover the content of the | |||
call. We assume that the attacker has access to the protected media stream | call. We assume that the attacker has access to the protected media stream | |||
as well as having full control of the calling service. | as well as full control of the calling service. | |||
</t> | </t> | |||
<t> | <t> | |||
If the calling service has access to the traffic keying material | If the calling service has access to the traffic keying material | |||
(as in SDES <xref target="RFC4568"/>), then retrospective attack | (as in SDES <xref target="RFC4568" format="default"/>), then retrosp ective attack | |||
is trivial. | is trivial. | |||
This form of attack is particularly serious in the Web context becau | ||||
se | <!-- [rfced] Section 4.3.1: We would like to expand "SDES" for ease | |||
of the reader. Does SDES refer to "Security Description" here, or perhaps "Sour | ||||
ce Description" per | ||||
several other documents in this cluster (e.g., RFC-to-be 8852 <draft-ietf-avtext | ||||
-rid>)? | ||||
Original: | ||||
If the calling service has access to the traffic keying material (as | ||||
in SDES [RFC4568]), then retrospective attack is trivial. --> | ||||
This form of attack is particularly serious in the context of the We | ||||
b because | ||||
it is standard practice in Web services to run extensive logging and monitoring. Thus, it is highly | it is standard practice in Web services to run extensive logging and monitoring. Thus, it is highly | |||
likely that if the traffic key is part of any HTTP request it will b e logged somewhere and thus | likely that if the traffic key is part of any HTTP request it will b e logged somewhere and thus | |||
subject to subsequent compromise. It is this consideration that make s an automatic, public key-based | subject to subsequent compromise. It is this consideration that make s an automatic, public key-based | |||
key exchange mechanism imperative for WebRTC (this is a good idea fo r any communications | key exchange mechanism imperative for WebRTC (this is a good idea fo r any communications | |||
security system) and this mechanism SHOULD provide perfect forward s | security system), and this mechanism <bcp14>SHOULD</bcp14> provide P | |||
ecrecy (PFS). | erfect Forward Secrecy (PFS). | |||
The signaling channel/calling service can be used to authenticate th | The signaling channel / calling service can be used to authenticate | |||
is mechanism. | this mechanism. | |||
</t> | </t> | |||
<t> | <t> | |||
In addition, if end-to-end keying is in used, | In addition, if end-to-end keying is used, | |||
the system MUST NOT provide any APIs to extract either long-term | the system <bcp14>MUST NOT</bcp14> provide any APIs to extract eithe | |||
r long-term | ||||
keying material or to directly access any stored traffic keys. | keying material or to directly access any stored traffic keys. | |||
<!-- [rfced] Section 4.3.1: To what does "either" refer in this | ||||
sentence? | ||||
Original: | ||||
In addition, if end-to-end keying is in used, the system MUST NOT | ||||
provide any APIs to extract either long-term keying material or to | ||||
directly access any stored traffic keys. --> | ||||
Otherwise, an attacker who subsequently compromised the calling serv ice | Otherwise, an attacker who subsequently compromised the calling serv ice | |||
might be able to use those APIs to recover the traffic keys and thus | might be able to use those APIs to recover the traffic keys and thus | |||
compromise the traffic. | compromise the traffic. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Protecting Against During-Call Attack" anchor="sec.durin | <section anchor="sec.during-attack" numbered="true" toc="default"> | |||
g-attack"> | <name>Protecting against During-Call Attack</name> | |||
<t> | <t> | |||
Protecting against attacks during a call is a more difficult proposi tion. Even | Protecting against attacks during a call is a more difficult proposi tion. Even | |||
if the calling service cannot directly access keying material (as re commended | if the calling service cannot directly access keying material (as re commended | |||
in the previous section), it can simply mount a man-in-the-middle at tack | in the previous section), it can simply mount a man-in-the-middle at tack | |||
on the connection, telling Alice that she is calling Bob and Bob tha t | on the connection, telling Alice that she is calling Bob and Bob tha t | |||
he is calling Alice, while in fact the calling service is acting as | he is calling Alice, while in fact the calling service is acting as | |||
a calling bridge and capturing all the traffic. Protecting against | a calling bridge and capturing all the traffic. Protecting against | |||
this form of attack requires positive authentication of the remote | this form of attack requires positive authentication of the remote | |||
endpoint such as explicit out-of-band key verification (e.g., by a f ingerprint) | endpoint such as explicit out-of-band key verification (e.g., by a f ingerprint) | |||
or a third-party identity service as described in | or a third-party identity service as described in | |||
<xref target="I-D.ietf-rtcweb-security-arch"/>. | <xref target="RFC8827" format="default"/>. | |||
</t> | </t> | |||
<section title="Key Continuity" anchor="sec.key-continuity"> | <section anchor="sec.key-continuity" numbered="true" toc="default"> | |||
<name>Key Continuity</name> | ||||
<t> | <t> | |||
One natural approach is to use "key continuity". While a malicious | One natural approach is to use "key continuity". While a malicious | |||
calling service can present any identity it chooses to the user, | calling service can present any identity it chooses to the user, | |||
it cannot produce a private key that maps to a given public key. | it cannot produce a private key that maps to a given public key. | |||
Thus, it is possible for the browser to note a given user's | Thus, it is possible for the browser to note a given user's | |||
public key and generate an alarm whenever that user's key | public key and generate an alarm whenever that user's key | |||
changes. SSH <xref target="RFC4251"/> uses a similar technique. | changes. The Secure Shell (SSH) protocol <xref target="RFC4251" fo rmat="default"/> uses a similar technique. | |||
(Note that the need to avoid explicit user consent on every call | (Note that the need to avoid explicit user consent on every call | |||
precludes the browser requiring an immediate manual check of the p eer's key). | precludes the browser requiring an immediate manual check of the p eer's key.) | |||
</t> | </t> | |||
<t> | <t> | |||
Unfortunately, this sort of key continuity mechanism is far less | Unfortunately, this sort of key continuity mechanism is far less | |||
useful in the WebRTC context. First, much of the virtue of | useful in the WebRTC context. First, much of the virtue of | |||
WebRTC (and any Web application) is that it is not bound to | WebRTC (and any Web application) is that it is not bound to a | |||
particular piece of client software. Thus, it will be not only | particular piece of client software. Thus, it will be not only | |||
possible but routine for a user to use multiple browsers | possible but routine for a user to use multiple browsers | |||
on different computers which will of course have different | on different computers that will of course have different | |||
keying material (SACRED <xref target="RFC3760"/> notwithstanding.) | keying material (Securely Available Credentials (SACRED) <xref tar | |||
get="RFC3760" format="default"/> notwithstanding). | ||||
Thus, users will frequently be alerted to key mismatches which | Thus, users will frequently be alerted to key mismatches which | |||
are in fact completely legitimate, with the result that they | are in fact completely legitimate, with the result that they | |||
are trained to simply click through them. As it is known that | are trained to simply click through them. As it is known that | |||
users routinely will click through far more dire warnings | users routinely will click through far more dire warnings | |||
<xref target="cranor-wolf"/>, it seems extremely unlikely that | <xref target="cranor-wolf" format="default"/>, it seems extremely unlikely that | |||
any key continuity mechanism will be effective rather than | any key continuity mechanism will be effective rather than | |||
simply annoying. | simply annoying. | |||
</t> | </t> | |||
<t> | <t> | |||
Moreover, it is trivial to bypass even this kind of mechanism. | Moreover, it is trivial to bypass even this kind of mechanism. | |||
Recall that unlike the case of SSH, the browser never directly | Recall that unlike the case of SSH, the browser never directly | |||
gets the peer's identity from the user. Rather, it is provided | gets the peer's identity from the user. Rather, it is provided | |||
by the calling service. Even enabling a mechanism of this type | by the calling service. Even enabling a mechanism of this type | |||
would require an API to allow the calling service to tell the | would require an API to allow the calling service to tell the | |||
browser "this is a call to user X". All the calling service | browser "this is a call to user X." All the calling service | |||
needs to do to avoid triggering a key continuity warning | needs to do to avoid triggering a key continuity warning | |||
is to tell the browser that "this is a call to user Y" | is to tell the browser that "this is a call to user Y" | |||
where Y is confusable with X. | where Y is confusable with X. | |||
Even if the user actually checks the other side's name | Even if the user actually checks the other side's name | |||
(which all available evidence indicates is unlikely), | (which all available evidence indicates is unlikely), | |||
this would require (a) the browser to use the trusted UI | this would require (a) the browser to use the trusted UI | |||
to provide the name and (b) the user to not be fooled by | to provide the name and (b) the user to not be fooled by | |||
similar appearing names. | similar appearing names. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Short Authentication Strings" anchor="sec.sas"> | <section anchor="sec.sas" numbered="true" toc="default"> | |||
<name>Short Authentication Strings</name> | ||||
<t> | <t> | |||
ZRTP <xref target="RFC6189"/> uses a "short authentication string" | ZRTP <xref target="RFC6189" format="default"/> uses a "Short Authe | |||
(SAS) which is derived | ntication String" (SAS) which is derived | |||
from the key agreement protocol. This SAS is designed to be compar | from the key agreement protocol. | |||
ed | ||||
<!-- [rfced] Section 4.3.2.2: Is the SAS always derived from the key | ||||
agreement protocol (in which case "(SAS), which is" would be correct) | ||||
or only sometimes derived from the key agreement protocol (in which | ||||
case "(SAS) that is" would be correct)? | ||||
Original: | ||||
ZRTP [RFC6189] uses a "short authentication string" (SAS) which is | ||||
derived from the key agreement protocol. --> | ||||
This SAS is designed to be compared | ||||
by the users (e.g., read aloud over the voice channel or | by the users (e.g., read aloud over the voice channel or | |||
transmitted via an out of band channel) and if confirmed by both s ides precludes MITM | transmitted via an out-of-band channel) and if confirmed by both s ides precludes MITM | |||
attack. The intention is that the SAS is used once and then key | attack. The intention is that the SAS is used once and then key | |||
continuity (though a different mechanism from that discussed | continuity (though a different mechanism from that discussed | |||
above) is used thereafter. | above) is used thereafter. | |||
<!-- [rfced] Section 4.3.2.2: Should "though a different mechanism" | ||||
be "through a different mechanism" or "although using a different | ||||
mechanism" here? | ||||
Original: | ||||
The intention is that the SAS is used | ||||
once and then key continuity (though a different mechanism from that | ||||
discussed above) is used thereafter. --> | ||||
</t> | </t> | |||
<t> | <t> | |||
Unfortunately, the SAS does not offer a practical solution to the | Unfortunately, the SAS does not offer a practical solution to the | |||
problem of a compromised calling service. "Voice conversion " systems, which modify | problem of a compromised calling service. "Voice conversion " systems, which modify | |||
voice from one speaker to make it sound like another, | voice from one speaker to make it sound like another, | |||
are an active area of research. | are an active area of research. | |||
These systems are already good enough to fool both | These systems are already good enough to fool both | |||
automatic recognition systems <xref target="farus-conversion"/> an | automatic recognition systems <xref target="farrus-conversion" for | |||
d | mat="default"/> and | |||
humans <xref target="kain-conversion"/> in many cases, and are of | humans <xref target="kain-conversion" format="default"/> in many c | |||
course likely | ases, and are of course likely | |||
to improve in future, especially in an environment where the user just wants | to improve in future, especially in an environment where the user just wants | |||
to get on with the phone call. | to get on with the phone call. | |||
Thus, even if SAS is effective today, it is likely not to be so fo r much longer. | Thus, even if the SAS is effective today, it is likely not to be s o for much longer. | |||
</t> | </t> | |||
<t> | <t> | |||
Additionally, it is unclear that users will actually use an SAS. | Additionally, it is unclear that users will actually use an SAS. | |||
As discussed above, the browser UI constraints preclude requiring | As discussed above, the browser UI constraints preclude requiring | |||
the SAS exchange prior to completing the call and so it must be | the SAS exchange prior to completing the call and so it must be | |||
voluntary; at most the browser will provide some UI indicator that the | voluntary; at most the browser will provide some UI indicator that the | |||
SAS has not yet been checked. However, it is well-known that when | SAS has not yet been checked. However, it is well known that when | |||
faced with optional security mechanisms, many users simply | faced with optional security mechanisms, many users simply | |||
ignore them <xref target="whitten-johnny"/>. | ignore them <xref target="whitten-johnny" format="default"/>. | |||
</t> | </t> | |||
<t> | <t> | |||
Once users have checked the SAS once, key continuity | Once users have checked the SAS once, key continuity | |||
is required to avoid them needing to check it on every call. | is required to avoid them needing to check it on every call. | |||
However, this is problematic for reasons indicated in | However, this is problematic for reasons indicated in | |||
<xref target="sec.key-continuity"/>. | <xref target="sec.key-continuity" format="default"/>. | |||
In principle it is of course possible to render a different | In principle it is of course possible to render a different | |||
UI element to indicate that calls are using an unauthenticated | UI element to indicate that calls are using an unauthenticated | |||
set of keying material (recall that the attacker can just present | set of keying material (recall that the attacker can just present | |||
a slightly different name so that the attack shows the | a slightly different name so that the attack shows the | |||
same UI as a call to a new device or to someone you haven't | same UI as a call to a new device or to someone you haven't | |||
called before) but as a practical matter, users simply ignore | called before), but as a practical matter, users simply ignore | |||
such indicators even in the rather more dire case of mixed | such indicators even in the rather more dire case of mixed | |||
content warnings. | content warnings. | |||
</t> | </t> | |||
</section> | </section> | |||
<section title="Third Party Identity" anchor="sec.third-party-id"> | <section anchor="sec.third-party-id" numbered="true" toc="default"> | |||
<name>Third-Party Identity</name> | ||||
<t> | <t> | |||
The conventional approach to providing communications identity | The conventional approach to providing communications identity | |||
has of course been to have some third party identity system | has of course been to have some third-party identity system | |||
(e.g., PKI) to authenticate the endpoints. Such mechanisms | (e.g., PKI) to authenticate the endpoints. Such mechanisms | |||
have proven to be too cumbersome for use by typical users | have proven to be too cumbersome for use by typical users | |||
(and nearly too cumbersome for administrators). | (and nearly too cumbersome for administrators). | |||
However, | However, | |||
a new generation of Web-based identity providers (BrowserID, Feder ated Google Login, | a new generation of Web-based identity providers (BrowserID, Feder ated Google Login, | |||
Facebook Connect, OAuth <xref target="RFC6749"/>, OpenID <xref tar get="OpenID"/>, WebFinger <xref target="RFC7033"/>), has recently been developed | Facebook Connect, OAuth <xref target="RFC6749" format="default"/>, OpenID <xref target="OpenID" format="default"/>, WebFinger <xref target="RFC703 3" format="default"/>) has recently been developed | |||
and use Web technologies to provide lightweight (from the user's | and use Web technologies to provide lightweight (from the user's | |||
perspective) third-party authenticated transactions. | perspective) third-party authenticated transactions. | |||
It is possible to use systems of this type to authenticate WebRTC calls, | It is possible to use systems of this type to authenticate WebRTC calls, | |||
linking them to existing user notions of identity | linking them to existing user notions of identity | |||
(e.g., Facebook adjacencies). Specifically, the third-party | (e.g., Facebook adjacencies). Specifically, the third-party | |||
identity system is used to bind the user's identity to | identity system is used to bind the user's identity to | |||
cryptographic keying material which is then used to | cryptographic keying material which is then used to | |||
authenticate the calling endpoints. | authenticate the calling endpoints. | |||
Calls which are authenticated | Calls which are authenticated | |||
in this fashion are naturally resistant even to active MITM attack | in this fashion are naturally resistant even to active MITM attack | |||
by the calling site. | by the calling site. | |||
</t> | </t> | |||
<t> | <t> | |||
Note that there is one special case in which PKI-style certificate s | Note that there is one special case in which PKI-style certificate s | |||
do provide a practical solution: calls from end-users to | do provide a practical solution: calls from end users to | |||
large sites. For instance, if you are making a call | large sites. For instance, if you are making a call | |||
to Amazon.com, then Amazon can easily get a certificate | to Amazon.com, then Amazon can easily get a certificate | |||
to authenticate their media traffic, just as they get | to authenticate their media traffic, just as they get | |||
one to authenticate their Web traffic. This does not provide | one to authenticate their Web traffic. This does not provide | |||
additional security value in cases in which the calling site | additional security value in cases in which the calling site | |||
and the media peer are one in the same, but might be useful | and the media peer are one and the same, but might be useful | |||
in cases in which third parties (e.g., ad networks or | in cases in which third parties (e.g., ad networks or | |||
retailers) arrange for calls but do not participate in them. | retailers) arrange for calls but do not participate in them. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor="sec.page-access" numbered="true" toc="default"> | ||||
<section title="Page Access to Media" anchor="sec.page-access"> | <name>Page Access to Media</name> | |||
<t> | <t> | |||
Identifying the identity of the far media endpoint is a | Identifying the identity of the far media endpoint is a | |||
necessary but not sufficient condition for providing media | necessary but not sufficient condition for providing media | |||
security. In WebRTC, media flows are rendered into | security. In WebRTC, media flows are rendered into | |||
HTML5 MediaStreams which can be manipulated by the calling | HTML5 MediaStreams which can be manipulated by the calling | |||
site. Obviously, if the site can modify or view the media, | site. Obviously, if the site can modify or view the media, | |||
then the user is not getting the level of assurance they | then the user is not getting the level of assurance they | |||
would expect from being able to authenticate their peer. | would expect from being able to authenticate their peer. | |||
In many cases, this is acceptable because the user values | In many cases, this is acceptable because the user values | |||
site-based special effects over complete security from the | site-based special effects over complete security from the | |||
site. However, there are also cases where users wish to | site. However, there are also cases where users wish to | |||
know that the site cannot interfere. In order to facilitate | know that the site cannot interfere. In order to facilitate | |||
that, it will be necessary to provide features whereby | that, it will be necessary to provide features whereby | |||
the site can verifiably give up access to the media streams. | the site can verifiably give up access to the media streams. | |||
This verification must be possible both from the local | This verification must be possible both from the local | |||
side and the remote side. I.e., users must be able to verify | side and the remote side. That is, users must be able to verify | |||
that the person called has engaged a secure media | that the person called has engaged a secure media | |||
mode (see <xref target="sec.malicious"/>). In order to achieve thi s it will be necessary to | mode (see <xref target="sec.malicious" format="default"/>). In ord er to achieve this, it will be necessary to | |||
cryptographically bind an indication of the local media | cryptographically bind an indication of the local media | |||
access policy into the cryptographic authentication | access policy into the cryptographic authentication | |||
procedures detailed in the previous sections. | procedures detailed in the previous sections. | |||
</t> | </t> | |||
<t> | <t> | |||
It should be noted that the use of this secure media mode is | It should be noted that the use of this secure media mode is | |||
left to the discretion of the site. When such a mode is | left to the discretion of the site. When such a mode is | |||
engaged, the browser will need to provide indicia to the user | engaged, the browser will need to provide indicia to the user | |||
that the associated media has been authenticated as coming from | that the associated media has been authenticated as coming from | |||
the identified user. This allows WebRTC services that wish to | the identified user. This allows WebRTC services that wish to | |||
claim end-to-end security to do so in a way that can be easily | claim end-to-end security to do so in a way that can be easily | |||
verified by the user. This model requires that the remote | verified by the user. This model requires that the remote | |||
party's browser be included in the TCB, as described in | party's browser be included in the TCB, as described in | |||
<xref target="sec.web-security"/>. | <xref target="sec.web-security" format="default"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="Malicious Peers" anchor="sec.malicious"> | <section anchor="sec.malicious" numbered="true" toc="default"> | |||
<name>Malicious Peers</name> | ||||
<t> | <t> | |||
One class of attack that we do not generally try to prevent | One class of attack that we do not generally try to prevent | |||
is malicious peers. For instance, no matter what confidentiality | is malicious peers. For instance, no matter what confidentiality | |||
measures you employ the person you are talking to might record | measures you employ the person you are talking to might record | |||
the call and publish it on the Internet. Similarly, we do | the call and publish it on the Internet. Similarly, we do | |||
not attempt to prevent them from using voice or video processing | not attempt to prevent them from using voice or video processing | |||
technology from hiding or changing their appearance. | technology from hiding or changing their appearance. | |||
While technologies (DRM, etc.) do exist to attempt to address | While technologies (Digital Rights Management (DRM), etc.) do exist to attempt to address | |||
these issues, they are generally not compatible with open | these issues, they are generally not compatible with open | |||
systems and WebRTC does not address them. | systems and WebRTC does not address them. | |||
<!-- [rfced] Section 4.3.3: We found this sentence confusing. | ||||
Does "from using voice or video processing technology from hiding | ||||
or changing their appearance" mean "from using voice or video | ||||
processing technology to hide or change their appearance," or | ||||
something else? | ||||
Also, for ease of the reader, we expanded "DRM" as "Digital Rights | ||||
Management." Please let us know if this is incorrect. | ||||
Original: | ||||
Similarly, we do not attempt to | ||||
prevent them from using voice or video processing technology from | ||||
hiding or changing their appearance. While technologies (DRM, etc.) | ||||
do exist to attempt to address these issues, they are generally not | ||||
compatible with open systems and WebRTC does not address them. | ||||
Currently: | ||||
... While technologies (Digital | ||||
Rights Management (DRM), etc.) do exist to attempt to address these | ||||
issues, they are generally not compatible with open systems and | ||||
WebRTC does not address them. --> | ||||
</t> | </t> | |||
<t> | <t> | |||
Similarly, we make no attempt to prevent prank calling or | Similarly, we make no attempt to prevent prank calling or | |||
other unwanted calls. In general, this is in the scope of the | other unwanted calls. In general, this is in the scope of the | |||
calling site, though because WebRTC does offer some forms of | calling site, though because WebRTC does offer some forms of | |||
strong authentication, that may be useful as part of a defense | strong authentication, that may be useful as part of a defense | |||
against such attacks. | against such attacks. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="Privacy Considerations" anchor="sec.privacy"> | <section anchor="sec.privacy" numbered="true" toc="default"> | |||
<section title="Correlation of Anonymous Calls"> | <name>Privacy Considerations</name> | |||
<section numbered="true" toc="default"> | ||||
<name>Correlation of Anonymous Calls</name> | ||||
<t> | <t> | |||
While persistent endpoint identifiers can be a useful security | While persistent endpoint identifiers can be a useful security | |||
feature (see <xref target="sec.key-continuity"/>) they can | feature (see <xref target="sec.key-continuity" format="default"/>), they can | |||
also represent a privacy threat in settings where the user | also represent a privacy threat in settings where the user | |||
wishes to be anonymous. WebRTC provides a number of possible | wishes to be anonymous. WebRTC provides a number of possible | |||
persistent identifiers such as DTLS certificates | persistent identifiers such as DTLS certificates | |||
(if they are reused between connections) and RTCP CNAMES | (if they are reused between connections) and RTCP CNAMEs | |||
(if generated according to <xref target="RFC6222"/> rather | (if generated according to <xref target="RFC6222" format="default"/> | |||
than the privacy preserving mode of <xref target="RFC7022"/>). | rather | |||
than the privacy-preserving mode of <xref target="RFC7022" format="d | ||||
efault"/>). | ||||
In order to prevent this type of correlation, browsers need to | In order to prevent this type of correlation, browsers need to | |||
provide mechanisms to reset these identifiers (e.g., with the | provide mechanisms to reset these identifiers (e.g., with the | |||
same lifetime as cookies). Moreover, the API should provide | same lifetime as cookies). Moreover, the API should provide | |||
mechanisms to allow sites intended for anonymous calling | mechanisms to allow sites intended for anonymous calling | |||
to force the minting of fresh identifiers. In addition, | to force the minting of fresh identifiers. In addition, | |||
IP addresses can be a source of call linkage | IP addresses can be a source of call linkage | |||
<xref target="I-D.ietf-rtcweb-ip-handling"/>. | <xref target="RFC8828" format="default"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Browser Fingerprinting"> | <name>Browser Fingerprinting</name> | |||
<t> | <t> | |||
Any new set of API features adds a risk of browser fingerprinting, | Any new set of API features adds a risk of browser fingerprinting, | |||
and WebRTC is no exception. Specifically, sites can use the | and WebRTC is no exception. Specifically, sites can use the | |||
presence or absence of specific devices as a browser fingerprint. | presence or absence of specific devices as a browser fingerprint. | |||
In general, the API needs to be balanced between functionality | In general, the API needs to be balanced between functionality | |||
and the incremental fingerprint risk. See <xref target="Fingerprint ing"/>. | and the incremental fingerprint risk. See <xref target="Fingerprint ing" format="default"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.sec_cons" numbered="true" toc="default"> | ||||
<section title="Security Considerations" anchor="sec.sec_cons"> | <name>Security Considerations</name> | |||
<t>This entire document is about security.</t> | <t>This entire document is about security.</t> | |||
</section> | </section> | |||
<section numbered="true" toc="default"> | ||||
<section title="Acknowledgements"> | <name>IANA Considerations</name> | |||
<t> | <t>This document has no IANA actions.</t> | |||
Bernard Aboba, Harald Alvestrand, Dan Druta, | ||||
Cullen Jennings, Alan Johnston, Hadriel Kaplan (S 4.2.1), Matthew Ka | ||||
ufman, | ||||
Martin Thomson, Magnus Westerlund. | ||||
</t> | ||||
<t></t> | ||||
</section> | ||||
<section title="IANA Considerations"> | ||||
<t>There are no IANA considerations.</t> | ||||
</section> | ||||
<section title="Changes Since -04"> | ||||
<t> | ||||
<list style="symbols"> | ||||
<t>Replaced RTCWEB and RTC-Web with WebRTC, except when referring to t | ||||
he IETF WG</t> | ||||
<t>Removed discussion of the IFRAMEd advertisement case, since we deci | ||||
ded not to | ||||
treat it specially.</t> | ||||
<t>Added a privacy section considerations section.</t> | ||||
<t>Significant edits to the SAS section to reflect Alan Johnston's com | ||||
ments.</t> | ||||
<t>Added some discussion if IP location privacy and Tor.</t> | ||||
<t>Updated the "communications consent" section to reflrect draft-ietf | ||||
.</t> | ||||
<t>Added a section about "malicious peers".</t> | ||||
<t>Added a section describing screen sharing threats.</t> | ||||
<t>Assorted editorial changes.</t> | ||||
</list> | ||||
</t> | ||||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references> | ||||
<name>References</name> | ||||
<references> | ||||
<name>Normative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174. | ||||
xml"/> | ||||
</references> | ||||
<references> | ||||
<name>Informative References</name> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3261. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3552. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3711. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2818. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5479. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5763. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6347. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4568. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4251. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.3760. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6189. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8445. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6222. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6454. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6455. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6749. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7022. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7033. | ||||
xml"/> | ||||
<xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7675. | ||||
xml"/> | ||||
<references title="Normative References"> | <!--draft-ietf-rtcweb-security-arch: 8827 --> | |||
&RFC2119; | <reference anchor="RFC8827" target="https://www.rfc-editor.org/info/rfc8827"> | |||
&RFC8174; | <front> | |||
</references> | <title>WebRTC Security Architecture</title> | |||
<references title="Informative References"> | <author initials='E.' surname='Rescorla' fullname='Eric Rescorla'> | |||
&RFC3261; | <organization/> | |||
&RFC3552; | </author> | |||
&RFC3711; | <date month='October' year='2020'/> | |||
&RFC2818; | </front> | |||
&RFC5479; | <seriesInfo name="RFC" value="8827"/> | |||
&RFC5763; | <seriesInfo name="DOI" value="10.17487/RFC8827"/> | |||
&RFC6347; | </reference> | |||
&RFC4568; | ||||
&RFC4251; | ||||
&RFC3760; | ||||
&RFC6189; | ||||
&RFC8445; | ||||
&RFC6222; | ||||
&RFC6454; | ||||
&RFC6455; | ||||
&RFC6749; | ||||
&RFC7022; | ||||
&RFC7033; | ||||
&RFC7675; | ||||
&I-D.ietf-rtcweb-security-arch; | ||||
&I-D.ietf-rtcweb-ip-handling; | ||||
&I-D.ietf-rtcweb-overview; | ||||
<reference anchor="abarth-rtcweb"> | ||||
<front> | ||||
<title>Prompting the user is security failure</title> | ||||
<author initials="A." surname="Barth"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date from PDF properties --> | ||||
<date day="19" month="September" year="2010" /> | ||||
</front> | ||||
<seriesInfo name="" value="RTC-Web Workshop"/> | ||||
<format target="http://rtc-web.alvestrand.com/home/papers/barth-security | ||||
-prompt.pdf?attredirects=0" type="PDF"/> | ||||
</reference> | ||||
<reference anchor="whitten-johnny"> | ||||
<front> | ||||
<title>Why Johnny Can't Encrypt: A Usability Evaluation of PGP 5.0</ti | ||||
tle> | ||||
<author initials="A." surname="Whitten"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="J.D." surname="Tygar"> | <!-- draft-ietf-rtcweb-ip-handling: 8828 --> | |||
<organization></organization> | <reference anchor="RFC8828" target="https://www.rfc-editor.org/info/rfc8828"> | |||
</author> | <front> | |||
<title>WebRTC IP Address Handling Requirements</title> | ||||
<author initials="J" surname="Uberti" fullname="Justin Uberti"> | ||||
<organization /> | ||||
</author> | ||||
<!-- Date of USENIX Security Symposium --> | <date month="October" year="2020" /> | |||
<date month="August" year="1999" /> | </front> | |||
</front> | <seriesInfo name="RFC" value="8828" /> | |||
<seriesInfo name="" value="Proceedings of the 8th USENIX Security Sympos | <seriesInfo name="DOI" value="10.17487/RFC8828"/> | |||
ium, 1999"/> | </reference> | |||
</reference> | ||||
<reference anchor="cranor-wolf"> | <!-- draft-ietf-rtcweb-overview: RFC 8825 --> | |||
<front> | <reference anchor="RFC8825" target="https://www.rfc-editor.org/info/rfc8825"> | |||
<title>Crying Wolf: An Empirical Study of SSL Warning Effectiveness</t | <front> | |||
itle> | <title>Overview: Real-Time Protocols for Browser-Based Applications</title> | |||
<author initials="H." surname="Alvestrand" fullname="Harald T. Alvestrand"> | ||||
<organization /> | ||||
</author> | ||||
<date month="October" year="2020" /> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8825" /> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8825"/> | ||||
</reference> | ||||
<author initials="J." surname="Sunshine"> | <reference anchor="abarth-rtcweb" target="http://rtc-web.alvestrand.com/ | |||
<organization></organization> | home/papers/barth-security-prompt.pdf?attredirects=0"> | |||
</author> | <front> | |||
<title>Prompting the user is security failure</title> | ||||
<author initials="A." surname="Barth"> | ||||
<organization/> | ||||
</author> | ||||
<date month="September" year="2010"/> | ||||
</front> | ||||
<refcontent>RTC-Web Workshop</refcontent> | ||||
</reference> | ||||
<author initials="S." surname="Egelman"> | <!-- [rfced] Informative References: | |||
<organization></organization> | The URL provided for [abarth-rtcweb] in the original XML file - | |||
</author> | <http://rtc-web.alvestrand.com/home/papers/ | |||
<author initials="H." surname="Almuhimedi"> | barth-security-prompt.pdf?attredirects=0> - steers to | |||
<organization></organization> | <https://672ad43e-a-6ea19bdf-s-sites.googlegroups.com/ | |||
</author> | a/alvestrand.com/rtc-web/home/papers/ | |||
<author initials="N." surname="Atri"> | barth-security-prompt.pdf?attachauth= ...(a very long string that is | |||
<organization></organization> | different each time)...&attredirects=0>. | |||
</author> | ||||
<author initials="L." surname="cranor"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date of USENIX Security Symposium --> | Is | |||
<date month="August" year="2009" /> | <http://rtc-web.alvestrand.com/home/papers/barth-security-prompt.pdf?attredirect | |||
</front> | s=0> | |||
considered the most stable URL available? Or, should the URL not be included | ||||
at all? | ||||
<seriesInfo name="" value="Proceedings of the 18th USENIX Security Sympo | Original: | |||
sium, 2009"/> | <format | |||
target="http://rtc-web.alvestrand.com/home/papers/barth-security-prom | ||||
pt.pdf?attredirects=0\ | ||||
" type="PDF"/> | ||||
--> | ||||
</reference> | <reference anchor="whitten-johnny" target="https://www.usenix.org/legacy | |||
/publications/library/proceedings/sec99/whitten.html"> | ||||
<front> | ||||
<title>Why Johnny Can't Encrypt: A Usability Evaluation of PGP 5.0</ | ||||
title> | ||||
<author initials="A." surname="Whitten"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="J.D." surname="Tygar"> | ||||
<organization/> | ||||
</author> | ||||
<date month="August" year="1999"/> | ||||
</front> | ||||
<refcontent>Proceedings of the 8th USENIX Security Symposium</refcontent | ||||
> | ||||
</reference> | ||||
<reference anchor="kain-conversion"> | <reference anchor="cranor-wolf" target="https://www.usenix.org/legacy/ev | |||
<front> | ent/sec09/tech/full_papers/sunshine.pdf"> | |||
<title>Design and Evaluation of a Voice Conversion Algorithm based on | <front> | |||
Spectral Envelope Mapping and Residual Prediction</title> | <title>Crying Wolf: An Empirical Study of SSL Warning Effectiveness< | |||
/title> | ||||
<author initials="J." surname="Sunshine"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="S." surname="Egelman"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="H." surname="Almuhimedi"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="N." surname="Atri"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="L." surname="Cranor"> | ||||
<organization/> | ||||
</author> | ||||
<date month="August" year="2009"/> | ||||
</front> | ||||
<refcontent>Proceedings of the 18th USENIX Security Symposium</refconten | ||||
t> | ||||
</reference> | ||||
<author initials="A." surname="Kain"> | <reference anchor="kain-conversion"> | |||
<organization></organization> | <front> | |||
</author> | <title>Design and Evaluation of a Voice Conversion Algorithm based | |||
on Spectral Envelope Mapping and Residual Prediction</title> | ||||
<author initials="A." surname="Kain"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="M." surname="Macon"> | ||||
<organization/> | ||||
</author> | ||||
<date month="May" year="2001"/> | ||||
</front> | ||||
<seriesInfo name="DOI" value="10.1109/ICASSP.2001.941039"/> | ||||
<refcontent>Proceedings of the 2001 IEEE International Conference on | ||||
Acoustics, Speech, and Signal Processing (ICASSP)</refcontent> | ||||
</reference> | ||||
<author initials="M." surname="Macon"> | <!-- [rfced] References: May we update [kain-conversion] as follows? | |||
<organization></organization> | ||||
</author> | ||||
<!-- Date of ICASSP 2001 --> | Original: | |||
<date month="May" year="2001" /> | [kain-conversion] | |||
</front> | Kain, A. and M. Macon, "Design and Evaluation of a Voice | |||
Conversion Algorithm based on Spectral Envelope Mapping | ||||
and Residual Prediction", Proceedings of ICASSP, May | ||||
2001, May 2001. | ||||
<seriesInfo name="" value="Proceedings of ICASSP, May 2001"/> | Currently (URL added during conversion to xml2rfc v3): | |||
</reference> | [kain-conversion] | |||
Kain, A. and M. Macon, "Design and Evaluation of a Voice | ||||
Conversion Algorithm based on Spectral Envelope Mapping | ||||
and Residual Prediction", Proceedings of the 2001 IEEE | ||||
International Conference on Acoustics, Speech, and Signal | ||||
Processing (ICASSP), DOI 10.1109/ICASSP.2001.941039, May | ||||
2001, <https://doi.org/10.1109/ICASSP.2001.941039>. | ||||
<reference anchor="farus-conversion"> | Suggested: | |||
<front> | [kain-conversion] | |||
<title>Speaker Recognition Robustness to Voice Conversion</title> | Kain, A. and M. Macon, "Design and Evaluation of a Voice | |||
Conversion Algorithm based on Spectral Envelope Mapping | ||||
and Residual Prediction", Proceedings of the 2001 IEEE | ||||
International Conference on Acoustics, Speech, and Signal | ||||
Processing (ICASSP), DOI 10.1109/ICASSP.2001.941039, May | ||||
2001, <https://ieeexplore.ieee.org/document/941039>. --> | ||||
<author initials="M." surname="Farrus"> | <reference anchor="farrus-conversion"> | |||
<organization></organization> | <front> | |||
</author> | <title>Speaker Recognition Robustness to Voice Conversion</title> | |||
<author initials="D." surname="Erro"> | <author initials="M." surname="Farrus"> | |||
<organization></organization> | <organization/> | |||
</author> | </author> | |||
<author initials="J." surname="Hernando"> | <author initials="D." surname="Erro"> | |||
<organization></organization> | <organization/> | |||
</author> | </author> | |||
<author initials="J." surname="Hernando"> | ||||
<organization/> | ||||
</author> | ||||
<date month="January" year="2008"/> | ||||
</front> | ||||
</reference> | ||||
<!-- Date from http://www.researchgate.net/publication/228819912 --> | <reference anchor="huang-w2sp"> | |||
<date month="January" year="2008" /> | <front> | |||
</front> | <title>Talking to Yourself for Fun and Profit</title> | |||
</reference> | <author initials="L-S." surname="Huang"> | |||
<organization/> | ||||
</author> | ||||
<author initials="E.Y." surname="Chen"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="A." surname="Barth"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="E." surname="Rescorla"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="C." surname="Jackson"> | ||||
<organization/> | ||||
</author> | ||||
<date month="May" year="2011"/> | ||||
</front> | ||||
<refcontent>Web 2.0 Security and Privacy (W2SP 2011)</refcontent> | ||||
</reference> | ||||
<reference anchor="huang-w2sp"> | <reference anchor="finer-grained"> | |||
<front> | <front> | |||
<title>Talking to Yourself for Fun and Profit</title> | <title>Beware of Finer-Grained Origins</title> | |||
<author initials="C." surname="Jackson"> | ||||
<organization/> | ||||
</author> | ||||
<author initials="A." surname="Barth"> | ||||
<organization/> | ||||
</author> | ||||
<date month="July" year="2008"/> | ||||
</front> | ||||
<refcontent>Web 2.0 Security and Privacy (W2SP 2008)</refcontent> | ||||
</reference> | ||||
<author initials="L-S." surname="Huang"> | <!-- [rfced] Is the [CORS] reference still correct? Should this document | |||
<organization></organization> | instead refer to <https://fetch.spec.whatwg.org/>? Perhaps | |||
</author> | <https://fetch.spec.whatwg.org/#http-cors-protocol>, more specifically? | |||
<author initials="E.Y." surname="Chen"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="A." surname="Barth"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="E." surname="Rescorla"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="C." surname="Jackson"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date from PDF properties --> | Original: | |||
<date month="May" year="2011" /> | [CORS] van Kesteren, A., "Cross-Origin Resource Sharing", January | |||
</front> | 2014. | |||
<seriesInfo name="" value="W2SP, 2011"/> | When we search for this document, we find this link | |||
</reference> | <https://www.w3.org/TR/2009/WD-cors-20090317/>, which gives the following | |||
warning: | ||||
<reference anchor="finer-grained"> | This version is outdated! | |||
<front> | For the latest version, please look at https://www.w3.org/TR/cors/. | |||
<title>Beware of Finer-Grained Origins</title> | ||||
<author initials="A." surname="Barth"> | <https://www.w3.org/TR/cors/> redirects to <https://fetch.spec.whatwg.org/>. | |||
<organization></organization> | ||||
</author> | ||||
<author initials="C." surname="Jackson"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date from PDF properties --> | On <https://fetch.spec.whatwg.org/>, the reference for [CORS] refers back to | |||
<date month="July" year="2008" /> | <https://www.w3.org/TR/cors/>: | |||
</front> | ||||
<seriesInfo name="" value="W2SP, 2008"/> | [CORS] | |||
</reference> | Anne van Kesteren. Cross-Origin Resource Sharing. 2 June 2020. REC. URL: | |||
https://www.w3.org/TR/cors/ | ||||
<reference anchor="CORS"> | <https://www.w3.org/TR/2020/SPSD-cors-20200602/> says that new implementations | |||
<front> | should follow the "Fetch API Living Standard". | |||
<title>Cross-Origin Resource Sharing</title> | ||||
<author initials="A." surname="van Kesteren"> | Please review and let us know if any updates are needed. | |||
<organization></organization> | --> | |||
</author> | ||||
<!-- Date from http://www.w3.org/TR/2014/REC-cors-20140116/ --> | <reference anchor="CORS"> | |||
<date day="16" month="January" year="2014" /> | <front> | |||
</front> | <title>Cross-Origin Resource Sharing</title> | |||
<format target="http://www.w3.org/TR/cors/" type="TXT"/> | <author initials="A." surname="van Kesteren"> | |||
</reference> | <organization/> | |||
</author> | ||||
<date month="January" year="2014"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="SWF"> | <reference anchor="SWF" target="http://www.adobe.com/content/dam/Adobe/e | |||
<front> | n/devnet/swf/pdf/swf_file_format_spec_v10.pdf"> | |||
<title>SWF File Format Specification Version 19</title> | <front> | |||
<title>SWF File Format Specification Version 19</title> | ||||
<author/> | ||||
<date month="April" year="2013"/> | ||||
</front> | ||||
</reference> | ||||
<author surname="Adobe"> | <!-- [rfced] Informative References: | |||
<organization></organization> | The URL provided for [SWF] in the original XML file - | |||
</author> | <http://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/ | |||
swf_file_format_spec_v10.pdf> - steers to | ||||
<https://www.adobe.com/content/dam/acom/en/devnet/swf/pdf/ | ||||
swf_file_format_spec_v10.pdf>, which in turn yields a 404. | ||||
Please provide a working and stable URL. | ||||
<!-- Date from PDF properties --> | Original: | |||
<date day="23" month="April" year="2013" /> | [SWF] "SWF File Format Specification Version 19", April 2013. --> | |||
</front> | ||||
<format target="http://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf | ||||
/swf_file_format_spec_v10.pdf" type="PDF"/> | ||||
</reference> | ||||
<reference anchor="XmlHttpRequest"> | <reference anchor="XmlHttpRequest" target="https://www.w3.org/TR/XMLHttp Request/"> | |||
<front> | <front> | |||
<title>XMLHttpRequesti Level 2</title> | <title>XMLHttpRequest Level 2</title> | |||
<author initials="A." surname="van Kesteren"> | <author initials="A." surname="van Kesteren"> | |||
<organization></organization> | <organization/> | |||
</author> | </author> | |||
<date day="17" month="January" year="2012"/> | <date month="January" year="2012"/> | |||
</front> | </front> | |||
<format target="http://www.w3.org/TR/XMLHttpRequest/" type="TXT"/> | </reference> | |||
</reference> | ||||
<reference anchor="Fingerprinting"> | <!-- [rfced] Informative References: The URL as provided for | |||
<front> | [XmlHttpRequest] in the original document - | |||
<title>Fingerprinting Guidance for Web Specification Authors (Draft)< | <http://www.w3.org/TR/XMLHttpRequest/> - steers to a page with the | |||
/title> | title "XMLHttpRequest Level 1," dated October 2016. When we did a | |||
Google search for "XMLHttpRequest Level 2," we found | ||||
<https://www.w3.org/TR/2012/WD-XMLHttpRequest-20120117/>, which is | ||||
partially obscured by a red box that says "This version is | ||||
outdated!" The link in the box in turn steers to the October 2016 | ||||
"XMLHttpRequest Level 1" page. | ||||
<author surname="W3C"> | Please advise. | |||
<organization></organization> | ||||
</author> | ||||
<date day="24" month="November" year="2013" /> | Original: | |||
</front> | [XmlHttpRequest] | |||
<format target="https://www.w3.org/TR/fingerprinting-guidance/#acknowle | van Kesteren, A., "XMLHttpRequest Level 2", January 2012. --> | |||
dgement/" type="TXT"/> | ||||
</reference> | ||||
<reference anchor="OpenID"> | <reference anchor="Fingerprinting" target="https://www.w3.org/TR/fingerp rinting-guidance/#acknowledgement/"> | |||
<front> | <front> | |||
<title>OpenID Connect Core 1.0</title> | <title>Fingerprinting Guidance for Web Specification Authors (Draft) | |||
</title> | ||||
<author/> | ||||
<date month="November" year="2013"/> | ||||
</front> | ||||
</reference> | ||||
<!-- [rfced] Informative References: The URL provided for | ||||
[Fingerprinting] in the original XML file - | ||||
<https://www.w3.org/TR/fingerprinting-guidance/#acknowledgement/> - | ||||
steers to a document with the title "Mitigating Browser | ||||
Fingerprinting in Web Specifications." Should the reference be updated? If | ||||
not, please provide the correct URL for the document listed below - perhaps | ||||
<https://www.w3.org/standards/history/fingerprinting-guidance> or | ||||
<https://www.w3.org/TR/fingerprinting-guidance/>? | ||||
Original: | ||||
[Fingerprinting] | ||||
"Fingerprinting Guidance for Web Specification Authors | ||||
(Draft)", November 2013. --> | ||||
<reference anchor="OpenID" target="https://openid.net/specs/openid-conne | ||||
ct-core-1_0.html"> | ||||
<front> | ||||
<title>OpenID Connect Core 1.0</title> | ||||
<author initials="N." surname="Sakimura"> | <author initials="N." surname="Sakimura"> | |||
<organization></organization> | <organization/> | |||
</author> | </author> | |||
<author initials="J." surname="Bradley"> | <author initials="J." surname="Bradley"> | |||
<organization></organization> | <organization/> | |||
</author> | </author> | |||
<author initials="M." surname="Jones"> | <author initials="M." surname="Jones"> | |||
<organization></organization> | <organization/> | |||
</author> | </author> | |||
<author initials="B." surname="de Medeiros"> | <author initials="B." surname="de Medeiros"> | |||
<organization></organization> | <organization/> | |||
</author> | </author> | |||
<author initials="C." surname="Mortimore"> | <author initials="C." surname="Mortimore"> | |||
<organization></organization> | <organization/> | |||
</author> | </author> | |||
<date month="November" year="2014"/> | ||||
<date day="8" month="November" year="2014" /> | ||||
</front> | </front> | |||
<format target="https://openid.net/specs/openid-connect-core-1_0.html/ | </reference> | |||
" type="HTML"/> | </references> | |||
</reference> | ||||
</references> | </references> | |||
<section numbered="false" toc="default"> | ||||
<name>Acknowledgements</name> | ||||
<t> | ||||
<contact fullname="Bernard Aboba"/>, <contact fullname="Harald | ||||
Alvestrand"/>, <contact fullname="Dan Druta"/>, | ||||
<contact fullname="Cullen Jennings"/>, <contact fullname="Alan | ||||
Johnston"/>, <contact fullname="Hadriel Kaplan"/> (<xref | ||||
target="sec.ice"/>), <contact fullname="Matthew Kaufman"/>, | ||||
<contact fullname="Martin Thomson"/>, <contact fullname="Magnus West | ||||
erlund"/>. | ||||
</t> | ||||
</section> | ||||
</back> | ||||
<!-- [rfced] Please let us know how/if the following should be made | ||||
consistent: | ||||
iframe / IFRAME (also per draft-ietf-rtcweb-security-arch) | ||||
calling-service.example.com/ vs. calling-service.example.com | ||||
(We also see "http://anything.example.org/".) | ||||
CROSS-PROTOCOL attacks (Section 3.3) / | ||||
cross-protocol attacks (Section 4.2) Is the capitalization | ||||
supposed to indicate emphasis? --> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 225 change blocks. | ||||
668 lines changed or deleted | 889 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/ |