rfc8826xml2.original.xml | rfc8826.xml | |||
---|---|---|---|---|
<?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [ | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" conse | |||
<!ENTITY RFC2119 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | nsus="true" docName="draft-ietf-rtcweb-security-12" indexInclude="true" ipr="pre | |||
.2119.xml"> | 5378Trust200902" number="8826" prepTime="2021-01-14T11:01:13" scripts="Common,La | |||
<!ENTITY RFC3552 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | tin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="4" tocInclud | |||
.3552.xml"> | e="true" xml:lang="en"> | |||
<!ENTITY RFC3552 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <link href="https://datatracker.ietf.org/doc/draft-ietf-rtcweb-security-12" re | |||
.3552.xml"> | l="prev"/> | |||
<!ENTITY RFC2818 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC | <link href="https://dx.doi.org/10.17487/rfc8826" rel="alternate"/> | |||
.2818.xml"> | <link href="urn:issn:2070-1721" rel="alternate"/> | |||
<!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"> | ||||
]> | ||||
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?> | ||||
<?rfc toc="yes" ?> | ||||
<?rfc symrefs="yes" ?> | ||||
<?rfc strict="yes" ?> | ||||
<?rfc compact="yes" ?> | ||||
<?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" stream="IETF"/> | ||||
<author fullname="Eric Rescorla" initials="E.K." surname="Rescorla"> | <author fullname="Eric Rescorla" initials="E." surname="Rescorla"> | |||
<organization>RTFM, Inc.</organization> | <organization showOnFrontPage="true">Mozilla</organization> | |||
<address> | <address> | |||
<postal> | ||||
<street>2064 Edgewood Drive</street> | ||||
<city>Palo Alto</city> | ||||
<region>CA</region> | ||||
<code>94303</code> | ||||
<country>USA</country> | ||||
</postal> | ||||
<phone>+1 650 678 2350</phone> | ||||
<email>ekr@rtfm.com</email> | <email>ekr@rtfm.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date month="01" year="2021"/> | ||||
<date year="2019" /> | <abstract pn="section-abstract"> | |||
<t indent="0" pn="section-abstract-1"> | ||||
<area>ART</area> | WebRTC is a protocol suite for use with | |||
real-time applications that can be deployed in browsers -- "real-time | ||||
<workgroup>RTC-Web</workgroup> | communication on the Web". This document defines the WebRTC threat | |||
model and analyzes the security threats of WebRTC in that model. | ||||
<abstract> | ||||
<t> | ||||
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 threa | ||||
ts of | ||||
WebRTC in that model. | ||||
</t> | </t> | |||
</abstract> | </abstract> | |||
<boilerplate> | ||||
<section anchor="status-of-memo" numbered="false" removeInRFC="false" toc= | ||||
"exclude" pn="section-boilerplate.1"> | ||||
<name slugifiedName="name-status-of-this-memo">Status of This Memo</name | ||||
> | ||||
<t indent="0" pn="section-boilerplate.1-1"> | ||||
This is an Internet Standards Track document. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.1-2"> | ||||
This document is a product of the Internet Engineering Task Force | ||||
(IETF). It represents the consensus of the IETF community. It has | ||||
received public review and has been approved for publication by | ||||
the Internet Engineering Steering Group (IESG). Further | ||||
information on Internet Standards is available in Section 2 of | ||||
RFC 7841. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.1-3"> | ||||
Information about the current status of this document, any | ||||
errata, and how to provide feedback on it may be obtained at | ||||
<eref target="https://www.rfc-editor.org/info/rfc8826" brackets="non | ||||
e"/>. | ||||
</t> | ||||
</section> | ||||
<section anchor="copyright" numbered="false" removeInRFC="false" toc="excl | ||||
ude" pn="section-boilerplate.2"> | ||||
<name slugifiedName="name-copyright-notice">Copyright Notice</name> | ||||
<t indent="0" pn="section-boilerplate.2-1"> | ||||
Copyright (c) 2021 IETF Trust and the persons identified as the | ||||
document authors. All rights reserved. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.2-2"> | ||||
This document is subject to BCP 78 and the IETF Trust's Legal | ||||
Provisions Relating to IETF Documents | ||||
(<eref target="https://trustee.ietf.org/license-info" brackets="none | ||||
"/>) in effect on the date of | ||||
publication of this document. Please review these documents | ||||
carefully, as they describe your rights and restrictions with | ||||
respect to this document. Code Components extracted from this | ||||
document must include Simplified BSD License text as described in | ||||
Section 4.e of the Trust Legal Provisions and are provided without | ||||
warranty as described in the Simplified BSD License. | ||||
</t> | ||||
<t indent="0" pn="section-boilerplate.2-3"> | ||||
This document may contain material from IETF Documents or IETF | ||||
Contributions published or made publicly available before November | ||||
10, 2008. The person(s) controlling the copyright in some of this | ||||
material may not have granted the IETF Trust the right to allow | ||||
modifications of such material outside the IETF Standards Process. | ||||
Without obtaining an adequate license from the person(s) | ||||
controlling the copyright in such materials, this document may not | ||||
be modified outside the IETF Standards Process, and derivative | ||||
works of it may not be created outside the IETF Standards Process, | ||||
except to format it for publication as an RFC or to translate it | ||||
into languages other than English. | ||||
</t> | ||||
</section> | ||||
</boilerplate> | ||||
<toc> | ||||
<section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" p | ||||
n="section-toc.1"> | ||||
<name slugifiedName="name-table-of-contents">Table of Contents</name> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="section-to | ||||
c.1-1"> | ||||
<li pn="section-toc.1-1.1"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref der | ||||
ivedContent="1" format="counter" sectionFormat="of" target="section-1"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-introduction"> | ||||
Introduction</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.2"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.2.1"><xref der | ||||
ivedContent="2" format="counter" sectionFormat="of" target="section-2"/>. <xref | ||||
derivedContent="" format="title" sectionFormat="of" target="name-terminology">T | ||||
erminology</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.3"> | ||||
<t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" form | ||||
at="counter" sectionFormat="of" target="section-3"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-the-browser-threat-model">The Brow | ||||
ser Threat Model</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.3.2"> | ||||
<li pn="section-toc.1-1.3.2.1"> | ||||
<t indent="0" keepWithNext="true" pn="section-toc.1-1.3.2.1.1">< | ||||
xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3. | ||||
1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-ac | ||||
cess-to-local-resources">Access to Local Resources</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.3.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent= | ||||
"3.2" format="counter" sectionFormat="of" target="section-3.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-same-origin-policy">Sa | ||||
me-Origin Policy</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.3.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent= | ||||
"3.3" format="counter" sectionFormat="of" target="section-3.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-bypassing-sop-cors-web | ||||
socke">Bypassing SOP: CORS, WebSockets, and Consent to Communicate</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.4"> | ||||
<t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" form | ||||
at="counter" sectionFormat="of" target="section-4"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-security-for-webrtc-applica">Secur | ||||
ity for WebRTC Applications</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.4.2"> | ||||
<li pn="section-toc.1-1.4.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent= | ||||
"4.1" format="counter" sectionFormat="of" target="section-4.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-access-to-local-device | ||||
s">Access to Local Devices</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.4.2.1.2"> | ||||
<li pn="section-toc.1-1.4.2.1.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.1.2.1.1"><xref derived | ||||
Content="4.1.1" format="counter" sectionFormat="of" target="section-4.1.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-threats-fr | ||||
om-screen-sharing">Threats from Screen Sharing</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.1.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.1.2.2.1"><xref derived | ||||
Content="4.1.2" format="counter" sectionFormat="of" target="section-4.1.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-calling-sc | ||||
enarios-and-user-">Calling Scenarios and User Expectations</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn | ||||
="section-toc.1-1.4.2.1.2.2.2"> | ||||
<li pn="section-toc.1-1.4.2.1.2.2.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.1.2.2.2.1.1"><xref | ||||
derivedContent="4.1.2.1" format="counter" sectionFormat="of" target="section-4. | ||||
1.2.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-dedicated-calling-services">Dedicated Calling Services</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.1.2.2.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.1.2.2.2.2.1"><xref | ||||
derivedContent="4.1.2.2" format="counter" sectionFormat="of" target="section-4. | ||||
1.2.2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-calling-the-site-youre-on">Calling the Site You're On</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.1.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.1.2.3.1"><xref derived | ||||
Content="4.1.3" format="counter" sectionFormat="of" target="section-4.1.3"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-origin-bas | ||||
ed-security">Origin-Based Security</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.1.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.1.2.4.1"><xref derived | ||||
Content="4.1.4" format="counter" sectionFormat="of" target="section-4.1.4"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-security-p | ||||
roperties-of-the-">Security Properties of the Calling Page</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent= | ||||
"4.2" format="counter" sectionFormat="of" target="section-4.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-communications-consent | ||||
-veri">Communications Consent Verification</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.4.2.2.2"> | ||||
<li pn="section-toc.1-1.4.2.2.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.2.2.1.1"><xref derived | ||||
Content="4.2.1" format="counter" sectionFormat="of" target="section-4.2.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-ice">ICE</ | ||||
xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.2.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.2.2.2.1"><xref derived | ||||
Content="4.2.2" format="counter" sectionFormat="of" target="section-4.2.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-masking">M | ||||
asking</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.2.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.2.2.3.1"><xref derived | ||||
Content="4.2.3" format="counter" sectionFormat="of" target="section-4.2.3"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-backward-c | ||||
ompatibility">Backward Compatibility</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.2.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.2.2.4.1"><xref derived | ||||
Content="4.2.4" format="counter" sectionFormat="of" target="section-4.2.4"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-ip-locatio | ||||
n-privacy">IP Location Privacy</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent= | ||||
"4.3" format="counter" sectionFormat="of" target="section-4.3"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-communications-securit | ||||
y">Communications Security</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.4.2.3.2"> | ||||
<li pn="section-toc.1-1.4.2.3.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.3.2.1.1"><xref derived | ||||
Content="4.3.1" format="counter" sectionFormat="of" target="section-4.3.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-protecting | ||||
-against-retrospe">Protecting Against Retrospective Compromise</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.3.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.3.2.2.1"><xref derived | ||||
Content="4.3.2" format="counter" sectionFormat="of" target="section-4.3.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-protecting | ||||
-against-during-c">Protecting Against During-Call Attack</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn | ||||
="section-toc.1-1.4.2.3.2.2.2"> | ||||
<li pn="section-toc.1-1.4.2.3.2.2.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.3.2.2.2.1.1"><xref | ||||
derivedContent="4.3.2.1" format="counter" sectionFormat="of" target="section-4. | ||||
3.2.1"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-key-continuity">Key Continuity</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.3.2.2.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.3.2.2.2.2.1"><xref | ||||
derivedContent="4.3.2.2" format="counter" sectionFormat="of" target="section-4. | ||||
3.2.2"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-short-authentication-string">Short Authentication Strings</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.3.2.2.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.3.2.2.2.3.1"><xref | ||||
derivedContent="4.3.2.3" format="counter" sectionFormat="of" target="section-4. | ||||
3.2.3"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-third-party-identity">Third-Party Identity</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.3.2.2.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.3.2.2.2.4.1"><xref | ||||
derivedContent="4.3.2.4" format="counter" sectionFormat="of" target="section-4. | ||||
3.2.4"/>. <xref derivedContent="" format="title" sectionFormat="of" target="nam | ||||
e-page-access-to-media">Page Access to Media</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.3.2.3"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.3.2.3.1"><xref derived | ||||
Content="4.3.3" format="counter" sectionFormat="of" target="section-4.3.3"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-malicious- | ||||
peers">Malicious Peers</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.4"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent= | ||||
"4.4" format="counter" sectionFormat="of" target="section-4.4"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-privacy-considerations | ||||
">Privacy Considerations</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="se | ||||
ction-toc.1-1.4.2.4.2"> | ||||
<li pn="section-toc.1-1.4.2.4.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.4.2.1.1"><xref derived | ||||
Content="4.4.1" format="counter" sectionFormat="of" target="section-4.4.1"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-correlatio | ||||
n-of-anonymous-ca">Correlation of Anonymous Calls</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.4.2.4.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.4.2.4.2.2.1"><xref derived | ||||
Content="4.4.2" format="counter" sectionFormat="of" target="section-4.4.2"/>. < | ||||
xref derivedContent="" format="title" sectionFormat="of" target="name-browser-fi | ||||
ngerprinting">Browser Fingerprinting</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.5"> | ||||
<t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" form | ||||
at="counter" sectionFormat="of" target="section-5"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-security-considerations">Security | ||||
Considerations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.6"> | ||||
<t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" form | ||||
at="counter" sectionFormat="of" target="section-6"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-iana-considerations">IANA Consider | ||||
ations</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7"> | ||||
<t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" form | ||||
at="counter" sectionFormat="of" target="section-7"/>. <xref derivedContent="" f | ||||
ormat="title" sectionFormat="of" target="name-references">References</xref></t> | ||||
<ul bare="true" empty="true" indent="2" spacing="compact" pn="sectio | ||||
n-toc.1-1.7.2"> | ||||
<li pn="section-toc.1-1.7.2.1"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent= | ||||
"7.1" format="counter" sectionFormat="of" target="section-7.1"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-normative-references"> | ||||
Normative References</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.7.2.2"> | ||||
<t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent= | ||||
"7.2" format="counter" sectionFormat="of" target="section-7.2"/>. <xref derived | ||||
Content="" format="title" sectionFormat="of" target="name-informative-references | ||||
">Informative References</xref></t> | ||||
</li> | ||||
</ul> | ||||
</li> | ||||
<li pn="section-toc.1-1.8"> | ||||
<t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="" forma | ||||
t="none" sectionFormat="of" target="section-appendix.a"/><xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgemen | ||||
ts</xref></t> | ||||
</li> | ||||
<li pn="section-toc.1-1.9"> | ||||
<t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="" forma | ||||
t="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" | ||||
format="title" sectionFormat="of" target="name-authors-address">Author's Addres | ||||
s</xref></t> | ||||
</li> | ||||
</ul> | ||||
</section> | ||||
</toc> | ||||
</front> | </front> | |||
<middle> | <middle> | |||
<section title="Introduction" anchor="sec.introduction"> | <section anchor="sec.introduction" numbered="true" toc="include" removeInRFC | |||
<t> | ="false" pn="section-1"> | |||
The Real-Time Communications on the Web (RTCWEB) working group has stand | <name slugifiedName="name-introduction">Introduction</name> | |||
ardized | <t indent="0" pn="section-1-1"> | |||
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" sectionFormat="o f" derivedContent="RFC8825"/>. 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" sectionFormat=" | |||
tions are directly controlled | of" derivedContent="RFC3261"/> soft | |||
by some Web server. A simple case is shown below. | phones), WebRTC communications are directly controlled by some Web | |||
server. A simple case is shown below. | ||||
</t> | </t> | |||
<figure anchor="fig.simple" align="left" suppress-title="false" pn="figure | ||||
<figure title="A simple WebRTC system" anchor="fig.simple"> | -1"> | |||
<artwork><![CDATA[ | <name slugifiedName="name-a-simple-webrtc-system">A Simple WebRTC System | |||
+----------------+ | </name> | |||
| | | <artwork name="" type="" align="left" alt="" pn="section-1-2.1"> | |||
| Web Server | | +----------------+ | |||
| | | | | | |||
+----------------+ | | Web Server | | |||
^ ^ | | | | |||
/ \ | +----------------+ | |||
HTTP / \ HTTP | ^ ^ | |||
or / \ or | / \ | |||
WebSockets / \ WebSockets | HTTPS / \ HTTPS | |||
v v | or / \ or | |||
JS API JS API | WebSockets / \ WebSockets | |||
+-----------+ +-----------+ | v v | |||
| | Media | | | JS API JS API | |||
| Browser |<---------->| Browser | | +-----------+ +-----------+ | |||
| | | | | | | Media | | | |||
+-----------+ +-----------+ | | Browser |<---------->| Browser | | |||
Alice Bob | | | | | | |||
+-----------+ +-----------+ | ||||
]]></artwork> | Alice Bob </artwork> | |||
</figure> | </figure> | |||
<t> | <t indent="0" pn="section-1-3"> | |||
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" sectio | |||
ave | nFormat="of" derivedContent="Figure 1"/>, Alice 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 which 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 indent="0" pn="section-1-4"> | |||
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 denial-of-service (DoS) attacks. Any successful syste m | |||
will need to be resistant to this and other attacks. | will need to be resistant to this and other attacks. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-1-5"> | |||
A companion document <xref target="I-D.ietf-rtcweb-security-arch"/> desc | A companion document <xref target="RFC8827" format="default" sectionForm | |||
ribes a security | at="of" derivedContent="RFC8827"/> 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="include" removeInRFC="false" | |||
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | pn="section-2"> | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | <name slugifiedName="name-terminology">Terminology</name> | |||
"OPTIONAL" in this document are to be interpreted as described in | <t indent="0" pn="section-2-1">The key words "<bcp14>MUST</bcp14>", "<bcp1 | |||
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only w | 4>MUST NOT</bcp14>", | |||
hen, they appear in all | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | |||
capitals, as shown here.</t> | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
"<bcp14>SHOULD NOT</bcp14>", | ||||
"<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | ||||
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are | ||||
to be interpreted as described in BCP 14 <xref target="RFC2119" format="defa | ||||
ult" sectionFormat="of" derivedContent="RFC2119"/> | ||||
<xref target="RFC8174" format="default" sectionFormat="of" derivedConten | ||||
t="RFC8174"/> when, and only when, they appear in all capitals, | ||||
as shown here.</t> | ||||
</section> | </section> | |||
<section anchor="sec.web-security" numbered="true" toc="include" removeInRFC | ||||
<section title="The Browser Threat Model" anchor="sec.web-security"> | ="false" pn="section-3"> | |||
<t> | <name slugifiedName="name-the-browser-threat-model">The Browser Threat Mod | |||
el</name> | ||||
<t indent="0" pn="section-3-1"> | ||||
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" sectionFormat="o | |||
rity guarantee as: | f" derivedContent="huang-w2sp"/> summarize | |||
</t> | the core browser security guarantee as follows: | |||
<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> | <t indent="3" pn="section-3-2">Users can safely visit arbitrary web sites | |||
<t> | and execute scripts provided by those sites.</t> | |||
<t indent="0" pn="section-3-3"> | ||||
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 indent="0" pn="section-3-4"> | |||
In this model, then, the browser acts as a Trusted Coomputing Base (TCB) | In this model, then, the browser acts as a Trusted Computing Base (TCB) | |||
both | 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 indent="0" pn="section-3-5"> | |||
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, or network | |||
attackers, who are able to control your network. Network attackers corre | attackers, who are able to control your network. | |||
spond | Network attackers correspond | |||
to the <xref target="RFC3552"/> "Internet Threat Model". Note that in so | to the <xref target="RFC3552" format="default" sectionFormat="of" derive | |||
me | dContent="RFC3552"/> "Internet Threat Model". Note that in some | |||
cases, a network attacker is also a web attacker, since transport protoc | cases, a network attacker is also a Web attacker, since transport protoc | |||
ols | 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="include" removeInRFC= | |||
<t> | "false" pn="section-3.1"> | |||
<name slugifiedName="name-access-to-local-resources">Access to Local Res | ||||
ources</name> | ||||
<t indent="0" pn="section-3.1-1"> | ||||
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" section | |||
rone to | Format="of" derivedContent="cranor-wolf"/> shows that users are prone to | |||
consent under such circumstances.] | consent under such circumstances.) | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-3.1-2"> | |||
Similarly, while Flash programs (SWFs) <xref target="SWF"/> can access | Similarly, while Flash programs (SWFs) <xref target="SWF" format="defa | |||
the camera and microphone, they | ult" sectionFormat="of" derivedContent="SWF"/> can access the camera and microph | |||
one, 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="include" removeInRF | |||
<t> | C="false" pn="section-3.2"> | |||
Many other resources are accessible but isolated. For instance, | <name slugifiedName="name-same-origin-policy">Same-Origin Policy</name> | |||
while scripts are allowed to make HTTP requests via the XMLHttpRequest | <t indent="0" pn="section-3.2-1"> | |||
() API (see <xref target="XmlHttpRequest"/>) | Many other resources are accessible but isolated. | |||
those requests are not allowed to be made to any server, but rather so | For instance, | |||
lely | while scripts are allowed to make HTTP requests via the fetch() API (s | |||
to the same ORIGIN from whence the script came <xref target="RFC6454"/ | ee <xref target="fetch" format="default" sectionFormat="of" derivedContent="fetc | |||
> | h"/>) | |||
(although CORS <xref target="CORS"/> and WebSockets | when requests are made to a server other than from | |||
<xref target="RFC6455"/> provide an escape hatch from this restriction | the same <strong>origin</strong> from whence the script came <xref tar | |||
, | get="RFC6454" format="default" sectionFormat="of" derivedContent="RFC6454"/> | |||
as described below.) | they are not able to read the responses. Cross-Origin Resource Sharing | |||
This SAME ORIGIN POLICY (SOP) prevents server A from mounting attacks | (CORS) <xref target="fetch" format="default" sectionFormat="of" derivedContent= | |||
"fetch"/> and WebSockets | ||||
<xref target="RFC6455" format="default" sectionFormat="of" derivedCont | ||||
ent="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 | 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 their credentials) and server B (e.g., from | |||
DoS attack). | DoS attacks). | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-3.2-2"> | |||
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 gin | channels. For instance, multiple pages/browser panes from the same ori gin | |||
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 --> | ||||
</section> | </section> | |||
<section title="Bypassing SOP: CORS, WebSockets, and consent to communicat | <section anchor="sec.cors-etc" numbered="true" toc="include" removeInRFC=" | |||
e" anchor="sec.cors-etc"> | false" pn="section-3.3"> | |||
<t> | <name slugifiedName="name-bypassing-sop-cors-websocke">Bypassing SOP: CO | |||
RS, WebSockets, and Consent to Communicate</name> | ||||
<t indent="0" pn="section-3.3-1"> | ||||
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"/ | The W3C CORS spec <xref target="fetch" format="default" sectionFormat= | |||
> is a response to this | "of" derivedContent="fetch"/> is a response to this | |||
demand. In CORS, when a script from origin A executes what would other | demand. In CORS, when a script from origin A executes a potentially un | |||
wise be a forbidden | safe | |||
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 indent="0" pn="section-3.3-2"> | |||
While CORS is designed to allow cross-origin HTTP requests, WebSockets | While CORS is designed to allow cross-origin HTTP requests, WebSockets | |||
<xref target="RFC6455"/> allows | <xref target="RFC6455" format="default" sectionFormat="of" derivedContent="RFC6 | |||
455"/> 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 indent="0" pn="section-3.3-3"> | |||
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" sectionFormat="of" derivedCon | ||||
tent="huang-w2sp"/> | ||||
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 | techniques and in a simplified version of the WebSockets handshake. It | |||
particular, | is important to be wary of CROSS-PROTOCOL attacks in which the attacking 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="include" removeInRFC="fal | ||||
<section title="Security for WebRTC Applications" anchor="sec.rtc-web"> | se" pn="section-4"> | |||
<section title="Access to Local Devices" anchor="sec.rtc-dev-access"> | <name slugifiedName="name-security-for-webrtc-applica">Security for WebRTC | |||
<t> | Applications</name> | |||
As discussed in <xref target="sec.introduction"/>, allowing arbitrary | <section anchor="sec.rtc-dev-access" numbered="true" toc="include" removeI | |||
nRFC="false" pn="section-4.1"> | ||||
<name slugifiedName="name-access-to-local-devices">Access to Local Devic | ||||
es</name> | ||||
<t indent="0" pn="section-4.1-1"> | ||||
As discussed in <xref target="sec.introduction" format="default" secti | ||||
onFormat="of" derivedContent="Section 1"/>, allowing 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 indent="0" pn="section-4.1-2"> | |||
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 their camera and microphone input to be routed somewhere), | |||
he must understand either who is requesting access, where the media | they must understand either 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" indent="adaptive" start="1" pn="section-4. | |||
<list style="numbers"> | 1-3"> | |||
<t>You are sending your media to entity A because you want to | <li pn="section-4.1-3.1" derivedCounter="1.">You are sending your medi | |||
talk to Entity A (e.g., your mother).</t> | a to entity A because you want to | |||
<t>Entity A (e.g., a calling service) asks to access the user's devi | talk to entity A (e.g., your mother).</li> | |||
ces with the assurance | <li pn="section-4.1-3.2" derivedCounter="2.">Entity A (e.g., a calling | |||
that it will transfer the media to entity B (e.g., your mother)</t> | service) asks to access the user's devices with the assurance | |||
</list> | that it will transfer the media to entity B (e.g., your mother).</li | |||
</t> | > | |||
<t> | </ol> | |||
<t indent="0" pn="section-4.1-4"> | ||||
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 indent="0" pn="section-4.1-5"> | |||
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" sectionFormat="of" derivedContent="Section 4.2"/>). | |||
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) and 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="include" removeInRFC="false" pn="section-4 | |||
<t> | .1.1"> | |||
<name slugifiedName="name-threats-from-screen-sharing">Threats from Sc | ||||
reen Sharing</name> | ||||
<t indent="0" pn="section-4.1.1-1"> | ||||
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 indent="0" pn="section-4.1.1-2"> | |||
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 | I.e., 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 indent="0" pn="section-4.1.1-3"> | |||
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 indent="0" pn="section-4.1.1-4"> | |||
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="include" removeInRFC="false" pn="section-4 | |||
<t> | .1.2"> | |||
<name slugifiedName="name-calling-scenarios-and-user-">Calling Scenari | ||||
os and User Expectations</name> | ||||
<t indent="0" pn="section-4.1.2-1"> | ||||
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="include" removeInRFC="false" pn="section | |||
<t> | -4.1.2.1"> | |||
<name slugifiedName="name-dedicated-calling-services">Dedicated Call | ||||
ing Services</name> | ||||
<t indent="0" pn="section-4.1.2.1-1"> | ||||
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 indent="0" pn="section-4.1.2.1-2"> | |||
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" sectionFormat="o | |||
<xref target="sec.third-party-id"/>.) Note that the | f" derivedContent="Section 4.3.2"/> and especially | |||
<xref target="sec.third-party-id" format="default" sectionFormat=" | ||||
of" derivedContent="Section 4.3.2.3"/>). Note that the | ||||
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="include" removeInRFC="false" pn="section | |||
<t> | -4.1.2.2"> | |||
<name slugifiedName="name-calling-the-site-youre-on">Calling the Sit | ||||
e You're On</name> | ||||
<t indent="0" pn="section-4.1.2.2-1"> | ||||
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 " sectionFormat="of" derivedContent="Section 3.1"/>, | |||
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="include" removeInRFC="false" pn="section-4 | |||
<t> | .1.3"> | |||
<name slugifiedName="name-origin-based-security">Origin-Based Security | ||||
</name> | ||||
<t indent="0" pn="section-4.1.3-1"> | ||||
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 indent="0" pn="section-4.1.3-2"> | |||
As discussed in <xref target="sec.same-origin"/>, the basic unit of | As discussed in <xref target="sec.same-origin" format="default" sectio | |||
nFormat="of" derivedContent="Section 3.2"/>, 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 indent="0" pn="section-4.1.3-3"> | |||
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 on any future visit to t | |||
site (including one induced via mash-up or ad network), the site can | hat | |||
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" indent="3" pn="section-4.1.3-4"> | |||
<t hangText="Individual Consent"></t><t>Ask the user for permission fo | <dt pn="section-4.1.3-4.1">Individual Consent</dt> | |||
r each call.</t> | <dd pn="section-4.1.3-4.2">Ask the user for permission for each call | |||
<t></t> | .</dd> | |||
<t hangText="Callee-oriented Consent"></t><t>Only allow calls to a giv | <dt pn="section-4.1.3-4.3">Callee-oriented Consent</dt> | |||
en user.</t> | <dd pn="section-4.1.3-4.4">Only allow calls to a given user.</dd> | |||
<t></t> | <dt pn="section-4.1.3-4.5">Cryptographic Consent</dt> | |||
<t hangText="Cryptographic Consent"></t><t>Only allow calls to a given | <dd pn="section-4.1.3-4.6">Only allow calls to a given set of peer k | |||
set of peer keying material or | eying material or | |||
to a cryptographically established identity.</t> | to a cryptographically established identity.</dd> | |||
</list> | </dl> | |||
</t> | <t indent="0" pn="section-4.1.3-5"> | |||
<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 indent="0" pn="section-4.1.3-6"> | |||
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 | user is calling any user of their choice. One fix for this is to tie c | |||
ls to a | alls to a | |||
cryptographically-established identity. While not suitable for all cas | cryptographically established identity. While not suitable for all cas | |||
es, | 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"/> | sectionFormat="of" derivedContent="RFC8827"/> | |||
describes mechanisms | describes mechanisms which facilitate this sort of consent. | |||
which facilitate this sort of consent. | </t> | |||
</t> | <t indent="0" pn="section-4.1.3-7"> | |||
<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 which express this sor t | |||
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="include" removeInRFC="false" pn="section-4 | ||||
<section title="Security Properties of the Calling Page"> | .1.4"> | |||
<t> | <name slugifiedName="name-security-properties-of-the-">Security Proper | |||
Origin-based security is intended to secure against web attackers. How | ties of the Calling Page</name> | |||
ever, we must | <t indent="0" pn="section-4.1.4-1"> | |||
Origin-based security is intended to secure against Web attackers. How | ||||
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" indent="adaptive" start="1" pn="section- | |||
<list style="numbers"> | 4.1.4-2"> | |||
<t>I connect to http://anything.example.org/. Note that this site is | <li pn="section-4.1.4-2.1" derivedCounter="1.">I connect to <http | |||
unaffiliated | ://anything.example.org/>. Note that this site is unaffiliated | |||
with the calling service.</t> | with the calling service.</li> | |||
<t>The attacker modifies my HTTP connection to inject an IFRAME (or | <li pn="section-4.1.4-2.2" derivedCounter="2.">The attacker modifies | |||
a redirect) | my HTTP connection to inject an IFRAME (or a redirect) | |||
to http://calling-service.example.com</t> | to <http://calling-service.example.com>.</li> | |||
<t>The attacker forges the response from http://calling-service.exa | <li pn="section-4.1.4-2.3" derivedCounter="3.">The attacker forges t | |||
mple.com/ to | he response from <http://calling-service.example.com/> to | |||
inject JS to initiate a call to himself.</t> | inject JS to initiate a call to themselves.</li> | |||
</list> | </ol> | |||
</t> | <t indent="0" pn="section-4.1.4-3"> | |||
<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 them. Moreover, it ne ed 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 indent="0" pn="section-4.1.4-4"> | |||
Even if calls are only possible from HTTPS [RFC2818] sites, | Even if calls are only possible from HTTPS <xref target="RFC2818" form | |||
at="default" sectionFormat="of" derivedContent="RFC2818"/> 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" sectionFormat="of" deriv | |||
l | edContent="finer-grained"/>. This could lead to compromise 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 <strong>pages</strong> 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="include" remov | ||||
<section title="Communications Consent Verification" anchor="sec.rtc-comm- | eInRFC="false" pn="section-4.2"> | |||
consent"> | <name slugifiedName="name-communications-consent-veri">Communications Co | |||
<t> | nsent Verification</name> | |||
As discussed in <xref target="sec.cors-etc"/>, allowing web applicatio | <t indent="0" pn="section-4.2-1"> | |||
ns unrestricted network access | As discussed in <xref target="sec.cors-etc" format="default" sectionFo | |||
rmat="of" derivedContent="Section 3.3"/>, allowing 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 indent="0" pn="section-4.2-2"> | |||
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 themselves 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="include" removeInRFC="fal | |||
<t> | se" pn="section-4.2.1"> | |||
<name slugifiedName="name-ice">ICE</name> | ||||
<t indent="0" pn="section-4.2.1-1"> | ||||
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" sectionFor mat="of" derivedContent="RFC8445"/> 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 indent="0" pn="section-4.2.1-2"> | |||
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" sectionFormat="of" derivedCo ntent="RFC7675"/> 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="include" removeInRFC= | |||
<t> | "false" pn="section-4.2.2"> | |||
<name slugifiedName="name-masking">Masking</name> | ||||
<t indent="0" pn="section-4.2.2-1"> | ||||
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" sectionFormat="of" derivedContent="huang-w2sp"/>. | |||
presence of transparent proxies and therefore if TCP is to be used, | This does not seem like it is of serious concern with DTLS because | |||
then WebSockets style masking MUST be employed. | the ICE handshake enforces receiver consent and there is little evid | |||
</t> | ence | |||
<t> | of passive DTLS proxies of the type studied by Huang. However, becau | |||
Since DTLS (with the anti-chosen plaintext mechanisms required by | se | |||
TLS 1.1) does not allow the attacker to generate predictable | RTCWEB can run over TCP there is some concern that attackers might | |||
ciphertext, there is no need for masking of protocols running over | control the ciphertext by controlling the plaintext input to SCTP. | |||
DTLS (e.g. SCTP over DTLS, UDP over DTLS, etc.). | This risk is only partially mitigated by the fact that the SCTP stac | |||
k controls | ||||
the framing of the packets. | ||||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.2.2-2"> | |||
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="include" removeInRFC="false" pn="section-4 | |||
<t> | .2.3"> | |||
<name slugifiedName="name-backward-compatibility">Backward Compatibili | ||||
ty</name> | ||||
<aside pn="section-4.2.3-1"> | ||||
<t indent="0" pn="section-4.2.3-1.1"> | ||||
Note: The RTCWEB WG ultimately decided to require ICE. This section | ||||
provides context for that decision. | ||||
</t> | ||||
</aside> | ||||
<t indent="0" pn="section-4.2.3-2"> | ||||
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" bare="false" empty="false" indent="3" pn="section | |||
<list style="symbols"> | -4.2.3-3"> | |||
<t>STUN checks without using ICE (i.e., the non-RTC-web endpoint s | <li pn="section-4.2.3-3.1">STUN checks without using ICE (i.e., the | |||
ets up a STUN responder.)</t> | non-RTC-web endpoint sets up a STUN responder).</li> | |||
<t>Use of RTCP as an implicit reachability check.</t> | <li pn="section-4.2.3-3.2">Use of the RTP Control Protocol (RTCP) as | |||
</list> | an implicit reachability check.</li> | |||
</t> | </ul> | |||
<t> | <t indent="0" pn="section-4.2.3-4"> | |||
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 indent="0" pn="section-4.2.3-5"> | |||
In the STUN approach, the WebRTC endpoint is able to verify that | In the STUN approach, the WebRTC endpoint is able to verify that | |||
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 indent="0" pn="section-4.2.3-6"> | |||
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 indent="0" pn="section-4.2.3-7"> | |||
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="include" removeIn | ||||
<section title="IP Location Privacy" anchor="sec.ip.location"> | RFC="false" pn="section-4.2.4"> | |||
<t> | <name slugifiedName="name-ip-location-privacy">IP Location Privacy</na | |||
me> | ||||
<t indent="0" pn="section-4.2.4-1"> | ||||
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. | |||
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 indent="0" pn="section-4.2.4-2"> | |||
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 ect.org] or a VPN. | though it may be hidden via mechanisms like Tor <eref brackets="angl e" 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" s ectionFormat="of" derivedContent="RFC8828"/> | |||
for additional information. | for additional information. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.rtc-comsec" numbered="true" toc="include" removeInRFC | ||||
<section title="Communications Security" anchor="sec.rtc-comsec"> | ="false" pn="section-4.3"> | |||
<t> | <name slugifiedName="name-communications-security">Communications Securi | |||
ty</name> | ||||
<t indent="0" pn="section-4.3-1"> | ||||
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" sectionFormat="of" derive dContent="RFC5479"/> 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" se | |||
t="RFC6347"/> and | ctionFormat="of" derivedContent="RFC3711"/>, DTLS <xref target="RFC6347" format= | |||
DTLS-SRTP <xref target="RFC5763"/>) is well understood. However, we mu | "default" sectionFormat="of" derivedContent="RFC6347"/>, and | |||
st | DTLS-SRTP <xref target="RFC5763" format="default" sectionFormat="of" d | |||
erivedContent="RFC5763"/>) is well understood. 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 indent="0" pn="section-4.3-2"> | |||
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‑flow" modal dialogs which require the user to consent to specific | |||
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" sectionFormat="of" derivedContent="abarth-rtcweb"/>. | |||
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 indent="0" pn="section-4.3-3"> | |||
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" indent="3" pn="section-4.3-4"> | |||
<t hangText="Retrospective compromise of calling service."></t><t>The | <dt pn="section-4.3-4.1">Retrospective compromise of calling service:< | |||
calling service | /dt> | |||
<dd pn="section-4.3-4.2">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 pn="section-4.3-4.3">During-call attack by calling service:</dt> | |||
<t hangText="During-call attack by calling service."></t><t>The callin | <dd pn="section-4.3-4.4">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 indent="0" pn="section-4.3-5"> | |||
</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" sectionFormat="of" derivedContent="Section 4.3.1"/>. | |||
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"/>. | in <xref target="sec.during-attack" format="default" sectionFormat="of " derivedContent="Section 4.3.2"/>. | |||
</t> | </t> | |||
<section title="Protecting Against Retrospective Compromise" anchor="sec | <section anchor="sec.retrospective-compromise" numbered="true" toc="incl | |||
.retrospective-compromise"> | ude" removeInRFC="false" pn="section-4.3.1"> | |||
<t> | <name slugifiedName="name-protecting-against-retrospe">Protecting Agai | |||
nst Retrospective Compromise</name> | ||||
<t indent="0" pn="section-4.3.1-1"> | ||||
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 indent="0" pn="section-4.3.1-2"> | |||
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 Security Descriptions (SDES) <xref target="RFC4568" format="d efault" sectionFormat="of" derivedContent="RFC4568"/>), then retrospective attac k | |||
is trivial. | is trivial. | |||
This form of attack is particularly serious in the Web context becau se | This form of attack is particularly serious in the Web context becau se | |||
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 ecrecy (PFS). | security system), and this mechanism <bcp14>SHOULD</bcp14> provide F orward Secrecy (FS). | |||
The signaling channel/calling service can be used to authenticate th is mechanism. | The signaling channel/calling service can be used to authenticate th is mechanism. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.3.1-3"> | |||
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 either extrac | |||
t long-term | ||||
keying material or to directly access any stored traffic keys. | 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="include" remove | |||
g-attack"> | InRFC="false" pn="section-4.3.2"> | |||
<t> | <name slugifiedName="name-protecting-against-during-c">Protecting Agai | |||
nst During-Call Attack</name> | ||||
<t indent="0" pn="section-4.3.2-1"> | ||||
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" sectionFormat="of" derivedCo ntent="RFC8827"/>. | |||
</t> | </t> | |||
<section title="Key Continuity" anchor="sec.key-continuity"> | <section anchor="sec.key-continuity" numbered="true" toc="include" rem | |||
<t> | oveInRFC="false" pn="section-4.3.2.1"> | |||
<name slugifiedName="name-key-continuity">Key Continuity</name> | ||||
<t indent="0" pn="section-4.3.2.1-1"> | ||||
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" sectionFormat="of" derivedContent="RFC4251"/> uses a similar tech nique. | |||
(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 indent="0" pn="section-4.3.2.1-2"> | |||
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" sectionFormat="of" derivedContent="RFC3760"/> not | ||||
withstanding). | ||||
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" sectionFormat="of" der ivedContent="cranor-wolf"/>, 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 indent="0" pn="section-4.3.2.1-3"> | |||
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="include" removeInRFC="f | |||
<t> | alse" pn="section-4.3.2.2"> | |||
ZRTP <xref target="RFC6189"/> uses a "short authentication string" | <name slugifiedName="name-short-authentication-string">Short Authent | |||
(SAS) which is derived | ication Strings</name> | |||
from the key agreement protocol. This SAS is designed to be compar | <t indent="0" pn="section-4.3.2.2-1"> | |||
ed | ZRTP <xref target="RFC6189" format="default" sectionFormat="of" de | |||
rivedContent="RFC6189"/> uses a "Short Authentication String" (SAS) which is der | ||||
ived | ||||
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 with a different mechanism from that discussed | |||
above) is used thereafter. | above) is used thereafter. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.3.2.2-2"> | |||
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 | problem of a compromised calling service. "Voice cloning" systems, | |||
" systems, which modify | which mimic the voice of a given speaker | |||
voice from one speaker to make it sound like another, | are an active area of research <xref target="deepfakes-ftc" forma | |||
are an active area of research. | t="default" sectionFormat="of" derivedContent="deepfakes-ftc"/> and are already | |||
These systems are already good enough to fool both | being used in | |||
automatic recognition systems <xref target="farus-conversion"/> an | real-world attacks <xref target="deepfakes-fraud" format="default" | |||
d | sectionFormat="of" derivedContent="deepfakes-fraud"/>. | |||
humans <xref target="kain-conversion"/> in many cases, and are of | These attacks are likely | |||
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 indent="0" pn="section-4.3.2.2-3"> | |||
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" section Format="of" derivedContent="whitten-johnny"/>. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.3.2.2-4"> | |||
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" sectionFormat=" of" derivedContent="Section 4.3.2.1"/>. | |||
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="include" rem | |||
<t> | oveInRFC="false" pn="section-4.3.2.3"> | |||
<name slugifiedName="name-third-party-identity">Third-Party Identity | ||||
</name> | ||||
<t indent="0" pn="section-4.3.2.3-1"> | ||||
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" se ctionFormat="of" derivedContent="RFC6749"/>, OpenID <xref target="OpenID" format ="default" sectionFormat="of" derivedContent="OpenID"/>, WebFinger <xref target= "RFC7033" format="default" sectionFormat="of" derivedContent="RFC7033"/>) has be en 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 indent="0" pn="section-4.3.2.3-2"> | |||
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="include" remove | ||||
<section title="Page Access to Media" anchor="sec.page-access"> | InRFC="false" pn="section-4.3.2.4"> | |||
<t> | <name slugifiedName="name-page-access-to-media">Page Access to Media | |||
</name> | ||||
<t indent="0" pn="section-4.3.2.4-1"> | ||||
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. I.e., 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" sectionFor mat="of" derivedContent="Section 4.3.3"/>). In order 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 indent="0" pn="section-4.3.2.4-2"> | |||
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" sectionFormat="of " derivedContent="Section 3"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section title="Malicious Peers" anchor="sec.malicious"> | <section anchor="sec.malicious" numbered="true" toc="include" removeInRF | |||
<t> | C="false" pn="section-4.3.3"> | |||
<name slugifiedName="name-malicious-peers">Malicious Peers</name> | ||||
<t indent="0" pn="section-4.3.3-1"> | ||||
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 for 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. | |||
</t> | </t> | |||
<t> | <t indent="0" pn="section-4.3.3-2"> | |||
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="include" removeInRFC="f | |||
<section title="Correlation of Anonymous Calls"> | alse" pn="section-4.4"> | |||
<t> | <name slugifiedName="name-privacy-considerations">Privacy Considerations | |||
</name> | ||||
<section numbered="true" toc="include" removeInRFC="false" pn="section-4 | ||||
.4.1"> | ||||
<name slugifiedName="name-correlation-of-anonymous-ca">Correlation of | ||||
Anonymous Calls</name> | ||||
<t indent="0" pn="section-4.4.1-1"> | ||||
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" sect ionFormat="of" derivedContent="Section 4.3.2.1"/>), 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" s | |||
than the privacy preserving mode of <xref target="RFC7022"/>). | ectionFormat="of" derivedContent="RFC6222"/> rather | |||
than the privacy-preserving mode of <xref target="RFC7022" format="d | ||||
efault" sectionFormat="of" derivedContent="RFC7022"/>). | ||||
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" sectionFormat="of" derivedCo ntent="RFC8828"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-4 | ||||
<section title="Browser Fingerprinting"> | .4.2"> | |||
<t> | <name slugifiedName="name-browser-fingerprinting">Browser Fingerprinti | |||
ng</name> | ||||
<t indent="0" pn="section-4.4.2-1"> | ||||
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" sectionFormat="of" derivedContent="Fingerprinting"/>. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor="sec.sec_cons" numbered="true" toc="include" removeInRFC="fa | ||||
<section title="Security Considerations" anchor="sec.sec_cons"> | lse" pn="section-5"> | |||
<t>This entire document is about security.</t> | <name slugifiedName="name-security-considerations">Security Considerations | |||
</section> | </name> | |||
<t indent="0" pn="section-5-1">This entire document is about security.</t> | ||||
<section title="Acknowledgements"> | ||||
<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> | |||
<section numbered="true" toc="include" removeInRFC="false" pn="section-6"> | ||||
<section title="IANA Considerations"> | <name slugifiedName="name-iana-considerations">IANA Considerations</name> | |||
<t>There are no IANA considerations.</t> | <t indent="0" pn="section-6-1">This document has no IANA actions.</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 pn="section-7"> | ||||
<references title="Normative References"> | <name slugifiedName="name-references">References</name> | |||
&RFC2119; | <references pn="section-7.1"> | |||
&RFC8174; | <name slugifiedName="name-normative-references">Normative References</na | |||
</references> | me> | |||
<references title="Informative References"> | <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2 | |||
&RFC3261; | 119" quoteTitle="true" derivedAnchor="RFC2119"> | |||
&RFC3552; | ||||
&RFC3711; | ||||
&RFC2818; | ||||
&RFC5479; | ||||
&RFC5763; | ||||
&RFC6347; | ||||
&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"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date of USENIX Security Symposium --> | ||||
<date month="August" year="1999" /> | ||||
</front> | ||||
<seriesInfo name="" value="Proceedings of the 8th USENIX Security Sympos | ||||
ium, 1999"/> | ||||
</reference> | ||||
<reference anchor="cranor-wolf"> | ||||
<front> | ||||
<title>Crying Wolf: An Empirical Study of SSL Warning Effectiveness</t | ||||
itle> | ||||
<author initials="J." surname="Sunshine"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="S." surname="Egelman"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="H." surname="Almuhimedi"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="N." surname="Atri"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="L." surname="cranor"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date of USENIX Security Symposium --> | ||||
<date month="August" year="2009" /> | ||||
</front> | ||||
<seriesInfo name="" value="Proceedings of the 18th USENIX Security Sympo | ||||
sium, 2009"/> | ||||
</reference> | ||||
<reference anchor="kain-conversion"> | ||||
<front> | ||||
<title>Design and Evaluation of a Voice Conversion Algorithm based on | ||||
Spectral Envelope Mapping and Residual Prediction</title> | ||||
<author initials="A." surname="Kain"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="M." surname="Macon"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date of ICASSP 2001 --> | ||||
<date month="May" year="2001" /> | ||||
</front> | ||||
<seriesInfo name="" value="Proceedings of ICASSP, May 2001"/> | ||||
</reference> | ||||
<reference anchor="farus-conversion"> | ||||
<front> | ||||
<title>Speaker Recognition Robustness to Voice Conversion</title> | ||||
<author initials="M." surname="Farrus"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="D." surname="Erro"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="J." surname="Hernando"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date from http://www.researchgate.net/publication/228819912 --> | ||||
<date month="January" year="2008" /> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="huang-w2sp"> | ||||
<front> | ||||
<title>Talking to Yourself for Fun and Profit</title> | ||||
<author initials="L-S." surname="Huang"> | ||||
<organization></organization> | ||||
</author> | ||||
<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 --> | ||||
<date month="May" year="2011" /> | ||||
</front> | ||||
<seriesInfo name="" value="W2SP, 2011"/> | ||||
</reference> | ||||
<reference anchor="finer-grained"> | ||||
<front> | ||||
<title>Beware of Finer-Grained Origins</title> | ||||
<author initials="A." surname="Barth"> | ||||
<organization></organization> | ||||
</author> | ||||
<author initials="C." surname="Jackson"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date from PDF properties --> | ||||
<date month="July" year="2008" /> | ||||
</front> | ||||
<seriesInfo name="" value="W2SP, 2008"/> | ||||
</reference> | ||||
<reference anchor="CORS"> | ||||
<front> | ||||
<title>Cross-Origin Resource Sharing</title> | ||||
<author initials="A." surname="van Kesteren"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date from http://www.w3.org/TR/2014/REC-cors-20140116/ --> | ||||
<date day="16" month="January" year="2014" /> | ||||
</front> | ||||
<format target="http://www.w3.org/TR/cors/" type="TXT"/> | ||||
</reference> | ||||
<reference anchor="SWF"> | ||||
<front> | ||||
<title>SWF File Format Specification Version 19</title> | ||||
<author surname="Adobe"> | ||||
<organization></organization> | ||||
</author> | ||||
<!-- Date from PDF properties --> | ||||
<date day="23" month="April" year="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"> | ||||
<front> | <front> | |||
<title>XMLHttpRequesti Level 2</title> | <title>Key words for use in RFCs to Indicate Requirement Levels</tit | |||
le> | ||||
<author initials="S." surname="Bradner" fullname="S. Bradner"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="1997" month="March"/> | ||||
<abstract> | ||||
<t indent="0">In many standards track documents several words are | ||||
used to signify the requirements in the specification. These words are often ca | ||||
pitalized. This document defines these words as they should be interpreted in IE | ||||
TF documents. This document specifies an Internet Best Current Practices for th | ||||
e Internet Community, and requests discussion and suggestions for improvements.< | ||||
/t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="2119"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2119"/> | ||||
</reference> | ||||
<reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8 | ||||
174" quoteTitle="true" derivedAnchor="RFC8174"> | ||||
<front> | ||||
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti | ||||
tle> | ||||
<author initials="B." surname="Leiba" fullname="B. Leiba"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2017" month="May"/> | ||||
<abstract> | ||||
<t indent="0">RFC 2119 specifies common key words that may be used | ||||
in protocol specifications. This document aims to reduce the ambiguity by cla | ||||
rifying that only UPPERCASE usage of the key words have the defined special mea | ||||
nings.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="14"/> | ||||
<seriesInfo name="RFC" value="8174"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8174"/> | ||||
</reference> | ||||
</references> | ||||
<references pn="section-7.2"> | ||||
<name slugifiedName="name-informative-references">Informative References | ||||
</name> | ||||
<reference anchor="abarth-rtcweb" target="http://rtc-web.alvestrand.com/ | ||||
home/papers/barth-security-prompt.pdf?attredirects=0" quoteTitle="true" derivedA | ||||
nchor="abarth-rtcweb"> | ||||
<front> | ||||
<title>Prompting the user is security failure</title> | ||||
<author initials="A." surname="Barth"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="September" year="2010"/> | ||||
</front> | ||||
<refcontent>RTC-Web Workshop</refcontent> | ||||
</reference> | ||||
<reference anchor="cranor-wolf" target="https://www.usenix.org/legacy/ev | ||||
ent/sec09/tech/full_papers/sunshine.pdf" quoteTitle="true" derivedAnchor="cranor | ||||
-wolf"> | ||||
<front> | ||||
<title>Crying Wolf: An Empirical Study of SSL Warning Effectiveness< | ||||
/title> | ||||
<author initials="J." surname="Sunshine"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Egelman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Almuhimedi"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="N." surname="Atri"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="L." surname="Cranor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="August" year="2009"/> | ||||
</front> | ||||
<refcontent>Proceedings of the 18th USENIX Security Symposium</refcont | ||||
ent> | ||||
</reference> | ||||
<reference anchor="deepfakes-fraud" target="https://www.theverge.com/201 | ||||
9/9/5/20851248/deepfakes-ai-fake-audio-phone-calls-thieves-trick-companies-steal | ||||
ing-money" quoteTitle="true" derivedAnchor="deepfakes-fraud"> | ||||
<front> | ||||
<title>Thieves are now using AI deepfakes to trick companies into se | ||||
nding them money</title> | ||||
<author initials="N." surname="Statt"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="September" year="2019"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="deepfakes-ftc" target="https://www.theverge.com/2020/ | ||||
1/29/21080553/ftc-deepfakes-audio-cloning-joe-rogan-phone-scams" quoteTitle="tru | ||||
e" derivedAnchor="deepfakes-ftc"> | ||||
<front> | ||||
<title>FTC says the tech behind audio deepfakes is getting better</t | ||||
itle> | ||||
<author initials="K." surname="Lyons"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2020"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="fetch" target="https://fetch.spec.whatwg.org/" quoteT | ||||
itle="true" derivedAnchor="fetch"> | ||||
<front> | ||||
<title>Fetch</title> | ||||
<author initials="A." surname="van Kesteren"> | <author initials="A." surname="van Kesteren"> | |||
<organization></organization> | <organization showOnFrontPage="true"/> | |||
</author> | </author> | |||
<date day="17" month="January" year="2012"/> | ||||
</front> | </front> | |||
<format target="http://www.w3.org/TR/XMLHttpRequest/" type="TXT"/> | </reference> | |||
</reference> | <reference anchor="finer-grained" quoteTitle="true" derivedAnchor="finer | |||
-grained"> | ||||
<reference anchor="Fingerprinting"> | ||||
<front> | ||||
<title>Fingerprinting Guidance for Web Specification Authors (Draft)< | ||||
/title> | ||||
<author surname="W3C"> | ||||
<organization></organization> | ||||
</author> | ||||
<date day="24" month="November" year="2013" /> | ||||
</front> | ||||
<format target="https://www.w3.org/TR/fingerprinting-guidance/#acknowle | ||||
dgement/" type="TXT"/> | ||||
</reference> | ||||
<reference anchor="OpenID"> | ||||
<front> | <front> | |||
<title>OpenID Connect Core 1.0</title> | <title>Beware of Finer-Grained Origins</title> | |||
<author initials="C." surname="Jackson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Barth"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="July" year="2008"/> | ||||
</front> | ||||
<refcontent>Web 2.0 Security and Privacy (W2SP 2008)</refcontent> | ||||
</reference> | ||||
<reference anchor="Fingerprinting" target="https://www.w3.org/TR/fingerp | ||||
rinting-guidance/" quoteTitle="true" derivedAnchor="Fingerprinting"> | ||||
<front> | ||||
<title>Mitigating Browser Fingerprinting in Web Specifications</titl | ||||
e> | ||||
<author initials="N." surname="Doty" role="editor"/> | ||||
<date month="March" year="2019"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="huang-w2sp" quoteTitle="true" derivedAnchor="huang-w2 | ||||
sp"> | ||||
<front> | ||||
<title>Talking to Yourself for Fun and Profit</title> | ||||
<author initials="L-S." surname="Huang"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E.Y." surname="Chen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Barth"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Jackson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="May" year="2011"/> | ||||
</front> | ||||
<refcontent>Web 2.0 Security and Privacy (W2SP 2011)</refcontent> | ||||
</reference> | ||||
<reference anchor="OpenID" target="https://openid.net/specs/openid-conne | ||||
ct-core-1_0.html" quoteTitle="true" derivedAnchor="OpenID"> | ||||
<front> | ||||
<title>OpenID Connect Core 1.0</title> | ||||
<author initials="N." surname="Sakimura"> | <author initials="N." surname="Sakimura"> | |||
<organization></organization> | <organization showOnFrontPage="true"/> | |||
</author> | </author> | |||
<author initials="J." surname="Bradley"> | <author initials="J." surname="Bradley"> | |||
<organization></organization> | <organization showOnFrontPage="true"/> | |||
</author> | </author> | |||
<author initials="M." surname="Jones"> | <author initials="M." surname="Jones"> | |||
<organization></organization> | <organization showOnFrontPage="true"/> | |||
</author> | </author> | |||
<author initials="B." surname="de Medeiros"> | <author initials="B." surname="de Medeiros"> | |||
<organization></organization> | <organization showOnFrontPage="true"/> | |||
</author> | </author> | |||
<author initials="C." surname="Mortimore"> | <author initials="C." surname="Mortimore"> | |||
<organization></organization> | <organization showOnFrontPage="true"/> | |||
</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"/> | <reference anchor="RFC2818" target="https://www.rfc-editor.org/info/rfc2 | |||
</reference> | 818" quoteTitle="true" derivedAnchor="RFC2818"> | |||
<front> | ||||
<title>HTTP Over TLS</title> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2000" month="May"/> | ||||
<abstract> | ||||
<t indent="0">This memo describes how to use Transport Layer Secur | ||||
ity (TLS) to secure Hypertext Transfer Protocol (HTTP) connections over the Inte | ||||
rnet. This memo provides information for the Internet community.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="2818"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC2818"/> | ||||
</reference> | ||||
<reference anchor="RFC3261" target="https://www.rfc-editor.org/info/rfc3 | ||||
261" quoteTitle="true" derivedAnchor="RFC3261"> | ||||
<front> | ||||
<title>SIP: Session Initiation Protocol</title> | ||||
<author initials="J." surname="Rosenberg" fullname="J. Rosenberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Schulzrinne" fullname="H. Schulzrinne | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="G." surname="Camarillo" fullname="G. Camarillo"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Johnston" fullname="A. Johnston"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J." surname="Peterson" fullname="J. Peterson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Sparks" fullname="R. Sparks"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Handley" fullname="M. Handley"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Schooler" fullname="E. Schooler"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2002" month="June"/> | ||||
<abstract> | ||||
<t indent="0">This document describes Session Initiation Protocol | ||||
(SIP), an application-layer control (signaling) protocol for creating, modifying | ||||
, and terminating sessions with one or more participants. These sessions includ | ||||
e Internet telephone calls, multimedia distribution, and multimedia conferences. | ||||
[STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3261"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3261"/> | ||||
</reference> | ||||
<reference anchor="RFC3552" target="https://www.rfc-editor.org/info/rfc3 | ||||
552" quoteTitle="true" derivedAnchor="RFC3552"> | ||||
<front> | ||||
<title>Guidelines for Writing RFC Text on Security Considerations</t | ||||
itle> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="B." surname="Korver" fullname="B. Korver"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2003" month="July"/> | ||||
<abstract> | ||||
<t indent="0">All RFCs are required to have a Security Considerati | ||||
ons section. Historically, such sections have been relatively weak. This docume | ||||
nt provides guidelines to RFC authors on how to write a good Security Considerat | ||||
ions section. This document specifies an Internet Best Current Practices for t | ||||
he Internet Community, and requests discussion and suggestions for improvements. | ||||
</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="BCP" value="72"/> | ||||
<seriesInfo name="RFC" value="3552"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3552"/> | ||||
</reference> | ||||
<reference anchor="RFC3711" target="https://www.rfc-editor.org/info/rfc3 | ||||
711" quoteTitle="true" derivedAnchor="RFC3711"> | ||||
<front> | ||||
<title>The Secure Real-time Transport Protocol (SRTP)</title> | ||||
<author initials="M." surname="Baugher" fullname="M. Baugher"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="McGrew" fullname="D. McGrew"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Naslund" fullname="M. Naslund"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Carrara" fullname="E. Carrara"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="K." surname="Norrman" fullname="K. Norrman"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2004" month="March"/> | ||||
<abstract> | ||||
<t indent="0">This document describes the Secure Real-time Transpo | ||||
rt Protocol (SRTP), a profile of the Real-time Transport Protocol (RTP), which c | ||||
an provide confidentiality, message authentication, and replay protection to the | ||||
RTP traffic and to the control traffic for RTP, the Real-time Transport Control | ||||
Protocol (RTCP). [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3711"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3711"/> | ||||
</reference> | ||||
<reference anchor="RFC3760" target="https://www.rfc-editor.org/info/rfc3 | ||||
760" quoteTitle="true" derivedAnchor="RFC3760"> | ||||
<front> | ||||
<title>Securely Available Credentials (SACRED) - Credential Server F | ||||
ramework</title> | ||||
<author initials="D." surname="Gustafson" fullname="D. Gustafson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Just" fullname="M. Just"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Nystrom" fullname="M. Nystrom"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2004" month="April"/> | ||||
<abstract> | ||||
<t indent="0">As the number, and more particularly the number of d | ||||
ifferent types, of devices connecting to the Internet increases, credential mobi | ||||
lity becomes an issue for IETF standardization. This document responds to the r | ||||
equirements on protocols for secure exchange of credentials listed in RFC 3157, | ||||
by presenting an abstract protocol framework. This memo provides information fo | ||||
r the Internet community.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="3760"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC3760"/> | ||||
</reference> | ||||
<reference anchor="RFC4251" target="https://www.rfc-editor.org/info/rfc4 | ||||
251" quoteTitle="true" derivedAnchor="RFC4251"> | ||||
<front> | ||||
<title>The Secure Shell (SSH) Protocol Architecture</title> | ||||
<author initials="T." surname="Ylonen" fullname="T. Ylonen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Lonvick" fullname="C. Lonvick" role=" | ||||
editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2006" month="January"/> | ||||
<abstract> | ||||
<t indent="0">The Secure Shell (SSH) Protocol is a protocol for se | ||||
cure remote login and other secure network services over an insecure network. T | ||||
his document describes the architecture of the SSH protocol, as well as the nota | ||||
tion and terminology used in SSH protocol documents. It also discusses the SSH | ||||
algorithm naming system that allows local extensions. The SSH protocol consists | ||||
of three major components: The Transport Layer Protocol provides server authent | ||||
ication, confidentiality, and integrity with perfect forward secrecy. The User | ||||
Authentication Protocol authenticates the client to the server. The Connection | ||||
Protocol multiplexes the encrypted tunnel into several logical channels. Detail | ||||
s of these protocols are described in separate documents. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4251"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4251"/> | ||||
</reference> | ||||
<reference anchor="RFC4568" target="https://www.rfc-editor.org/info/rfc4 | ||||
568" quoteTitle="true" derivedAnchor="RFC4568"> | ||||
<front> | ||||
<title>Session Description Protocol (SDP) Security Descriptions for | ||||
Media Streams</title> | ||||
<author initials="F." surname="Andreasen" fullname="F. Andreasen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Baugher" fullname="M. Baugher"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Wing" fullname="D. Wing"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2006" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This document defines a Session Description Protocol | ||||
(SDP) cryptographic attribute for unicast media streams. The attribute describ | ||||
es a cryptographic key and other parameters that serve to configure security for | ||||
a unicast media stream in either a single message or a roundtrip exchange. The | ||||
attribute can be used with a variety of SDP media transports, and this document | ||||
defines how to use it for the Secure Real-time Transport Protocol (SRTP) unicas | ||||
t media streams. The SDP crypto attribute requires the services of a data secur | ||||
ity protocol to secure the SDP message. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="4568"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC4568"/> | ||||
</reference> | ||||
<reference anchor="RFC5479" target="https://www.rfc-editor.org/info/rfc5 | ||||
479" quoteTitle="true" derivedAnchor="RFC5479"> | ||||
<front> | ||||
<title>Requirements and Analysis of Media Security Management Protoc | ||||
ols</title> | ||||
<author initials="D." surname="Wing" fullname="D. Wing" role="editor | ||||
"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="S." surname="Fries" fullname="S. Fries"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Tschofenig" fullname="H. Tschofenig"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="F." surname="Audet" fullname="F. Audet"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2009" month="April"/> | ||||
<abstract> | ||||
<t indent="0">This document describes requirements for a protocol | ||||
to negotiate a security context for SIP-signaled Secure RTP (SRTP) media. In ad | ||||
dition to the natural security requirements, this negotiation protocol must inte | ||||
roperate well with SIP in certain ways. A number of proposals have been publish | ||||
ed and a summary of these proposals is in the appendix of this document. This m | ||||
emo provides information for the Internet community.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5479"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5479"/> | ||||
</reference> | ||||
<reference anchor="RFC5763" target="https://www.rfc-editor.org/info/rfc5 | ||||
763" quoteTitle="true" derivedAnchor="RFC5763"> | ||||
<front> | ||||
<title>Framework for Establishing a Secure Real-time Transport Proto | ||||
col (SRTP) Security Context Using Datagram Transport Layer Security (DTLS)</titl | ||||
e> | ||||
<author initials="J." surname="Fischl" fullname="J. Fischl"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="H." surname="Tschofenig" fullname="H. Tschofenig"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2010" month="May"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies how to use the Session Initi | ||||
ation Protocol (SIP) to establish a Secure Real-time Transport Protocol (SRTP) s | ||||
ecurity context using the Datagram Transport Layer Security (DTLS) protocol. It | ||||
describes a mechanism of transporting a fingerprint attribute in the Session De | ||||
scription Protocol (SDP) that identifies the key that will be presented during t | ||||
he DTLS handshake. The key exchange travels along the media path as opposed to | ||||
the signaling path. The SIP Identity mechanism can be used to protect the integ | ||||
rity of the fingerprint attribute from modification by intermediate proxies. [S | ||||
TANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="5763"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC5763"/> | ||||
</reference> | ||||
<reference anchor="RFC6189" target="https://www.rfc-editor.org/info/rfc6 | ||||
189" quoteTitle="true" derivedAnchor="RFC6189"> | ||||
<front> | ||||
<title>ZRTP: Media Path Key Agreement for Unicast Secure RTP</title> | ||||
<author initials="P." surname="Zimmermann" fullname="P. Zimmermann"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Johnston" fullname="A. Johnston" role | ||||
="editor"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J." surname="Callas" fullname="J. Callas"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="April"/> | ||||
<abstract> | ||||
<t indent="0">This document defines ZRTP, a protocol for media pat | ||||
h Diffie-Hellman exchange to agree on a session key and parameters for establish | ||||
ing unicast Secure Real-time Transport Protocol (SRTP) sessions for Voice over I | ||||
P (VoIP) applications. The ZRTP protocol is media path keying because it is mul | ||||
tiplexed on the same port as RTP and does not require support in the signaling p | ||||
rotocol. ZRTP does not assume a Public Key Infrastructure (PKI) or require the | ||||
complexity of certificates in end devices. For the media session, ZRTP provides | ||||
confidentiality, protection against man-in-the-middle (MiTM) attacks, and, in c | ||||
ases where the signaling protocol provides end-to-end integrity protection, auth | ||||
entication. ZRTP can utilize a Session Description Protocol (SDP) attribute to | ||||
provide discovery and authentication through the signaling channel. To provide | ||||
best effort SRTP, ZRTP utilizes normal RTP/AVP (Audio-Visual Profile) profiles. | ||||
ZRTP secures media sessions that include a voice media stream and can also secur | ||||
e media sessions that do not include voice by using an optional digital signatur | ||||
e. This document is not an Internet Standards Track specification; it is publi | ||||
shed for informational purposes.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6189"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6189"/> | ||||
</reference> | ||||
<reference anchor="RFC6222" target="https://www.rfc-editor.org/info/rfc6 | ||||
222" quoteTitle="true" derivedAnchor="RFC6222"> | ||||
<front> | ||||
<title>Guidelines for Choosing RTP Control Protocol (RTCP) Canonical | ||||
Names (CNAMEs)</title> | ||||
<author initials="A." surname="Begen" fullname="A. Begen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Wing" fullname="D. Wing"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="April"/> | ||||
<abstract> | ||||
<t indent="0">The RTP Control Protocol (RTCP) Canonical Name (CNAM | ||||
E) is a persistent transport-level identifier for an RTP endpoint. While the Sy | ||||
nchronization Source (SSRC) identifier of an RTP endpoint may change if a collis | ||||
ion is detected or when the RTP application is restarted, its RTCP CNAME is mean | ||||
t to stay unchanged, so that RTP endpoints can be uniquely identified and associ | ||||
ated with their RTP media streams. For proper functionality, RTCP CNAMEs should | ||||
be unique within the participants of an RTP session. However, the existing gui | ||||
delines for choosing the RTCP CNAME provided in the RTP standard are insufficien | ||||
t to achieve this uniqueness. This memo updates those guidelines to allow endpo | ||||
ints to choose unique RTCP CNAMEs. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6222"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6222"/> | ||||
</reference> | ||||
<reference anchor="RFC6347" target="https://www.rfc-editor.org/info/rfc6 | ||||
347" quoteTitle="true" derivedAnchor="RFC6347"> | ||||
<front> | ||||
<title>Datagram Transport Layer Security Version 1.2</title> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="N." surname="Modadugu" fullname="N. Modadugu"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2012" month="January"/> | ||||
<abstract> | ||||
<t indent="0">This document specifies version 1.2 of the Datagram | ||||
Transport Layer Security (DTLS) protocol. The DTLS protocol provides communicat | ||||
ions privacy for datagram protocols. The protocol allows client/server applicat | ||||
ions to communicate in a way that is designed to prevent eavesdropping, tamperin | ||||
g, or message forgery. The DTLS protocol is based on the Transport Layer Securi | ||||
ty (TLS) protocol and provides equivalent security guarantees. Datagram semanti | ||||
cs of the underlying transport are preserved by the DTLS protocol. This documen | ||||
t updates DTLS 1.0 to work with TLS version 1.2. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6347"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6347"/> | ||||
</reference> | ||||
<reference anchor="RFC6454" target="https://www.rfc-editor.org/info/rfc6 | ||||
454" quoteTitle="true" derivedAnchor="RFC6454"> | ||||
<front> | ||||
<title>The Web Origin Concept</title> | ||||
<author initials="A." surname="Barth" fullname="A. Barth"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="December"/> | ||||
<abstract> | ||||
<t indent="0">This document defines the concept of an "origin", wh | ||||
ich is often used as the scope of authority or privilege by user agents. Typica | ||||
lly, user agents isolate content retrieved from different origins to prevent mal | ||||
icious web site operators from interfering with the operation of benign web site | ||||
s. In addition to outlining the principles that underlie the concept of origin, | ||||
this document details how to determine the origin of a URI and how to serialize | ||||
an origin into a string. It also defines an HTTP header field, named "Origin", | ||||
that indicates which origins are associated with an HTTP request. [STANDARDS- | ||||
TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6454"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6454"/> | ||||
</reference> | ||||
<reference anchor="RFC6455" target="https://www.rfc-editor.org/info/rfc6 | ||||
455" quoteTitle="true" derivedAnchor="RFC6455"> | ||||
<front> | ||||
<title>The WebSocket Protocol</title> | ||||
<author initials="I." surname="Fette" fullname="I. Fette"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="A." surname="Melnikov" fullname="A. Melnikov"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2011" month="December"/> | ||||
<abstract> | ||||
<t indent="0">The WebSocket Protocol enables two-way communication | ||||
between a client running untrusted code in a controlled environment to a remote | ||||
host that has opted-in to communications from that code. The security model us | ||||
ed for this is the origin-based security model commonly used by web browsers. T | ||||
he protocol consists of an opening handshake followed by basic message framing, | ||||
layered over TCP. The goal of this technology is to provide a mechanism for bro | ||||
wser-based applications that need two-way communication with servers that does n | ||||
ot rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or < | ||||
iframe>s and long polling). [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6455"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6455"/> | ||||
</reference> | ||||
<reference anchor="RFC6749" target="https://www.rfc-editor.org/info/rfc6 | ||||
749" quoteTitle="true" derivedAnchor="RFC6749"> | ||||
<front> | ||||
<title>The OAuth 2.0 Authorization Framework</title> | ||||
<author initials="D." surname="Hardt" fullname="D. Hardt" role="edit | ||||
or"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2012" month="October"/> | ||||
<abstract> | ||||
<t indent="0">The OAuth 2.0 authorization framework enables a thir | ||||
d-party application to obtain limited access to an HTTP service, either on behal | ||||
f of a resource owner by orchestrating an approval interaction between the resou | ||||
rce owner and the HTTP service, or by allowing the third-party application to ob | ||||
tain access on its own behalf. This specification replaces and obsoletes the OA | ||||
uth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="6749"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC6749"/> | ||||
</reference> | ||||
<reference anchor="RFC7022" target="https://www.rfc-editor.org/info/rfc7 | ||||
022" quoteTitle="true" derivedAnchor="RFC7022"> | ||||
<front> | ||||
<title>Guidelines for Choosing RTP Control Protocol (RTCP) Canonical | ||||
Names (CNAMEs)</title> | ||||
<author initials="A." surname="Begen" fullname="A. Begen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Perkins" fullname="C. Perkins"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Wing" fullname="D. Wing"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="E." surname="Rescorla" fullname="E. Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2013" month="September"/> | ||||
<abstract> | ||||
<t indent="0">The RTP Control Protocol (RTCP) Canonical Name (CNAM | ||||
E) is a persistent transport-level identifier for an RTP endpoint. While the Sy | ||||
nchronization Source (SSRC) identifier of an RTP endpoint may change if a collis | ||||
ion is detected or when the RTP application is restarted, its RTCP CNAME is mean | ||||
t to stay unchanged, so that RTP endpoints can be uniquely identified and associ | ||||
ated with their RTP media streams.</t> | ||||
<t indent="0">For proper functionality, RTCP CNAMEs should be uniq | ||||
ue within the participants of an RTP session. However, the existing guidelines | ||||
for choosing the RTCP CNAME provided in the RTP standard (RFC 3550) are insuffic | ||||
ient to achieve this uniqueness. RFC 6222 was published to update those guideli | ||||
nes to allow endpoints to choose unique RTCP CNAMEs. Unfortunately, later inves | ||||
tigations showed that some parts of the new algorithms were unnecessarily compli | ||||
cated and/or ineffective. This document addresses these concerns and replaces R | ||||
FC 6222.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7022"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7022"/> | ||||
</reference> | ||||
<reference anchor="RFC7033" target="https://www.rfc-editor.org/info/rfc7 | ||||
033" quoteTitle="true" derivedAnchor="RFC7033"> | ||||
<front> | ||||
<title>WebFinger</title> | ||||
<author initials="P." surname="Jones" fullname="P. Jones"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="G." surname="Salgueiro" fullname="G. Salgueiro"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Jones" fullname="M. Jones"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J." surname="Smarr" fullname="J. Smarr"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2013" month="September"/> | ||||
<abstract> | ||||
<t indent="0">This specification defines the WebFinger protocol, w | ||||
hich can be used to discover information about people or other entities on the I | ||||
nternet using standard HTTP methods. WebFinger discovers information for a URI | ||||
that might not be usable as a locator otherwise, such as account or email URIs.< | ||||
/t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7033"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7033"/> | ||||
</reference> | ||||
<reference anchor="RFC7675" target="https://www.rfc-editor.org/info/rfc7 | ||||
675" quoteTitle="true" derivedAnchor="RFC7675"> | ||||
<front> | ||||
<title>Session Traversal Utilities for NAT (STUN) Usage for Consent | ||||
Freshness</title> | ||||
<author initials="M." surname="Perumal" fullname="M. Perumal"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="D." surname="Wing" fullname="D. Wing"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="R." surname="Ravindranath" fullname="R. Ravindrana | ||||
th"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="T." surname="Reddy" fullname="T. Reddy"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="M." surname="Thomson" fullname="M. Thomson"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2015" month="October"/> | ||||
<abstract> | ||||
<t indent="0">To prevent WebRTC applications, such as browsers, fr | ||||
om launching attacks by sending traffic to unwilling victims, periodic consent t | ||||
o send needs to be obtained from remote endpoints.</t> | ||||
<t indent="0">This document describes a consent mechanism using a | ||||
new Session Traversal Utilities for NAT (STUN) usage.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="7675"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC7675"/> | ||||
</reference> | ||||
<reference anchor="RFC8445" target="https://www.rfc-editor.org/info/rfc8 | ||||
445" quoteTitle="true" derivedAnchor="RFC8445"> | ||||
<front> | ||||
<title>Interactive Connectivity Establishment (ICE): A Protocol for | ||||
Network Address Translator (NAT) Traversal</title> | ||||
<author initials="A." surname="Keranen" fullname="A. Keranen"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="C." surname="Holmberg" fullname="C. Holmberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J." surname="Rosenberg" fullname="J. Rosenberg"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date year="2018" month="July"/> | ||||
<abstract> | ||||
<t indent="0">This document describes a protocol for Network Addre | ||||
ss Translator (NAT) traversal for UDP-based communication. This protocol is cal | ||||
led Interactive Connectivity Establishment (ICE). ICE makes use of the Session | ||||
Traversal Utilities for NAT (STUN) protocol and its extension, Traversal Using R | ||||
elay NAT (TURN).</t> | ||||
<t indent="0">This document obsoletes RFC 5245.</t> | ||||
</abstract> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8445"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8445"/> | ||||
</reference> | ||||
<reference anchor="RFC8825" target="https://www.rfc-editor.org/info/rfc8 | ||||
825" quoteTitle="true" derivedAnchor="RFC8825"> | ||||
<front> | ||||
<title>Overview: Real-Time Protocols for Browser-Based Applications< | ||||
/title> | ||||
<author initials="H." surname="Alvestrand" fullname="Harald T. Alves | ||||
trand"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8825"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8825"/> | ||||
</reference> | ||||
<reference anchor="RFC8827" target="https://www.rfc-editor.org/info/rfc8 | ||||
827" quoteTitle="true" derivedAnchor="RFC8827"> | ||||
<front> | ||||
<title>WebRTC Security Architecture</title> | ||||
<author initials="E." surname="Rescorla" fullname="Eric Rescorla"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8827"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8827"/> | ||||
</reference> | ||||
<reference anchor="RFC8828" target="https://www.rfc-editor.org/info/rfc8 | ||||
828" quoteTitle="true" derivedAnchor="RFC8828"> | ||||
<front> | ||||
<title>WebRTC IP Address Handling Requirements</title> | ||||
<author initials="J" surname="Uberti" fullname="Justin Uberti"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="G" surname="Shieh" fullname="Guo-wei Shieh"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="January" year="2021"/> | ||||
</front> | ||||
<seriesInfo name="RFC" value="8828"/> | ||||
<seriesInfo name="DOI" value="10.17487/RFC8828"/> | ||||
</reference> | ||||
<reference anchor="SWF" target="https://www.adobe.com/content/dam/acom/e | ||||
n/devnet/pdf/swf-file-format-spec.pdf" quoteTitle="true" derivedAnchor="SWF"> | ||||
<front> | ||||
<title>SWF File Format Specification Version 19</title> | ||||
<author/> | ||||
<date month="April" year="2013"/> | ||||
</front> | ||||
</reference> | ||||
<reference anchor="whitten-johnny" target="https://www.usenix.org/legacy | ||||
/publications/library/proceedings/sec99/whitten.html" quoteTitle="true" derivedA | ||||
nchor="whitten-johnny"> | ||||
<front> | ||||
<title>Why Johnny Can't Encrypt: A Usability Evaluation of PGP 5.0</ | ||||
title> | ||||
<author initials="A." surname="Whitten"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<author initials="J.D." surname="Tygar"> | ||||
<organization showOnFrontPage="true"/> | ||||
</author> | ||||
<date month="August" year="1999"/> | ||||
</front> | ||||
<refcontent>Proceedings of the 8th USENIX Security Symposium</refconte | ||||
nt> | ||||
</reference> | ||||
</references> | ||||
</references> | </references> | |||
<section numbered="false" toc="include" removeInRFC="false" pn="section-appe | ||||
</back> | ndix.a"> | |||
<name slugifiedName="name-acknowledgements">Acknowledgements</name> | ||||
<t indent="0" pn="section-appendix.a-1"> | ||||
<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" | ||||
format="default" sectionFormat="of" derivedContent="Section 4.2.1"/>), <contact | ||||
fullname="Matthew Kaufman"/>, | ||||
<contact fullname="Martin Thomson"/>, <contact fullname="Magnus West | ||||
erlund"/>. | ||||
</t> | ||||
</section> | ||||
<section anchor="authors-addresses" numbered="false" removeInRFC="false" toc | ||||
="include" pn="section-appendix.b"> | ||||
<name slugifiedName="name-authors-address">Author's Address</name> | ||||
<author fullname="Eric Rescorla" initials="E." surname="Rescorla"> | ||||
<organization showOnFrontPage="true">Mozilla</organization> | ||||
<address> | ||||
<email>ekr@rtfm.com</email> | ||||
</address> | ||||
</author> | ||||
</section> | ||||
</back> | ||||
</rfc> | </rfc> | |||
End of changes. 191 change blocks. | ||||
810 lines changed or deleted | 1682 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/ |