On Fri, May 6, 2022 at 4:45 PM Mike Taylor <miketa...@chromium.org> wrote:

> Hi there,
>
> While we review this, can we ask WebKit for a signal? (
> bit.ly/blink-signals).
>

Done - see:
https://lists.webkit.org/pipermail/webkit-dev/2022-May/032222.html


> Also, https://github.com/w3ctag/design-reviews/issues/618 is the TAG
> review for this, correct?
>

Not quite.  This was a review of just one aspect of ORB - having a list of
MIME types for which it is never allowed to have a response in mode=no-cors
(this aspect is shared across ORB and CORB) .  OTOH some comments in this
review
<https://github.com/w3ctag/design-reviews/issues/618#issuecomment-806017154>
did highlight that ORB has no impact on behavior and
functionality (assuming HTTP responses use correct `Content-Type`).

For now, I assume that no additional reviews are needed given that

   - No new API surface
   - No behavior change if HTTP responses use correct `Content-Type`.
   - If an incorrect or inaccurate `Content-Type` is used, then ORB v0.1
   introduces minimal change in behavior compared to CORB (blocking additional
   0.01% of HTTP responses;  see the original email for more details and
   examples).

FWIW, since ORB does cause known changes in 0.01% of HTTP responses, we
thought that an official intent-to-ship route is the safest path going
forward.  OTOH, feel free to guide us toward another process if needed -
e.g. maybe an argument can be made to use the "web developer facing change
to existing code
<https://www.chromium.org/blink/launching-features/#web-developer-facing-change-to-existing-code>"
path instead.

Thanks,

-Lukasz


