FWIW, I'm planning to discuss
<https://github.com/w3c/webappsec/issues/668#issuecomment-2709995028> a
syntax change at next week's WebAppSec meeting, that can help us avoid
these compat issues.

On Tue, Feb 25, 2025 at 7:54 PM Yoav Weiss (@Shopify) <
yoavwe...@chromium.org> wrote:

>
>
> On Tue, Feb 25, 2025 at 6:08 PM Mike Taylor <miketa...@chromium.org>
> wrote:
>
>>
>> On 2/24/25 4:24 PM, Yoav Weiss (@Shopify) wrote:
>>
>>
>>
>> On Mon, Feb 24, 2025 at 7:18 PM Mike Taylor <miketa...@chromium.org>
>> wrote:
>>
>>> On 2/21/25 8:33 AM, Yoav Weiss (@Shopify) wrote:
>>>
>>>
>>> On Thursday, February 20, 2025 at 1:56:59 PM UTC+1 Yoav Weiss wrote:
>>>
>>>
>>> On Thursday, February 20, 2025 at 11:47:00 AM UTC+1 Yoav Weiss wrote:
>>>
>>> Contact emailsyoavwe...@chromium.org
>>>
>>> Explainerhttps://github.com/w3c/webappsec-subresource-inte
>>> grity/pull/129#:~:text=for%20some%20assets.-,require%2Dsr
>>> i%2Dfor%20CSP%20directive,-Subresource%2DIntegrity%20
>>>
>>> Specificationhttps://github.com/w3c/webappsec-subresource-
>>> integrity/pull/129
>>>
>>>
>>>
>>> The feature and PR were discussed
>>> <https://github.com/w3c/webappsec/blob/main/meetings/2025/2025-02-19-minutes.md#reviving-require-sri-for>
>>> at the WebAppSec WG call.
>>>
>>> No objection beyond questions on whether we'd need to expand this to
>>> cover stylesheets as well. We'd be able to do that in the future (as a
>>> separate intent) if needed.
>>>
>>> Summary
>>>
>>> The `require-sri-for` directive gives developers the ability to assert
>>> that every resource of a given type needs to be integrity checked. If a
>>> resource of that type is attempted to be loaded without integrity metadata,
>>> that attempt will fail and trigger a CSP violation report. This intent
>>> covers the "script" value of this directive.
>>>
>>>
>>> Blink componentBlink>SecurityFeature>ContentSecurityPolicy
>>> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ESecurityFeature%3EContentSecurityPolicy%22>
>>>
>>> TAG reviewhttps://github.com/w3ctag/design-reviews/issues/1048
>>>
>>> TAG review statusPending - No response just yet
>>>
>>>
>>>
>>> Risks
>>>
>>>
>>> Interoperability and Compatibility
>>>
>>> On the compatibility front:
>>>
>>> This directive was already implemented in the past, and there are some 
>>> developer
>>> docs
>>> <https://udn.realityripple.com/docs/Web/HTTP/Headers/Content-Security-Policy/require-sri-for>
>>> that still describe it. The current PR and implementation did not diverge
>>> from the past implementation.
>>>
>>>
>>> If developers deployed the feature in the past and are now relying on it 
>>> *not
>>> really working*, that may result in surprising breakage. The
>>> HTTPArchive shows *0.0011% of page responses* (178 out of 15760519)
>>> have an existing `require-sri-for` directive. That's an upper bound - only
>>> those that enforce scripts, and have no integrity attributes on some
>>> scripts may get broken.
>>>
>>>
>>> Doing some more HA digging I found that it's 153 sites, which is not
>>> significantly different.
>>> I downloaded their URLs
>>> <https://docs.google.com/spreadsheets/d/1NlFHLytc8lQcdP5FXXDltKEPQVE0e8oyjw9k1S-9KPI/edit?usp=sharing>
>>>  and
>>> started going to these sites with the feature enabled.
>>> Of those 153, 22 had any blocked assets, 9 had broken functionality or
>>> layout and 1 had missing ads.
>>> Non-visiblity broken but blocked sites mostly had their analytics
>>> blocked.
>>>
>>> Extrapolating that data brings us to 0.000158% for any blocked assets,
>>> and 0.000065% for broken functionality.
>>>
>>> I'm planning to reach out to the broken sites and make them aware of
>>> this change. Many of them seem to be coming from a single provider (similar
>>> site and breakage).
>>>
>>>
>>> I also found ~3500 sites that have the `require-sri-for` string in their
>>> response bodies (and hence may have it applied).
>>> I put together a script that so far scanned ~1800 of them and found no
>>> blocked assets. So, it seems like the risk is very low on that front.
>>>
>>> Thanks, I appreciate you digging in to understand the possible risks. My
>>> understanding of the compat risk goes something like (please let me know if
>>> I'm missing something):
>>>
>>> 1. This feature never really shipped, but was implemented behind a flag.
>>>
>>> 2. Early adopter developers (or menu framework authors?) added
>>> require-sri-for for some scripts that they wanted to lock down
>>>
>> Tiny correction: they added it to the document's CSP, not specific
>> scripts.
>>
>>> (to prevent 3rd-party attackers from modifying them, etc).
>>>
>>> 3. Now, you actually ship the feature.
>>>
>>> That means the risks are:
>>>
>>> a) Some CDN was compromised at some point, and now some sketchy scripts
>>> will fail to load. Seems like that's security positive, even if it
>>> surprises users or developers.
>>>
>>> b) Perhaps more likely, a page was redesigned and they updated their
>>> analytics provider but didn't remember to add hashes. Now some things don't
>>> work.
>>>
>> I suspect it's
>> c) they added the header but never actually tested with the feature
>> enabled, as it never shipped.
>>
>> It seems like they added the CSP header, but never added an "integrity"
>> attribute to many/most of their scripts.
>>
>>
>>> From your sheet (which is great, thanks), it seems like largest impact
>>> is busted menus. Is this a single library? Or common pattern?
>>>
>>> It seems like a common provider. 6 out of the 9 sites with issues are
>> Canadian health/edu related sites.
>>
>> Breaking health/edu-releated sites is not good...
>>
> Indeed, although I'm not sure how load-bearing they are..
>
>> When broken, is it cosmetic, or are the links in the menu still
>> accessible? (I see you're gathering contact info - let me know if you need
>> help with that.)
>>
> It seems like the desktop view is functional, but the mobile view's
> hamburger menu is not working (at least in some cases).
>
>> Assuming we can sort out the menu breakage somehow, I think for the rest
>> - the best we can do is roll it out and be ready to killswitch if needed.
>>
>>
>>>
>>>
>>>
>>>
>>> *Gecko*: No signal (https://github.com/mozilla/st
>>> andards-positions/issues/1173)
>>>
>>> *WebKit*: No signal (https://github.com/WebKit/sta
>>> ndards-positions/issues/458)
>>>
>>> *Web developers*: Shopify is interested in this. I suspect PCIv4
>>> <https://docs.google.com/document/d/1RcUpbpWPxXTyW0Qwczs9GCTLPD3-LcbbhL4ooBUevTM/edit?tab=t.0>
>>>  would
>>> make some developers interested in making sure their documents' scripts
>>> have complete integrity checks.
>>>
>>> *Other signals*:
>>>
>>> WebView application risks
>>>
>>> Does this intent deprecate or change behavior of existing APIs, such
>>> that it has potentially high risk for Android WebView-based applications?
>>>
>>> None
>>>
>>>
>>> Debuggability
>>>
>>> None
>>>
>>>
>>> Will this feature be supported on all six Blink platforms (Windows, Mac,
>>> Linux, ChromeOS, Android, and Android WebView)?Yes
>>>
>>> Is this feature fully tested by web-platform-tests
>>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>
>>> ?Yes
>>>
>>> https://wpt.fyi/results/content-security-policy/tentative/
>>> require-sri-for?label=experimental&label=master&aligned
>>> <https://chromium-review.googlesource.com/c/chromium/src/+/5877633>
>>>
>>>
>>> Flag name on about://flagsNone
>>>
>>> Finch feature nameCSPRequireSRIFor
>>>
>>> Requires code in //chrome?False
>>>
>>> Estimated milestonesShipping on desktop135DevTrial on desktop134Shipping
>>> on Android135DevTrial on Android134Shipping on WebView135
>>>
>>> Anticipated spec changes
>>>
>>> Open questions about a feature may be a source of future web compat or
>>> interop issues. Please list open issues (e.g. links to known github issues
>>> in the project for the feature specification) whose resolution may
>>> introduce web compat/interop risk (e.g., changing to naming or structure of
>>> the API in a non-backward-compatible way).
>>>
>>>
>>> None
>>>
>>> Link to entry on the Chrome Platform Statushttps://chromestatus.com/
>>> feature/5090023365672960?gate=5186570942152704
>>>
>>> Links to previous Intent discussionsIntent to Prototype: https://groups.
>>> google.com/a/chromium.org/d/msgid/blink-dev/CAOmohSJUygAmobR9dRkDr%
>>> 3DBWQ1h5hv2Lj3WUFN31QZF360A47A%40mail.gmail.com
>>>
>>>
>>>
>>>
>>> This intent message was generated by Chrome Platform Status
>>> <https://chromestatus.com/>.
>>>
>>> --
>>> 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 visit
>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/8d3107ca-61cc-47f6-badd-8bc6a1f30145n%40chromium.org
>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/8d3107ca-61cc-47f6-badd-8bc6a1f30145n%40chromium.org?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 visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOmohS%2BS-%2Bx1VAmt%3Dg31Xz0BRcZ-nFhsJowkSshzA5H7ee2TiQ%40mail.gmail.com.

Reply via email to