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/CAOWKMF4WWpwouFYgGA-ph%3DnM-FtQLQLALHC5XbgpmJmwr-fpqg%40mail.gmail.com.