> On 5/5/22 2:02 PM, Łukasz Anforowicz wrote:
>
> Hello!
>
> The goal of this email is to:
>
>    - Seek LGTMs from Blink API owners for the intent to ship ORB v0.1
>    <https://chromestatus.com/feature/4933785622675456> in Chrome M103.  A
>    formal, semi-automatically-generated intent-to-ship data can be found at
>    the end of this email.
>    - Provide an overview of ORB, motivations for shipping it, and its
>    (low) risks.
>    - Highlight scenarios where web developers might want to double-check
>    the MIME types used by their HTTP servers when serving certain resources.
>
>
> *Overview of ORB*
>
> Opaque Response Blocking (ORB) is a replacement for Cross-Origin Read
> Blocking (CORB).  CORB and ORB are both heuristics that attempt to prevent
> cross-origin disclosure of “no-cors” subresources.  An example attack that
> ORB and CORB prevent is where an attacker’s frame contains <img src=”
> https://victim.example.com/secret.json”> which an attacker reads using
> either Spectre or a compromised renderer.  Site Isolation depends on either
> CORB or ORB to keep cross-site secrets out of the renderer process.  For
> more information please see
> https://www.chromium.org/Home/chromium-security/corb-for-developers.
>
> We are considering replacing CORB with ORB because ORB is more secure:
> CORB fails open (it only blocks what its heuristics recognize as blockable)
> and ORB fails closed (it only allows what its heuristics recognize as
> scripts, stylesheets, images, audio, or video).  Improved security
> properties mean that ORB is more likely to be a broadly adopted standard.
>
> ORB spec is being iterated on at https://github.com/annevk/orb.  ORB has
> not been shipped by any browser today (Firefox tracks their efforts in
> 1532642 <https://bugzilla.mozilla.org/show_bug.cgi?id=1532642#c19> and
> plans to resume the work soon).  CORB is partially covered by
> https://fetch.spec.whatwg.org/#corb (HTML, JSON, JS-parser-breaker, nor
> XML sniffing is not covered).  Chromium is the only browser that implements
> CORB today.
>
>
>
> *Motivation for ORB v0.1 *
>
> At this point, there remain open questions about the feasibility of the JS
> detection heuristics required by full ORB.  Still, the incremental benefits
> of adopting even a subset of ORB are definitely desirable.  We call this
> subset ORBv0.1 - the main difference from full ORB is replacing JS
> sniffing/parsing with CORB’s more limited HTML, JSON, and XML sniffers. In
> other words, ORBv0.1 still fails open and only blocks a subset of known
> response types, but it blocks more than CORB.
>
> *ORBv0.1 offers incremental security benefits compared to CORB*.  ORBv0.1
> blocks the following kinds of HTTP responses that CORB wouldn’t block:
>
>    - CORB blocks responses that contain HTML and XML only if they are
>    labeled with HTML mime type
>    <https://mimesniff.spec.whatwg.org/#html-mime-type> or XML mime type
>    <https://mimesniff.spec.whatwg.org/#xml-mime-type>.  ORBv0.1 blocks
>    responses that contain HTML and XML even if they are mislabeled (e.g. HTML
>    served as application/octet-stream, or XML served as text/html).
>    - CORB blocks range request responses only if they are labeled with
>    HTML, JSON, or XML mime type.  ORBv0.1 blocks all range request responses,
>    unless they come from a URL that ORBv0.1 has earlier recognized (via
>    sniffing, or via mime type) as audio or video.
>
> Note that both CORB and ORBv0.1 would block responses that contain JSON or
> JS-parser-breakers.  OTOH, this CORB protection can be bypassed if the
> victim’s server allows range requests (which are not blocked by CORB,
> except for HTML, JSON, or XML mime type). ORBv0.1 closes that gap.
>
> ORBv0.1 is also an incremental step toward full ORB compliance.  At the
> very least ORBv0.1 makes it easier to experiment with JS detection
> heuristics (including full Javascript parsing if necessary and acceptable
> from performance perspective).
>
>
> *Shipping ORBv0.1 in Chrome 103*
>
> Implementing ORB in Chromium is tracked in https://crbug.com/1178928 - *we
> plan to ship ORBv0.1 in Chrome M103*. Chrome’s implementation of CORB and
> ORBv0.1 covers all platforms except iOS.  This also includes Android
> WebView.  Chrome’s implementation is hosted in the NetworkService.
>
>
> *Backcompatibility risks of ORBv0.1*
>
> *The backcompatibility risk of shipping ORB seems low: less than 0.01% of
> all HTTP requests are at risk* because they are blocked by ORB and not by
> CORB.  Note that this is an *upper* bound for the amount of possible
> breakage:
>
>    - This number includes responses with payload that is *not* valid in
>    no-cors contexts.  For example - <img src=”
>    https://example.com/document.html”> will not work regardless of
>    whether ORB blocks such a response or not.
>    - This number is based on older telemetry results.  Recent CLs should
>    further reduce the risk:
>       - https://crrev.com/c/3554875: Always allowing all audio/* and
>       video/* reduces the risk of breaking range responses.
>       - https://crrev.com/c/3599601: Always allowing “text/css” removes
>       the risk of breaking html/css polyglot documents (which used to be 
> blocked
>       by ORBv0.1 when they sniffed as HTML or has JS-parser-breakers)
>
> Still, there are certain scenarios that have a higher risk profile -
> ORBv0.1 risks breaking the following scenarios:
>
>    - HTTP 200 responses for audio / image / video subresources that 1)
>    are not labeled as audio/*, image/*, nor video/* mime type, and that 2) do
>    *not* sniff as media according to the audio/video
>    
> <https://mimesniff.spec.whatwg.org/#audio-or-video-type-pattern-matching-algorithm>
>    or image sniffing
>    <https://mimesniff.spec.whatwg.org/#image-type-pattern-matching-algorithm>
>    algorithms used by ORB, and that 3) *do* sniff as HTML, JSON, or XML.
>       - *Hypothetical* example: DASH manifests (a format that sniffs as
>       XML), labeled as application/octet-stream or text/html.  These are only
>       *hypothetical* (i.e. there is no real backcompatibility risk), because
>       there is no native DASH support in Chrome - polyfills use CORS-mediated
>       `fetch(...)` and are therefore unaffected by ORB.
>    - HTTP 206 range request responses for audio / video subresources that
>    are not labeled as audio/*, image/*, nor video/* mime type, and that have
>    not been earlier (e.g. when processing a HTTP 200 response) sniffed as
>    media according to the audio/video sniffing
>    
> <https://mimesniff.spec.whatwg.org/#audio-or-video-type-pattern-matching-algorithm>
>    algorithms used by ORB.
>       - Example: hypothetical future/under-development/new video format
>       served as application/octet-stream or text/html and requested via range
>       requests.
>       - Example: format covered by the sniffing spec
>       <https://mimesniff.spec.whatwg.org/#matching-a-mime-type-pattern>,
>       but not implemented by Chromium sniffers (we have decided against 
> updating
>       Chromium code when discussing https://crrev.com/c/3352765).  For
>       example, AIFF or AVI video served as application/octet-stream or 
> text/html
>       and requested via range requests.
>       - Example: mp4 video that is labeled as application/octet-stream
>       and requires range requests that start reading the media resources from 
> its
>       middle bytes (giving ORB no chances to sniff the initial bytes as 
> video).
>       - Telemetry shows that out of all responses blocked by ORB and not
>       by CORB (so out of 0.01% of all HTTP responses) between 4.1% (on 
> Windows)
>       and 39.6% (on Android) have been blocked because of an unexpected range
>       response (this data was gathered before the fix in
>       https://crrev.com/c/3554875).
>
> In the scenarios outlined above, web developers should double-check that
> the HTTP responses use a Content-Type that indicates multimedia content -
> e.g. audio/*, video/*, application/dash+xml, application/ogg, text/vtt, etc.
>
> For more details, please see the (Google-internal) “ORB telemetry results
> - Mar 2022
> <https://docs.google.com/document/d/1MbYQbL4WQyZdCQcZcKyzxHA0UxbHTC0O4bQXFgm8o6A/edit?usp=sharing>”
> document.
>
>
> *Managing the backcompatibility risk*
>
> Given low risk of shipping ORB v0.1 (less than 0.01% of all HTTP
> responses), we have considered but ultimately decided against taking the
> following actions:
>
>    - We don’t plan to implement support for a reverse Origin Trial (that
>    could be used by ORB-affected websites in an emergency, to opt-out of
>    ORB).  We believe that a base::Feature-based kill-switch is a sufficient
>    precaution.
>    - We don’t plan to emit additional notifications about responses
>    blocked by ORB.  We believe that the existing CORB warning in DevTools is
>    sufficient:
>
> Cross-Origin Read Blocking (CORB) blocked cross-origin response
> https://www.example.com/example.html with MIME type text/html. See
> https://www.chromestatus.com/feature/5629709824032768 for more details.
>
>
>    - For now we plan to keep referring to the feature as CORB (e.g. in
>    DevTools warnings), because
>       - ORB builds on top of CORB (e.g. wrt blocking behavior where a
>       blocked response has its HTTP response headers stripped and is injected
>       with an empty response body).
>       - Plenty of CORB documentation exists and applies equally well to
>       ORB (e.g. rationale and description of security benefits provided at
>       https://www.chromium.org/Home/chromium-security/corb-for-developers
>       ).
>    - We don’t gather additional information about affected HTTP resources:
>       - We want to avoid gathering URLs of HTTP resources, since they may
>       be PII (Personally Identifiable Information).  We also note that
>       Rappor
>       
> <https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/42852.pdf>
>       is deprecated and UKM only allows logging of certain, limited URLs (e.g.
>       URLs of top-level pages, and of installed Chrome Extensions).
>       - Non-PII information gathered via temporary crash keys
>       <https://chromium-review.googlesource.com/c/chromium/src/+/3465612>
>       have been sufficient for identifying and fixing some incorrect behavior
>       (see https://crrev.com/c/3554875: which fixed handling of range
>       requests).
>
> We did or plan to take the following actions to manage the risk of
> shipping ORB:
>
>    - We tweaked CORB's https://chromestatus.com/feature/5629709824032768 entry
>    to call out what is changing in Chrome 103.
>    - We plan to respond to bug reports (if any) by
>    - Identifying whether the blocked response affected page behavior, or
>       only changed what type of error occurred (which is the typical outcome 
> for
>       bugs filed about CORB).
>       - Recommending to use a more specific MIME type in the Content-Type
>       HTTP response header.
>       - Consider deploying a base::Feature-based kill switch if required
>       (possibly only on some platforms; we’ve determined that deploying the
>       kill-switch on Android-WebView-only is feasible).
>
>
> *Implementation risks*
>
> PerFactoryState will be stored per URLLoaderFactory and will remember URLs
> of cross-origin audio/video responses that didn’t have audio/* nor video/*
> mime type, but that sniffed as audio/video.  We think that the additional
> memory pressure should be acceptable.  We will monitor existing memory
> metrics during launch.
>
>
> *Plans beyond ORB v0.1*
>
> Shipping ORB v0.1 will allow the following tasks to move forward:
>
>    - Deleting code associated with CORB.
>    - Removing remaining differences between ORB spec and Chrome’s ORB
>    implementation.  For more details please see the “ORB v0.1 vs full ORB
>    differences
>    
> <https://docs.google.com/document/d/1qUbE2ySi6av3arUEw5DNdFJIKKBbWGRGsXz_ew3S7HQ/edit#heading=h.mptmm5bpjtdn>”
>    section in the “Gradual CORB -> ORB transition
>    
> <https://docs.google.com/document/d/1qUbE2ySi6av3arUEw5DNdFJIKKBbWGRGsXz_ew3S7HQ/edit?usp=sharing>”
>    document.  Lack of Javascript sniffing is one major difference, but there
>    are also minor other differences (e.g. blocking by injecting an empty
>    response body VS a network error).
>
>
> Thanks,
>
> Lukasz Anforowicz (on behalf of the Chrome Security Architecture team)
>
> PS. Below is the more formal,
> automatically-generated(-and-then-slightly-edited) intent-to-ship data
> based on https://chromestatus.com/feature/4933785622675456:
>
> *Contact emails:*
> luka...@chromium.org, cr...@chromium.org, vogelh...@chromium.org
>
> *Specification:*
> https://github.com/annevk/orb
>
> *Summary:*
> Opaque Response Blocking (ORB) is a replacement for Cross-Origin Read
> Blocking (CORB - https://chromestatus.com/feature/5629709824032768). CORB
> and ORB are both heuristics that attempt to prevent cross-origin disclosure
> of “no-cors” subresources.  This entry tracks v0.1 of ORB - Chrome's first
> step toward full ORB implementation.
>
> For interop web authors should check Content-Type headers of their
> resources and indicate multimedia content when needed (e.g. audio/*,
> application/dash+xml, etc).
>
> *Blink component:*
> Internals>Sandbox>SiteIsolation
>
> *TAG review status:*
> Not applicable
>
> *Interoperability and Compatibility Risk:*
> The backcompatibility risk of shipping ORB v0.1 seems low: less than 0.01%
> of all HTTP requests are at risk because they are blocked by ORB and not by
> CORB.
>
> For more information, see the draft of the "Backcompatibility risks of
> ORBv0.1" and the "Managing the backcompatibility risk" sections at
> https://docs.google.com/document/d/1dO1NP6xchEiCN990zMczXcSvgcRzSnWBtAgflVBXoTg/edit?usp=sharing
>
> Gecko: In development (
> https://bugzilla.mozilla.org/show_bug.cgi?id=1532642).
>
> WebKit: No signal
>
> Web developers: No signals
>
> Other signals:
>
> *Ergonomics:*
> N/A (no public API)
>
> *Activation:*
> N/A
>
> *Security:*
> N/A
>
> *WebView application risks:*
> No known WebView-specific risks
>
> *Debuggability:*
> No changes compared to CORB - mostly relying on a DevTools console warning
> that gets emitted when CORB/ORB block a HTTP response.
>
> *Is this feature fully tested by web-platform-tests?*
> Not really…
>
> CORB and ORBv0.1 do have coverage via wpt/fetch/corb but:
>
>
>    1. CORB and ORBv0.1 are Chrome-only technologies (the latter is a step
>    toward adopting the full, cross-browser ORB standard).  And therefore right
>    now wpt/fetch/corb are Chrome-specific tests.
>    2. Covering full ORB will require significant refactoring of the tests
>    - among other things we might need to change whether a blocked response is
>    verified by checking for A) an empty response body VS B) a network/fetch
>    error.
>
> *Flag name:*
> --enable-features=OpaqueResponseBlockingV01
>
> *Requires code in //chrome?:*
> False
>
> *Tracking bug:*
> https://crbug.com/1178928
>
> *Measurement:*
> Google-internal "ORB telemetry results - Mar 2022" doc can be found at
> https://docs.google.com/document/d/1MbYQbL4WQyZdCQcZcKyzxHA0UxbHTC0O4bQXFgm8o6A/edit?usp=sharing
>
> *Estimated milestones:*
> Shipping on desktop 103
> Shipping on Android 103
>
> --
> You received this message because you are subscribed to the Google Groups
> "blink-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to blink-dev+unsubscr...@chromium.org.
> To view this discussion on the web visit
> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAA_NCUH%3Df4KJK7F1rZ9PugP4O9kPQ%2BSzot0VjD6hyxZ%3Dqn_Bjw%40mail.gmail.com
> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAA_NCUH%3Df4KJK7F1rZ9PugP4O9kPQ%2BSzot0VjD6hyxZ%3Dqn_Bjw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAA_NCUGAOpNbCx-gZsttKo1cSGAoHugVJJBEjGrqA9AjQ1KtOw%40mail.gmail.com.

Reply via email to