One addition please: work with me and the enterprise team to also add a paragraph to the enterprise release notes before the deprecation warning is switched to on-by-default
On Fri, Apr 21, 2023 at 3:13 AM Yoav Weiss <yoavwe...@chromium.org> wrote: > LGTM2 for the above plan. Good luck!! > > On Thu, Apr 20, 2023 at 11:37 PM Rick Byers <rby...@chromium.org> wrote: > >> Jun and I have been talking about this offline and I think we've got a >> reasonable plan to attempt to proceed with this breaking change: >> >> - Add Enterprise policy knob >> <https://www.chromium.org/developers/enterprise-changes/> >> - Disable in WebView by default (or add targetSdk quirk) - in >> discussion with WebView team >> - Publish a blog post explaining the change and how to adapt to it, >> linked from chromestatus entry >> - Add deprecation warning (console + deprecation report) linking to >> chromestatus entry >> - Try flipping the flag on with Finch in canary and dev builds, maybe >> beta 50%, watch for reports of bugs and engage on any to see if they're >> similarly easy to get sites fixed >> - Once 3 milestones have passed with the deprecation warning and >> there's aren't major known issues, flip the flag on by default (with >> killswitch in place) >> - As the change makes its way to stable, keep an eye on any reports. >> Be prepared to hit the killswitch and iterate if there is significant >> breakage that can't be immediately addressed. >> >> With this plan, I'm LGTM1 to give this a shot. >> >> On Tue, Jan 24, 2023 at 10:22 AM Rick Byers <rby...@chromium.org> wrote: >> >>> >>> On Mon, Jan 23, 2023 at 3:00 PM Jun Kokatsu <jkoka...@google.com> wrote: >>> >>>> Hi All, >>>> >>>> I wanted to provide some updates on outreach I've done last week. >>>> >>>> I manually went through a list of sample sites in the use counter >>>> <https://chromestatus.com/metrics/feature/timeline/popularity/4356>, >>>> and contacted ~10 sites which will be impacted. Among those sites, 3 sites >>>> responded so far. >>>> >>>> 1. onsetapp.com has successfully migrated away from data: URLs in >>>> SVGUseElement. >>>> - Reason for the usage: >>>> >>>> >>>> *"We used them to import elements from SVG sprites, basically an SVG >>>> file containing every icons loaded once at page load as an attempt to >>>> improve performance of the app."* >>>> 2. jobs.nzz.ch are testing the fix in the development pipeline, and >>>> hope to migrate away from data: URLs in SVGUseElement soon. >>>> - Reason for the usage is unsure as it was done a long time ago. >>>> 3. We've reached out to Salesforce contact (thanks Rick!) for >>>> appexchange.salesforce.com. They are trying to find a responsible >>>> team for that subdomain to understand why it was used, and if it can be >>>> migrated away. >>>> >>>> Thanks Jun, that's some good anecdotal evidence that adapting to this >>> breaking change likely isn't too hard for most folks. Despite it being only >>> a couple anecdotes, this increases my confidence. >>> >>> >>>> I've also identified faucet.okp4.network as a false positive, because >>>> they use svgxuse <https://github.com/Keyamoon/svgxuse> as a fallback >>>> mechanism <https://github.com/okp4/ui/pull/433>. >>>> >>> >>> Fascinating. >>> >>> I will wait for sometime so that UKM will reach Beta or Stable, to >>>> further identify impacted origins with high volume of access. >>>> >>> >>> Yeah I think this is the most important next step. With luck we'll find >>> that there's not too much of a long tail and we can succeed in getting a >>> significant drop in usage through outreach. >>> >>> BTW, thank you Daniel for creating a page >>>> <https://dbratell.github.io/svg-use-icons/> with easy to read >>>> alternatives! This was very helpful in the outreach process! >>>> >>> >>> Thanks Daniel! If we proceed with deprecation then perhaps this page >>> should form the basis of a chromium.org blog post on the topic that we >>> can link to from the chromestatus entry that will be referenced in the >>> deprecation warning message. >>> >>> >>>> >>>> Thanks, >>>> >>>> Jun >>>> >>>> >>>> On Thu, Jan 19, 2023 at 3:23 PM Jun Kokatsu <jkoka...@google.com> >>>> wrote: >>>> >>>>> On Thu, Jan 19, 2023 at 2:14 PM Rick Byers <rby...@chromium.org> >>>>> wrote: >>>>> >>>>>> On Thu, Jan 19, 2023 at 1:17 PM Jun Kokatsu <jkoka...@google.com> >>>>>> wrote: >>>>>> >>>>>>> On Thu, Jan 19, 2023 at 9:29 AM Rick Byers <rby...@chromium.org> >>>>>>> wrote: >>>>>>> >>>>>>>> Thanks Daniel. I also looked at this page >>>>>>>> <https://appexchange.salesforce.com/#:~:text=Learn%20More-,Sponsored%20Solutions,-Show%20More> >>>>>>>> which >>>>>>>> inlines the same 422 kB long sprite sheet 5 separate times, only to >>>>>>>> select >>>>>>>> a tiny 422 BYTE SVG out of it each time! In that case, simply inlining >>>>>>>> the >>>>>>>> desired SVG would save both several MB of network and a lot of >>>>>>>> parse/decode >>>>>>>> time. Perhaps there's an opportunity for a tool at design time which >>>>>>>> unrolls these inlined sprite sheets, like Jun's tool >>>>>>>> <https://data-urls-in-svg-converter.glitch.me/> does? >>>>>>>> >>>>>>>> Rick >>>>>>>> >>>>>>>> On Thu, Jan 19, 2023 at 8:53 AM Daniel Bratell <bratel...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Without saying whether it is appropriate to block data urls, I >>>>>>>>> would like to say that doing what the site is doing with icons in >>>>>>>>> data urls >>>>>>>>> is far from the best way to do it. Since there are better ways to >>>>>>>>> accomplish the same output, it's not in itself a use pattern that >>>>>>>>> must be >>>>>>>>> preserved. It is better to either have the icons in a separate file, >>>>>>>>> or if >>>>>>>>> that is unsuitable, have them inline in an invisible svg. I put a >>>>>>>>> quick >>>>>>>>> demo at https://dbratell.github.io/svg-use-icons/ but in short >>>>>>>>> you could have >>>>>>>>> >>>>>>>>> <svg style="display:none"><defs><symbol >>>>>>>>> id="icon1">...</symbol><symbol id="icon2">...</symbol></defs></svg> >>>>>>>>> >>>>>>>>> And then refer to the icons in it with <svg><use >>>>>>>>> xlink:href="#icon1"></svg> or <svg><use xlink:href="#icon2"></svg> >>>>>>>>> That would have cut tens of KB from the cz site source. I checked >>>>>>>>> with fs and thanks to optimizations Blink would not have created a >>>>>>>>> separate >>>>>>>>> svg document for each icon but that was also a risk. >>>>>>>>> >>>>>>>>> (Also curious to the answer to Alex' question) >>>>>>>>> >>>>>>>>> /Daniel >>>>>>>>> >>>>>>>>> On 2023-01-18 17:50, Alex Russell wrote: >>>>>>>>> >>>>>>>>> Per today's API OWNERs meeting, a dumb question: is the XSS risk >>>>>>>>> here largely down to script execution triggered by this pattern? Or >>>>>>>>> non-script content in the inline'd SVG? >>>>>>>>> >>>>>>>>> Sorry, I just noticed that I only replied to Alex yesterday 🙂 >>>>>>> The XSS risk here is mostly about script execution triggered by this >>>>>>> pattern. This includes (but not limited to) inline event handlers and >>>>>>> links >>>>>>> with Javascript URLs. >>>>>>> >>>>>> >>>>>> So if we find it's too breaking to disallow this pattern completely, >>>>>> could we instead just disable script execution from within the context of >>>>>> documents resulting from data: URLs in SVGUseAttributes? >>>>>> >>>>> >>>>> Is that solution for Trusted Types or XSS through SVGUseElement in >>>>> general? >>>>> >>>> >>> I was thinking for SVGUseElement in general. >>> >>> >>>> If it is for Trusted Types, it does solve the issue in Chromium for >>>>> short term, but we want other rendering engines to implement Trusted Types >>>>> as well. Does that mean we spec this in Trusted Types that inline event >>>>> handlers from SVGUseElement will be disallowed when enforcing Trusted >>>>> Types? >>>>> One thing I'm not sure about this approach is that each rendering >>>>> engine has differences in supported features inside SVGUseElement. >>>>> >>>> >>> Oh yeah I certainly wouldn't suggest we do anything chromium-specific >>> here. Just that if we decide the web compat challenge of deprecating all >>> data urls is too high, then we could probably get other vendors on board >>> with something more modest and get that fully spec'd and tested. >>> >>> For example, if the <foreignObject> >>>>> <https://developer.mozilla.org/en-US/docs/Web/SVG/Element/foreignObject> >>>>> is supported, then iframes inside foreignObject can have srcdoc, and it >>>>> can >>>>> contain script tags which are considered "stored" XSS (because the payload >>>>> never goes through DOM APIs), and therefore Trusted Types could be >>>>> bypassed >>>>> (i.e. script tags are not inline event handlers). But maybe the current >>>>> script element restriction >>>>> <https://www.w3.org/TR/SVG2/struct.html#UseShadowTree:~:text=Within%20a%20use%2Delement%20shadow%20tree%2C%20%E2%80%98script%E2%80%99%20elements%20are%20inert%20(do%20not%20execute)%3B> >>>>> on the use element is enough to apply in child frames too? >>>>> >>>>> If it is for XSS, then as I mentioned, SVG link >>>>> <https://developer.mozilla.org/en-US/docs/Web/SVG/Element/a> with >>>>> Javascript: URL can still trigger XSS (because the script execution is a >>>>> result of navigation, which can happen in the top frame or iframes by >>>>> target attribute). >>>>> >>>>> Long story short, we did consider disabling scripts, but people's >>>>> consensus (1 >>>>> <https://github.com/mozilla/standards-positions/issues/718>, 2 >>>>> <https://github.com/WebKit/standards-positions/issues/108>, 3 >>>>> <https://github.com/w3c/trusted-types/issues/357#issuecomment-1049761361> >>>>> , 4 >>>>> <https://bugs.chromium.org/p/chromium/issues/detail?id=1300195#c10>, 5 >>>>> <https://bugs.chromium.org/p/chromium/issues/detail?id=1300195#c11>) >>>>> has been that it's just better to deprecate data: URLs in SVGUseElement. >>>>> >>>> >>> Thanks for those links, I hadn't appreciated how much discussion >>> had gone into the tradeoffs already. I agree that if we can convince >>> ourselves it's not too breaking that this is the best solution. But I see >>> from the discussion that the consensus was based on the assumption that we >>> had already decided the web compat risk was sufficiently low. I'd certainly >>> prefer not to re-open the standards discussion as this solution seems the >>> safest, simplest and most coherent for the platform, but it's good to know >>> what our fallback options are so that we can keep the cost/benefit >>> tradeoffs in mind as we learn more. >>> >>>> Thanks >>>>>>>>> >>>>>>>>> On Tuesday, January 17, 2023 at 10:52:29 PM UTC-8 Jun Kokatsu >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> On Tue, Jan 17, 2023 at 11:36 AM Brandon Heenan < >>>>>>>>>> bhee...@google.com> wrote: >>>>>>>>>> >>>>>>>>>>> Thanks for adding me. Yes, this definitely seems like the >>>>>>>>>>> pattern where we'd want a temporary enterprise policy to re-enable >>>>>>>>>>> support >>>>>>>>>>> for ~3 milestones after we remove support by default. >>>>>>>>>>> go/chrome-enterprise-friendly >>>>>>>>>>> <https://goto.google.com/chrome-enterprise-friendly> gets into >>>>>>>>>>> the details of the why, >>>>>>>>>>> https://source.chromium.org/chromium/chromium/src/+/main:docs/enterprise/add_new_policy.md >>>>>>>>>>> is the step-by-step, and the enterprise team is always happy to >>>>>>>>>>> advise as >>>>>>>>>>> well. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Thank you for the details on enterprise policy! I'll make sure to >>>>>>>>>> follow those steps when I plan to remove the feature by default! >>>>>>>>>> >>>>>>>>>>> On Tue, Jan 17, 2023 at 10:51 AM Rick Byers <rby...@chromium.org> >>>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> On Tue, Jan 17, 2023 at 4:48 AM Yoav Weiss < >>>>>>>>>>>> yoavwe...@chromium.org> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> Would it be possible to turn >>>>>>>>>>>>> <https://source.chromium.org/chromium/chromium/src/+/main:components/page_load_metrics/browser/observers/use_counter/ukm_features.cc;l=30?q=ukm%20usecounter&ss=chromium> >>>>>>>>>>>>> the usecounter into a UKM to get a better view of the number of >>>>>>>>>>>>> impacted >>>>>>>>>>>>> origins, beyond just the homepage? >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Yeah that could be useful. But we've also got some leads >>>>>>>>>>>> already so getting more leads may not be critical until we follow >>>>>>>>>>>> up on the >>>>>>>>>>>> ones we have. Can we find a developer for one of those sites who >>>>>>>>>>>> will talk >>>>>>>>>>>> to us about where that pattern is coming from in their toolchain >>>>>>>>>>>> and how >>>>>>>>>>>> they'd migrate off it? Having the UKM data will also help in >>>>>>>>>>>> selecting the >>>>>>>>>>>> sites that will have the most impact on our users (and hence our >>>>>>>>>>>> UseCounter >>>>>>>>>>>> stats). Maybe we'll get lucky and find that, despite the long >>>>>>>>>>>> tail, 90% of >>>>>>>>>>>> the usage is from just a few sites we can work with. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> Added UKM at https://crrev.com/c/4171733. >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> I wonder if this would be a good candidate for a deprecation >>>>>>>>>>>>> trial + enterprise policy. That would solve this injection vector >>>>>>>>>>>>> for the >>>>>>>>>>>>> broader web, while giving impacted folks some more time to move >>>>>>>>>>>>> away from >>>>>>>>>>>>> this pattern. >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> Good idea. Impacting a large number of small sites is still >>>>>>>>>>>> problematic for a deprecation trial. Just reaching enough to make >>>>>>>>>>>> any >>>>>>>>>>>> change at all is the hard part. Perhaps we can make replacing the >>>>>>>>>>>> usage >>>>>>>>>>>> easier than the overhead of getting an applying an OT token? Still >>>>>>>>>>>> a >>>>>>>>>>>> deprecation trial would probably be useful. Enterprise policy, >>>>>>>>>>>> certainly. +Brandon >>>>>>>>>>>> Heenan <bhee...@google.com> can help advise on that. I'd also >>>>>>>>>>>> advise leaving this enabled for WebView (at least to start), it >>>>>>>>>>>> feels like >>>>>>>>>>>> the sort of chromium rendering quirk we've found Android apps to >>>>>>>>>>>> rely on >>>>>>>>>>>> disproportionately in the past. >>>>>>>>>>>> >>>>>>>>>>>> On Fri, Jan 13, 2023 at 9:11 PM 'Jun Kokatsu' via blink-dev < >>>>>>>>>>>>> blink-dev@chromium.org> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Thank you Rick for the detailed explanation! >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Fri, Jan 13, 2023 at 10:30 AM Rick Byers < >>>>>>>>>>>>>> rby...@chromium.org> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Eliminating this makes sense to me given the security >>>>>>>>>>>>>>> benefit. Thank you for pushing it! But it does seem somewhat >>>>>>>>>>>>>>> risky from a >>>>>>>>>>>>>>> web compat perspective. 0.005% is above our "small but >>>>>>>>>>>>>>> non-trivial risk >>>>>>>>>>>>>>> <https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.mqfkui78vo5z>" >>>>>>>>>>>>>>> rule of thumb. Here's a bit of an analysis according to our >>>>>>>>>>>>>>> other compat >>>>>>>>>>>>>>> principles <http://bit.ly/blink-compat>: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> - Severity of breakage >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> <https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.u5ya6jvru7dl>: >>>>>>>>>>>>>>> lower given this is likely only about some visualis, but this >>>>>>>>>>>>>>> site <https://jobs.nzz.ch/> is a good example of >>>>>>>>>>>>>>> non-trivial UI breakage. This pattern of putting a >>>>>>>>>>>>>>> base64-encoded SVG into >>>>>>>>>>>>>>> an SVG <use> element with nothing else in the <svg> is >>>>>>>>>>>>>>> weird, isn't it? Why >>>>>>>>>>>>>>> would someone do that rather than just put the SVG in >>>>>>>>>>>>>>> directly, or put the >>>>>>>>>>>>>>> data URL into an img tag? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I've looked into that site. And it seems like they are >>>>>>>>>>>>>> reusing a single SVG image (i.e. data: URL SVG image) which >>>>>>>>>>>>>> contains >>>>>>>>>>>>>> several images, and changing which image should be rendered by >>>>>>>>>>>>>> combination >>>>>>>>>>>>>> of symbol >>>>>>>>>>>>>> <https://developer.mozilla.org/en-US/docs/Web/SVG/Element/symbol> >>>>>>>>>>>>>> + >>>>>>>>>>>>>> id (which is only possible in use element, and not in img tag). >>>>>>>>>>>>>> Migration >>>>>>>>>>>>>> can be done by hosting the same image in the same-origin >>>>>>>>>>>>>> endpoint, >>>>>>>>>>>>>> converting it to blob: URL and assigning that to the <use> >>>>>>>>>>>>>> element, or >>>>>>>>>>>>>> inlining each SVG image. >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> Interesting. So could we write a tool which, given the source >>>>>>>>>>>> html, transforms it to simply inline the selected SVG? That would >>>>>>>>>>>> save some >>>>>>>>>>>> bytes too, right? We've found in the past that when we give >>>>>>>>>>>> developers easy >>>>>>>>>>>> tools to trivially adapt their code, then it makes moderate-risk >>>>>>>>>>>> deprecations go quite smoother. I.e. when we get to the point of >>>>>>>>>>>> having a >>>>>>>>>>>> deprecation warning (and report >>>>>>>>>>>> <https://wicg.github.io/deprecation-reporting/>) for the >>>>>>>>>>>> usage, if we can simply say "for most cases we've found you can >>>>>>>>>>>> just run >>>>>>>>>>>> your html through this tool to adapt it automatically", then that >>>>>>>>>>>> would >>>>>>>>>>>> help a LOT in having the comfort to make the breaking change. >>>>>>>>>>>> Someone from >>>>>>>>>>>> the devrel or tooling teams with experience in how developers >>>>>>>>>>>> approach >>>>>>>>>>>> images in practice (eg. +Addy Osmani <ad...@chromium.org>) >>>>>>>>>>>> might be able to advise on a pragmatic and helpful path. >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> I've created a site to convert data: URLs in SVGUseElement to >>>>>>>>>> inline SVG. >>>>>>>>>> https://data-urls-in-svg-converter.glitch.me/ >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>>>>> - I don't suppose there's some creative way to allow >>>>>>>>>>>>>>> this specific odd pattern while still getting the security >>>>>>>>>>>>>>> benefit, is >>>>>>>>>>>>>>> there? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Unfortunately, no. While we could read the href value of >>>>>>>>>>>>>> <use> elements and convert the data: URL to blob: URL, we won't >>>>>>>>>>>>>> know if the >>>>>>>>>>>>>> data: URL was set by the site owner, or a malicious attacker >>>>>>>>>>>>>> (through HTML >>>>>>>>>>>>>> injection). So while we could provide such a library, it does >>>>>>>>>>>>>> not provide >>>>>>>>>>>>>> the security benefit that we are seeking. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> - Unique sites impacted >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> <https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.4k9u8ddizqrq>: >>>>>>>>>>>>>>> Finding a variety of small sites is actually a lot worse >>>>>>>>>>>>>>> than if we had >>>>>>>>>>>>>>> found only a few bigger sites. It means there's probably >>>>>>>>>>>>>>> some common tool >>>>>>>>>>>>>>> or pattern leading different designers/developers to do this >>>>>>>>>>>>>>> and so likely >>>>>>>>>>>>>>> a relatively large number of individuals who would need to >>>>>>>>>>>>>>> be involved in >>>>>>>>>>>>>>> fixing the breakage. Of course our HTTP Archive list of >>>>>>>>>>>>>>> sites is just a >>>>>>>>>>>>>>> subset of who's fully impacted, so if the problem is a >>>>>>>>>>>>>>> long-tail one as it >>>>>>>>>>>>>>> seems, HTTP archive data shows us only the tip of that long >>>>>>>>>>>>>>> tail. >>>>>>>>>>>>>>> - Security >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> <https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.iklh96dxj81w>: >>>>>>>>>>>>>>> it's definitely worth taking some comapt risk to reduce XSS >>>>>>>>>>>>>>> surface area. I >>>>>>>>>>>>>>> don't fully understand the threat model though. Is this >>>>>>>>>>>>>>> mainly a risk for >>>>>>>>>>>>>>> sites who are programmatically putting (potentially >>>>>>>>>>>>>>> attacker-controlled) >>>>>>>>>>>>>>> strings into SVGUseElement hrefs? Or are you more worried >>>>>>>>>>>>>>> about cases where >>>>>>>>>>>>>>> the attacker controls the HTML and can take advantage of >>>>>>>>>>>>>>> this oddity in the >>>>>>>>>>>>>>> platform on any normal site? I'm just trying to gauge the >>>>>>>>>>>>>>> magnitude of the >>>>>>>>>>>>>>> security benefit here to weigh it against the comapt risk, >>>>>>>>>>>>>>> any help is >>>>>>>>>>>>>>> appreciated. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> We are worried about both (i.e. Server-side injection and >>>>>>>>>>>>>> DOM XSS). The fact that this has led to several browser security >>>>>>>>>>>>>> feature >>>>>>>>>>>>>> bypasses (e.g. Sanitizer API and Trusted Types) suggests that >>>>>>>>>>>>>> it's not a >>>>>>>>>>>>>> commonly known XSS sink, and therefore we believe that it's >>>>>>>>>>>>>> common for >>>>>>>>>>>>>> security mechanisms (e.g. sanitizers, linters) to miss this odd >>>>>>>>>>>>>> feature. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> - Ease of adaptation >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> <https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.x5bhg5grhfeo>: >>>>>>>>>>>>>>> seems like it should be easy to use an alternative, at least >>>>>>>>>>>>>>> for these >>>>>>>>>>>>>>> image cases, but I guess it's hard to say without knowing >>>>>>>>>>>>>>> why people are >>>>>>>>>>>>>>> doing this. Is there perhaps some website design tool which >>>>>>>>>>>>>>> is generating >>>>>>>>>>>>>>> this and will need to change? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I think it is easy to migrate by hosting the same image to >>>>>>>>>>>>>> the same-origin endpoint. However, I do understand that it's >>>>>>>>>>>>>> just less work >>>>>>>>>>>>>> to use data: URL than using same-origin image or blob: URL. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> - Interop >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> <https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.4hjbxw7513sw>: >>>>>>>>>>>>>>> The fact that this doesn't work in Safari is a vote in favor >>>>>>>>>>>>>>> of breaking it >>>>>>>>>>>>>>> in chromium to achieve interop. It does work in Firefox >>>>>>>>>>>>>>> though. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> For the interop, it's best to use a same-origin URL or >>>>>>>>>>>>>> blob: URL. And since both Mozilla and Webkit are supportive, I >>>>>>>>>>>>>> believe it's >>>>>>>>>>>>>> positive. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> - Standards conformance >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> <https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.xcsa26ortrmi>: >>>>>>>>>>>>>>> This is allowed by spec today, so breaking it requires some >>>>>>>>>>>>>>> more diligence >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Note that the PR <https://github.com/w3c/svgwg/pull/901> to >>>>>>>>>>>>>> SVG spec got merged. >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> Right, yes, sorry. What I meant was we took the initiative to >>>>>>>>>>>> make a breaking change to long established behavior - IMHO that >>>>>>>>>>>> makes the >>>>>>>>>>>> bar higher than if Chrome had just had a bug in allowing something >>>>>>>>>>>> that was >>>>>>>>>>>> never spec'd or allowed by other browsers. Still I think we can >>>>>>>>>>>> use this >>>>>>>>>>>> positively in our outreach - say something like "the spec has >>>>>>>>>>>> changed to >>>>>>>>>>>> not allow this, all the major browser engines agree that for >>>>>>>>>>>> security >>>>>>>>>>>> reasons it should be disallowed. It already doesn't work in Safari >>>>>>>>>>>> and >>>>>>>>>>>> other WebKit browsers, we want to help you fix your site to work >>>>>>>>>>>> in all >>>>>>>>>>>> browsers". >>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>>> - Enterprise >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> <https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.axcg738lzcs9>: >>>>>>>>>>>>>>> Being broken in Safari is an indication the risk will be >>>>>>>>>>>>>>> higher in >>>>>>>>>>>>>>> enterprise software which is often chromium-only. We may >>>>>>>>>>>>>>> need to go through >>>>>>>>>>>>>>> the enterprise breaking change process >>>>>>>>>>>>>>> <https://www.chromium.org/developers/enterprise-changes/> >>>>>>>>>>>>>>> . >>>>>>>>>>>>>>> - Outreach >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> <https://docs.google.com/document/d/1RC-pBBvsazYfCNNUSkPqAVpSpNJ96U8trhNkfV0v9fk/edit#heading=h.t9ade4ywppcg>: >>>>>>>>>>>>>>> Given the relatively high usage, if we want to proceed with >>>>>>>>>>>>>>> this plan I >>>>>>>>>>>>>>> think this is the main opportunity for mitigations. Can we >>>>>>>>>>>>>>> try contacting >>>>>>>>>>>>>>> some of these sites we've identified to understand why >>>>>>>>>>>>>>> they're using this >>>>>>>>>>>>>>> pattern? Is there a tool generating this pattern which we >>>>>>>>>>>>>>> can get updated >>>>>>>>>>>>>>> before we make the change? I think we'd need a blog post >>>>>>>>>>>>>>> capturing what >>>>>>>>>>>>>>> we've learned from talking with a few customers who have >>>>>>>>>>>>>>> done this and how >>>>>>>>>>>>>>> they fixed it for their UI design flow. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Sorry it's not looking to be an easy decision, but I hope >>>>>>>>>>>>>>> this gives you some ideas for how we might be able to reduce >>>>>>>>>>>>>>> the risk to a >>>>>>>>>>>>>>> point that we could proceed. WDYT? >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> Yes, it sounds good to me! I will check what has to be done >>>>>>>>>>>>>> and do those step by step 🙂 >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> Ok, good luck! Sorry this isn't as straightforward as a clear >>>>>>>>>>>> recipe. But if we can get a couple developers telling us they >>>>>>>>>>>> were easily >>>>>>>>>>>> able to fix their issue by using a tool or straightforward >>>>>>>>>>>> instructions we >>>>>>>>>>>> can point other to, and we see the UseCounter drop significantly >>>>>>>>>>>> (say by >>>>>>>>>>>> half or so) without major new red flags, then I'd personally be OK >>>>>>>>>>>> approving a removal attempt. Of course it's common to learn during >>>>>>>>>>>> beta >>>>>>>>>>>> (or, worst case, upon stable release) that the compat issue is >>>>>>>>>>>> worse than >>>>>>>>>>>> we thought and so the change needs to be reverted (or flagged off >>>>>>>>>>>> with >>>>>>>>>>>> finch) in a hurry. But I think we've learned a lot over the years >>>>>>>>>>>> about how >>>>>>>>>>>> to predict and avoid that failure mode. Let me know if I can do >>>>>>>>>>>> anything >>>>>>>>>>>> else to help, happy to meet to brainstorm further for example. >>>>>>>>>>>> Good luck! >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> Thanks! I'll start outreach for a couple of sites we already know >>>>>>>>>> are affected, and go from there! >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>>>>> Rick >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Thu, Jan 12, 2023 at 3:11 PM 'Jun Kokatsu' via blink-dev < >>>>>>>>>>>>>>> blink-dev@chromium.org> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> On Thu, Jan 12, 2023 at 10:44 AM Mike Taylor < >>>>>>>>>>>>>>>> miketa...@chromium.org> wrote: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> On 1/11/23 6:49 PM, 'Jun Kokatsu' via blink-dev wrote: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Contact emails >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> jkoka...@google.com >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Specification >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> https://svgwg.org/svg2-draft/struct.html#UseElementHrefAttribute >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> https://github.com/w3c/svgwg/pull/901/files >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Summary >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Assigning a data: URL in SVGUseElement can cause XSS. And >>>>>>>>>>>>>>>>> this also led to a Trusted Types bypass. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Therefore, we plan to deprecate and remove support for it. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Blink component >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Blink>SVG >>>>>>>>>>>>>>>>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3ESVG> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Motivation >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Assigning an attacker controlled string to >>>>>>>>>>>>>>>>> SVGUseElement.href causes XSS and a Trusted Types bypass >>>>>>>>>>>>>>>>> <https://github.com/w3c/trusted-types/issues/357> because >>>>>>>>>>>>>>>>> of data: URLs. If we fix this bug by requiring >>>>>>>>>>>>>>>>> TrustedScriptURL assignment >>>>>>>>>>>>>>>>> to SVGUseElement.href under Trusted Types enforcement, many >>>>>>>>>>>>>>>>> sites would >>>>>>>>>>>>>>>>> need to refactor code (even for same-origin URL or Blob URL >>>>>>>>>>>>>>>>> assignment). >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Since Webkit does not support data: URLs in SVGUseElement >>>>>>>>>>>>>>>>> and both Mozilla and Webkit are supportive for the removal, >>>>>>>>>>>>>>>>> we think that >>>>>>>>>>>>>>>>> removing support for data: URLs in SVGUseElement is the right >>>>>>>>>>>>>>>>> way to solve >>>>>>>>>>>>>>>>> this problem. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Additionally, data: URLs can only trigger script execution >>>>>>>>>>>>>>>>> in script loaders such as HTMLScriptElement.src or dynamic >>>>>>>>>>>>>>>>> import >>>>>>>>>>>>>>>>> <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import>. >>>>>>>>>>>>>>>>> However, SVGUseElement is an exception to this, which also >>>>>>>>>>>>>>>>> caused a >>>>>>>>>>>>>>>>> bypass >>>>>>>>>>>>>>>>> <https://bugs.chromium.org/p/chromium/issues/detail?id=1306450#c10> >>>>>>>>>>>>>>>>> in the Sanitizer API. We believe that this also led to >>>>>>>>>>>>>>>>> several other bugs >>>>>>>>>>>>>>>>> in sanitizers and linters missing a check for this special >>>>>>>>>>>>>>>>> case. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> The usage >>>>>>>>>>>>>>>>> <https://chromestatus.com/metrics/feature/timeline/popularity/4356> >>>>>>>>>>>>>>>>> of data: URLs in SVGUseElement is about 0.005%. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Digging into the HTTP Archive shows usages in ~50 sites. >>>>>>>>>>>>>>>>> There are 2 major sites (slickdeals.net and >>>>>>>>>>>>>>>>> hunter.104.com.tw) which use data: URLs in SVGUseElement. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> The use in slickdeals.net is invisible (i.e. used in the >>>>>>>>>>>>>>>>> footer but doesn't appear), and hunter.104.com.tw is >>>>>>>>>>>>>>>>> using it for a single icon in the footer (which is already >>>>>>>>>>>>>>>>> broken when >>>>>>>>>>>>>>>>> rendered in Webkit). Rest of the usages seems to be in >>>>>>>>>>>>>>>>> individual small >>>>>>>>>>>>>>>>> sites. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> I poked around the 10 sample sites at the bottom of the >>>>>>>>>>>>>>>>> use counter: >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> https://www.aspareanord.it/, https://www.umbria.camcom.it, >>>>>>>>>>>>>>>>> https://www.bisenzio.it/, https://www.comune.vernio.po.it/, >>>>>>>>>>>>>>>>> https://appaltinnovativi.gov.it/, https://www.gdf.gov.it/, >>>>>>>>>>>>>>>>> https://www.us.schott.com/, https://shop.wavin.com/, >>>>>>>>>>>>>>>>> https://jobs.nzz.ch/, https://www.learnapp.com/ >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> For the 6 Italian sites (I guess the same agency made >>>>>>>>>>>>>>>>> them?), the right arrow icon next to "Vedi" would disappear. >>>>>>>>>>>>>>>>> For a site >>>>>>>>>>>>>>>>> like https://jobs.nzz.ch - there's a number of visually >>>>>>>>>>>>>>>>> significant design icons that would be gone towards the >>>>>>>>>>>>>>>>> bottom (and yes, it >>>>>>>>>>>>>>>>> looks sort of broken today in Safari). >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> It's not the end of the world, looking at these 10 sites, >>>>>>>>>>>>>>>>> but I wonder how a developer would know how to fix this. Have >>>>>>>>>>>>>>>>> you >>>>>>>>>>>>>>>>> considered a DevTools issue? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Thank you for the suggestion! Yes, I do plan to follow >>>>>>>>>>>>>>>> Deprecation >>>>>>>>>>>>>>>> steps >>>>>>>>>>>>>>>> <https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/frame/deprecation/README.md> >>>>>>>>>>>>>>>> and >>>>>>>>>>>>>>>> add a Devtools issue 🙂 >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Initial public proposal >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> TAG review >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> TAG review status >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Not applicable. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Because this intent removes part of a feature, and it is >>>>>>>>>>>>>>>>> already shipped in Webkit (i.e. never supported). >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Risks >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Interoperability and Compatibility >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Gecko: Positive >>>>>>>>>>>>>>>>> <https://github.com/mozilla/standards-positions/issues/718> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> WebKit: Positive >>>>>>>>>>>>>>>>> <https://github.com/WebKit/standards-positions/issues/108> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Web developers: No signals >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Debuggability >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Is this feature fully tested by web-platform-tests >>>>>>>>>>>>>>>>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md> >>>>>>>>>>>>>>>>> ? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Yes <https://github.com/web-platform-tests/wpt/pull/37511> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Flag name >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> RemoveDataUrlInSvgUse >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Requires code in //chrome? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> False >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Tracking bug >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> https://bugs.chromium.org/p/chromium/issues/detail?id=1300195 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Estimated milestones >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Deprecate for 2 milestones, then remove depending on >>>>>>>>>>>>>>>>> breakages. >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Can you say more about what the deprecation looks like >>>>>>>>>>>>>>>>> (i.e., blog post, deprecation reports, devtools issue, etc)? >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> Link to entry on the Chrome Platform Status >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> https://chromestatus.com/feature/5128825141198848 >>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>> 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 on the web visit >>>>>>>>>>>>>>>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOWKMF6VXw7jmQoZM47i3ybzn%3D5Pc4mw26Khv9U9aP_UzBt-dg%40mail.gmail.com >>>>>>>>>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOWKMF6VXw7jmQoZM47i3ybzn%3D5Pc4mw26Khv9U9aP_UzBt-dg%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/CAOWKMF5KQOG5R8baUM41T4fR01QbGFjvvEsf629h%2BzASCn_F0Q%40mail.gmail.com >>>>>>>>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOWKMF5KQOG5R8baUM41T4fR01QbGFjvvEsf629h%2BzASCn_F0Q%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/CAOWKMF65KcSCkzVupRw4n8ZG%3DKKbG5GY62HzwNSZW4Z78ZYd_w%40mail.gmail.com >>>>>>>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOWKMF65KcSCkzVupRw4n8ZG%3DKKbG5GY62HzwNSZW4Z78ZYd_w%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/d63c3823-20b6-457c-bff9-f85429421bf0n%40chromium.org >>>>>>>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/d63c3823-20b6-457c-bff9-f85429421bf0n%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 on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAFKd2qX6NkSPkaWUo9__gH%2Bucjjb1n0f%2B%3DWOzvMJVcivqcLcVA%40mail.gmail.com.