Skip to content

Commit c57f64f

Browse files
Merge pull request #693 from w3c/chrisn-registry-requirements
SHA: c414b9c Reason: push, by aboba Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 0b8ac0c commit c57f64f

File tree

1 file changed

+35
-30
lines changed

1 file changed

+35
-30
lines changed

index.html

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<link href="https://www.w3.org/StyleSheets/TR/2021/W3C-ED" rel="stylesheet">
88
<meta content="Bikeshed version 5edf5e459, updated Thu Jun 22 11:28:01 2023 -0700" name="generator">
99
<link href="https://www.w3.org/TR/webcodecs/" rel="canonical">
10-
<meta content="6185cec02e54aa79409b97c7c402ef79d4572b94" name="document-revision">
10+
<meta content="c414b9c43d2f080c34b5d642fd7e299935227188" name="document-revision">
1111
<style>
1212
main > dl > dd {
1313
margin-bottom: 1em;
@@ -6615,48 +6615,51 @@ <h2 class="heading settled" data-level="11" id="resource-reclamation"><span clas
66156615
<p>An <code class="idl"><a data-link-type="idl" href="#audiodecoder" id="ref-for-audiodecoder⑥">AudioDecoder</a></code>, when its tab is audibly playing audio.</p>
66166616
</ul>
66176617
<h2 class="heading settled" data-level="12" id="security-considerations"><span class="secno">12. </span><span class="content">Security Considerations</span><a class="self-link" href="#security-considerations"></a></h2>
6618-
<p>The primary security impact is that features of this API make it easier for an
6618+
<div class="non-normative">
6619+
This section is non-normative.
6620+
<p>The primary security impact is that features of this API make it easier for an
66196621
attacker to exploit vulnerabilities in the underlying platform codecs.
66206622
Additionally, new abilities to configure and control the codecs can allow for
66216623
new exploits that rely on a specific configuration and/or sequence of control
66226624
operations.</p>
6623-
<p>Platform codecs are historically an internal detail of APIs like <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/media.html#htmlmediaelement" id="ref-for-htmlmediaelement">HTMLMediaElement</a></code>, <a data-link-type="biblio" href="#biblio-webaudio" title="Web Audio API">[WEBAUDIO]</a>, and <a data-link-type="biblio" href="#biblio-webrtc" title="WebRTC: Real-Time Communication in Browsers">[WebRTC]</a>. In this way, it has always
6625+
<p>Platform codecs are historically an internal detail of APIs like <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/media.html#htmlmediaelement" id="ref-for-htmlmediaelement">HTMLMediaElement</a></code>, <a data-link-type="biblio" href="#biblio-webaudio" title="Web Audio API">[WEBAUDIO]</a>, and <a data-link-type="biblio" href="#biblio-webrtc" title="WebRTC: Real-Time Communication in Browsers">[WebRTC]</a>. In this way, it has always
66246626
been possible to attack the underlying codecs by using malformed media
66256627
files/streams and invoking the various API control methods.</p>
6626-
<p>For example, you can send any stream to a decoder by first wrapping that stream
6628+
<p>For example, you can send any stream to a decoder by first wrapping that stream
66276629
in a media container (e.g. mp4) and setting that as the <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/media.html#dom-media-src" id="ref-for-dom-media-src">src</a></code> of an <code class="idl"><a data-link-type="idl" href="https://html.spec.whatwg.org/multipage/media.html#htmlmediaelement" id="ref-for-htmlmediaelement①">HTMLMediaElement</a></code>. You can then cause the underlying video decoder to
66286630
be <code class="idl"><a data-link-type="idl" href="#dom-videodecoder-reset" id="ref-for-dom-videodecoder-reset①">reset()</a></code> by setting a new value for <code>&lt;video>.currentTime</code>.</p>
6629-
<p>WebCodecs makes such attacks easier by exposing low level control when inputs
6631+
<p>WebCodecs makes such attacks easier by exposing low level control when inputs
66306632
are provided and direct access to invoke the codec control methods. This also
66316633
affords attackers the ability to invoke sequences of control methods that were
66326634
not previously possible via the higher level APIs.</p>
6633-
<p>The Working Group expects User Agents to mitigate this risk by extensively
6635+
<p>The Working Group expects User Agents to mitigate this risk by extensively
66346636
fuzzing their implementation with random inputs and control method invocations.
66356637
Additionally, User Agents are encouraged to isolate their underlying codecs in
66366638
processes with restricted privileges (sandbox) as a barrier against successful
66376639
exploits being able to read user data.</p>
6638-
<p>An additional concern is exposing the underlying codecs to input mutation race
6639-
conditions. Specifically, it <em class="rfc2119">SHOULD</em> not be possible for
6640-
a site to mutate a codec input or output while the underlying codec is still
6641-
operating on that data. This concern is mitigated by ensuring that input and
6642-
output interfaces are immutable.</p>
6643-
<h2 class="heading settled" data-level="13" id="privacy-considerations"><span class="secno">13. </span><span class="content">Privacy Considerations</span><a class="self-link" href="#privacy-considerations"></a></h2>
6644-
<p>The primary privacy impact is an increased ability to fingerprint users by
6640+
<p>An additional concern is exposing the underlying codecs to input mutation race
6641+
conditions, such as allowing a site to mutate a codec input or output while
6642+
the underlying codec is still operating on that data. This concern is mitigated
6643+
by ensuring that input and output interfaces are immutable.</p>
6644+
<h2 class="heading settled" data-level="13" id="privacy-considerations"><span class="secno">13. </span><span class="content">Privacy Considerations</span><a class="self-link" href="#privacy-considerations"></a></h2>
6645+
<div class="non-normative">
6646+
This section is non-normative.
6647+
<p>The primary privacy impact is an increased ability to fingerprint users by
66456648
querying for different codec capabilities to establish a codec feature profile.
66466649
Much of this profile is already exposed by existing APIs. Such profiles are very
66476650
unlikely to be uniquely identifying, but can be used with other metrics to
66486651
create a fingerprint.</p>
6649-
<p>An attacker can accumulate a codec feature profile by calling <code>IsConfigSupported()</code> methods with a number of different configuration
6652+
<p>An attacker can accumulate a codec feature profile by calling <code>IsConfigSupported()</code> methods with a number of different configuration
66506653
dictionaries. Similarly, an attacker can attempt to <code>configure()</code> a codec with
66516654
different configuration dictionaries and observe which configurations are
66526655
accepted.</p>
6653-
<p>Attackers can also use existing APIs to establish much of the codec feature
6656+
<p>Attackers can also use existing APIs to establish much of the codec feature
66546657
profile. For example, the <a data-link-type="biblio" href="#biblio-media-capabilities" title="Media Capabilities">[media-capabilities]</a> <code class="idl"><a data-link-type="idl" href="https://w3c.github.io/media-capabilities/#dom-mediacapabilities-decodinginfo" id="ref-for-dom-mediacapabilities-decodinginfo">decodingInfo()</a></code> API
66556658
describes what types of decoders are supported and its <code class="idl"><a data-link-type="idl" href="https://w3c.github.io/media-capabilities/#dom-mediacapabilitiesinfo-powerefficient" id="ref-for-dom-mediacapabilitiesinfo-powerefficient">powerEfficient</a></code> attribute can signal when a decoder uses hardware acceleration. Similarly, the <a data-link-type="biblio" href="#biblio-webrtc" title="WebRTC: Real-Time Communication in Browsers">[WebRTC]</a> <code class="idl"><a data-link-type="idl" href="https://w3c.github.io/webrtc-pc/#dom-rtcrtpsender-getcapabilities" id="ref-for-dom-rtcrtpsender-getcapabilities">getCapabilities()</a></code> API can be used to determine what
66566659
types of encoders are supported and the <code class="idl"><a data-link-type="idl" href="https://w3c.github.io/webrtc-pc/#widl-RTCPeerConnection-getStats-Promise-RTCStatsReport--MediaStreamTrack-selector" id="ref-for-widl-RTCPeerConnection-getStats-Promise-RTCStatsReport--MediaStreamTrack-selector">getStats()</a></code> API can
66576660
be used to determine when an encoder uses hardware acceleration. WebCodecs will
66586661
expose some additional information in the form of low level codec features.</p>
6659-
<p>A codec feature profile alone is unlikely to be uniquely identifying. Underlying
6662+
<p>A codec feature profile alone is unlikely to be uniquely identifying. Underlying
66606663
codecs are often implemented entirely in software (be it part of the User Agent
66616664
binary or part of the operating system), such that all users who run that
66626665
software will have a common set of capabilities. Additionally, underlying codecs
@@ -6666,39 +6669,41 @@ <h2 class="heading settled" data-level="13" id="privacy-considerations"><span cl
66666669
outliers (some users can be running outdated versions of software codecs or use
66676670
a rare mix of custom assembled hardware), but most of the time a given codec
66686671
feature profile is shared by a large group of users.</p>
6669-
<p>Segmenting groups of users by codec feature profile still amounts to a bit of
6672+
<p>Segmenting groups of users by codec feature profile still amounts to a bit of
66706673
entropy that can be combined with other metrics to uniquely identify a user.
66716674
User Agents <em class="rfc2119">MAY</em> partially mitigate this by returning an
66726675
error whenever a site attempts to exhaustively probe for codec capabilities.
66736676
Additionally, User Agents <em class="rfc2119">MAY</em> implement a "privacy
66746677
budget", which depletes as authors use WebCodecs and other identifying APIs.
66756678
Upon exhaustion of the privacy budget, codec capabilities could be reduced to a
66766679
common baseline or prompt for user approval.</p>
6677-
<h2 class="heading settled" data-level="14" id="best-practices-developers"><span class="secno">14. </span><span class="content">Best Practices for Authors Using WebCodecs</span><a class="self-link" href="#best-practices-developers"></a></h2>
6678-
<div class="non-normative">
6679-
This section is non-normative.
6680-
<p>While WebCodecs internally operates on background threads, authors working with
6680+
<h2 class="heading settled" data-level="14" id="best-practices-developers"><span class="secno">14. </span><span class="content">Best Practices for Authors Using WebCodecs</span><a class="self-link" href="#best-practices-developers"></a></h2>
6681+
<div class="non-normative">
6682+
This section is non-normative.
6683+
<p>While WebCodecs internally operates on background threads, authors working with
66816684
realtime media or in contended main thread environments are encouraged to ensure their
66826685
media pipelines operate in worker contexts entirely independent of the main
66836686
thread where possible. For example, realtime media processing of <code class="idl"><a data-link-type="idl" href="#videoframe" id="ref-for-videoframe⑦①">VideoFrame</a></code>s
66846687
are generally to be done in a worker context.</p>
6685-
<p>The main thread has significant potential for high contention and jank that can
6688+
<p>The main thread has significant potential for high contention and jank that can
66866689
go unnoticed in development, yet degrade inconsistently across devices and User
66876690
Agents in the field -- potentially dramatically impacting the end user
66886691
experience. Ensuring the media pipeline is decoupled from the main thread helps
66896692
provide a smooth experience for end users.</p>
6690-
<p>Authors using the main thread for their media pipeline ought to be sure of
6693+
<p>Authors using the main thread for their media pipeline ought to be sure of
66916694
their target frame rates, main thread workload, how their application will be
66926695
embedded, and the class of devices their users will be using.</p>
6693-
</div>
6694-
<h2 class="heading settled" data-level="15" id="acknowledgements"><span class="secno">15. </span><span class="content">Acknowledgements</span><a class="self-link" href="#acknowledgements"></a></h2>
6695-
<p>The editors would like to thank Alex Russell, Chris Needham, Dale Curtis, Dan
6696+
</div>
6697+
<h2 class="heading settled" data-level="15" id="acknowledgements"><span class="secno">15. </span><span class="content">Acknowledgements</span><a class="self-link" href="#acknowledgements"></a></h2>
6698+
<p>The editors would like to thank Alex Russell, Chris Needham, Dale Curtis, Dan
66966699
Sanders, Eugene Zemtsov, Francois Daoust, Guido Urdaneta, Harald Alvestrand,
66976700
Jan-Ivar Bruaroey, Jer Noble, Mark Foltz, Peter Thatcher, Steve Anton, Matt
66986701
Wolenetz, Rijubrata Bhaumik, Thomas Guilbert, Tuukka Toivonen, and Youenn Fablet
66996702
for their contributions to this specification. Thank you also to the many
67006703
others who contributed to the specification, including through their
67016704
participation on the mailing list and in the issues.</p>
6705+
</div>
6706+
</div>
67026707
</main>
67036708
<div data-fill-with="conformance">
67046709
<h2 class="no-ref no-num heading settled" id="w3c-conformance"><span class="content">Conformance</span><a class="self-link" href="#w3c-conformance"></a></h2>
@@ -7897,8 +7902,6 @@ <h3 class="no-num no-ref heading settled" id="normative"><span class="content">N
78977902
<dd>Anne van Kesteren; et al. <a href="https://html.spec.whatwg.org/multipage/"><cite>HTML Standard</cite></a>. Living Standard. URL: <a href="https://html.spec.whatwg.org/multipage/">https://html.spec.whatwg.org/multipage/</a>
78987903
<dt id="biblio-infra">[INFRA]
78997904
<dd>Anne van Kesteren; Domenic Denicola. <a href="https://infra.spec.whatwg.org/"><cite>Infra Standard</cite></a>. Living Standard. URL: <a href="https://infra.spec.whatwg.org/">https://infra.spec.whatwg.org/</a>
7900-
<dt id="biblio-media-capabilities">[MEDIA-CAPABILITIES]
7901-
<dd>Jean-Yves Avenard; Will Cassella. <a href="https://w3c.github.io/media-capabilities/"><cite>Media Capabilities</cite></a>. URL: <a href="https://w3c.github.io/media-capabilities/">https://w3c.github.io/media-capabilities/</a>
79027905
<dt id="biblio-mediastream-recording">[MEDIASTREAM-RECORDING]
79037906
<dd>Miguel Casas-sanchez. <a href="https://w3c.github.io/mediacapture-record/"><cite>MediaStream Recording</cite></a>. URL: <a href="https://w3c.github.io/mediacapture-record/">https://w3c.github.io/mediacapture-record/</a>
79047907
<dt id="biblio-mimesniff">[MIMESNIFF]
@@ -7911,15 +7914,15 @@ <h3 class="no-num no-ref heading settled" id="normative"><span class="content">N
79117914
<dd>Amelia Bellamy-Royds; et al. <a href="https://svgwg.org/svg2-draft/"><cite>Scalable Vector Graphics (SVG) 2</cite></a>. URL: <a href="https://svgwg.org/svg2-draft/">https://svgwg.org/svg2-draft/</a>
79127915
<dt id="biblio-webidl">[WEBIDL]
79137916
<dd>Edgar Chen; Timothy Gu. <a href="https://webidl.spec.whatwg.org/"><cite>Web IDL Standard</cite></a>. Living Standard. URL: <a href="https://webidl.spec.whatwg.org/">https://webidl.spec.whatwg.org/</a>
7914-
<dt id="biblio-webrtc">[WebRTC]
7915-
<dd>Cullen Jennings; et al. <a href="https://w3c.github.io/webrtc-pc/"><cite>WebRTC: Real-Time Communication in Browsers</cite></a>. URL: <a href="https://w3c.github.io/webrtc-pc/">https://w3c.github.io/webrtc-pc/</a>
79167917
<dt id="biblio-webrtc-svc">[WebRTC-SVC]
79177918
<dd>Bernard Aboba. <a href="https://w3c.github.io/webrtc-svc/"><cite>Scalable Video Coding (SVC) Extension for WebRTC</cite></a>. URL: <a href="https://w3c.github.io/webrtc-svc/">https://w3c.github.io/webrtc-svc/</a>
79187919
</dl>
79197920
<h3 class="no-num no-ref heading settled" id="informative"><span class="content">Informative References</span><a class="self-link" href="#informative"></a></h3>
79207921
<dl>
79217922
<dt id="biblio-h273">[H.273]
79227923
<dd><a href="https://www.itu.int/rec/T-REC-H.273/en"><cite>Coding-independent code points for video signal type identification</cite></a>. December 2016. URL: <a href="https://www.itu.int/rec/T-REC-H.273/en">https://www.itu.int/rec/T-REC-H.273/en</a>
7924+
<dt id="biblio-media-capabilities">[MEDIA-CAPABILITIES]
7925+
<dd>Jean-Yves Avenard; Will Cassella. <a href="https://w3c.github.io/media-capabilities/"><cite>Media Capabilities</cite></a>. URL: <a href="https://w3c.github.io/media-capabilities/">https://w3c.github.io/media-capabilities/</a>
79237926
<dt id="biblio-media-source-2">[MEDIA-SOURCE-2]
79247927
<dd>Matthew Wolenetz; Mark Watson. <a href="https://w3c.github.io/media-source/"><cite>Media Source Extensions™</cite></a>. URL: <a href="https://w3c.github.io/media-source/">https://w3c.github.io/media-source/</a>
79257928
<dt id="biblio-rfc6381">[RFC6381]
@@ -7932,6 +7935,8 @@ <h3 class="no-num no-ref heading settled" id="informative"><span class="content"
79327935
<dd>Chris Cunningham; Paul Adenot; Bernard Aboba. <a href="https://w3c.github.io/webcodecs/codec_registry.html"><cite>WebCodecs Codec Registry</cite></a>. URL: <a href="https://w3c.github.io/webcodecs/codec_registry.html">https://w3c.github.io/webcodecs/codec_registry.html</a>
79337936
<dt id="biblio-webcodecs-video-frame-metadata-registry">[WEBCODECS-VIDEO-FRAME-METADATA-REGISTRY]
79347937
<dd>Youenn Fablet. <a href="https://w3c.github.io/webcodecs/video_frame_metadata_registry.html"><cite>WebCodecs VideoFrame Metadata Registry</cite></a>. ED. URL: <a href="https://w3c.github.io/webcodecs/video_frame_metadata_registry.html">https://w3c.github.io/webcodecs/video_frame_metadata_registry.html</a>
7938+
<dt id="biblio-webrtc">[WebRTC]
7939+
<dd>Cullen Jennings; et al. <a href="https://w3c.github.io/webrtc-pc/"><cite>WebRTC: Real-Time Communication in Browsers</cite></a>. URL: <a href="https://w3c.github.io/webrtc-pc/">https://w3c.github.io/webrtc-pc/</a>
79357940
</dl>
79367941
<h2 class="no-num no-ref heading settled" id="idl-index"><span class="content">IDL Index</span><a class="self-link" href="#idl-index"></a></h2>
79377942
<pre class="idl highlight def">[<a class="idl-code" data-link-type="extended-attribute" href="https://webidl.spec.whatwg.org/#Exposed"><c- g>Exposed</c-></a>=(<c- n>Window</c->,<c- n>DedicatedWorker</c->), <a class="idl-code" data-link-type="extended-attribute" href="https://webidl.spec.whatwg.org/#SecureContext"><c- g>SecureContext</c-></a>]

0 commit comments

Comments
 (0)