-
Notifications
You must be signed in to change notification settings - Fork 125
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Detectability of assistive technology #1371
Comments
My results indicate this is not as straightforward as the demo indicates. It does catch a few real instances, but it's also wrong a lot of the time.
I'm pretty sure I could get it to fail in a number of other circumstances and on other platforms, but I think this enough for now. This approach is also not limited to ARIA. You can use a similar approach with plain old HTML+CSS and get similar faulty but sometimes correct results. |
Indeed the demo site shown will show exactly the same issues if you remove the aria-hidden. The only difference is that a very savvy screen reader user might notice that buttons were doubled up. This is not to say that there are not potential issues - however from this demo I'm not convinced that they come from ARIA and not from HTML and CSS. Indeed the mitigations discussed in https://bugzilla.mozilla.org/show_bug.cgi?id=988896 have nothing to do with ARIA and show themselves with a standard HTML button. |
If I understand the test page correctly, the cause is the screen reader, because screen readers convert keyboard events into click events. I have tested Firefox with JAWS and NVDA and in both cases the screen reader is recognized correctly. In JAWS I can set that the conversion of events should not take place and then JAWS is also no longer recognized. In NVDA, the problem does not occur when I switch to forms mode, because then the events are not converted either. In this respect it is a screen reader problem. In my opinion it has nothing to do with ARIA |
@cookiecrook - point taken about the detector script not working for every combination, but from your notes it does seem like it mostly identifies the default case - I'd imagine that this would be most users? @jnurthen - agreed that aria-disabled would simply prevent the user from even knowing that there was a strange second button when this detection attack was carried out. But having it makes the attack more passive, which I think is not great. Also, I haven't gotten too much time to look into it, but could a potential attack for the screen reader vs keyboard-user case also be having 3 elements on a page, the middle one aria-hidden, and if there is a focus event on the first and last but not the middle aria-hidden one then that is evidence of a screen reader being used? In general, the ability for a server to turn off/modify ARIA use by the browser/screen reader such that the user's behaviour is measurably (by the page) modified is a problem, and while I haven't gotten time yet to fully explore all the different attacks possible, it does seem worthwhile to think and call out the potential for them in the ARIA spec. |
@ShivanKaul Everyone has written so far that it has nothing to do with ARIA. The test page takes advantage of a feature of screen readers. The example at http://dylanb.github.io/screenreaderdetection/ would also work in the same way without ARIA |
Should this not still be documented here? |
I was under the impression that the aria-hidden is what causes the simulated button to not show up for screen reader users. If yes, IMO this is a problem because screen reader users won't even come to know that there is a weird button here. In general, we would prefer attacks be active (detectable by the user), not passive. FWIW I don't think it's a serious enough issue to hold up publication. |
In the PING call today, I suggested that it'd be good to have a Privacy Considerations section in ARIA 1.2 saying something like,
Or whatever y'all think is accurate. There's no need to figure out how to make screen readers and non-screen-readers indistinguishable in ARIA 1.2, as that's a much bigger project. |
I would definitely object to this phrasing... It's inaccurate and alarmist. |
By that phrasing, you might also need to say "In the HTML Spec, Perhaps we should have an ARIA/PING joint meeting to discuss. |
Not to beleaguer the point, but does |
There would first have to be an example where this is the case. The current example relies on an invisible button being activated by keyboard users with keyevent and by screen reader users with mouseevent. Mouse users can't activate it because it was hidden by CSS. ARIA is not in play at all. The warning should correctly read like this: If you use a screen reader that converts events, it may be discovered that you have a screen reader |
Also FYI @MarcoZehe |
I wouldn't want the spec to say anything that the WG thinks is inaccurate, but I do feel like it's accurate to say that the bits of both ARIA and CSS that make it possible to show different content to screen-reader users vs non-users, are potential privacy problems. It's true that we'd hit diminishing returns in trying to list every feature that can probabilistically distinguish between the two sets of users, and in the long run, I'd like to find a way for the privacy threat model to describe the boundary between "attacks" that are worth blocking vs ones that we can't block. +1 for a joint meeting to figure out a rough boundary to drive Privacy Considerations sections for specs in the near term. |
@jyasskin I'm assuming you don't want to try to schedule this this year? Early Jan ok? |
I defer scheduling to @pes10k and Christine (whose github handle I've lost), but I also assume not this year. |
That is not true. It has nothing to do with ARIA or CSS. JavaScript is enough. I don't need to hide the visible button via aria-hidden. There would be many other possibilities, e.g. a font graphic with alt="" or a CSS graphic that is not output by the screen reader. Two things are crucial:
|
@JAWS-test wrote:
You don't even need JavaScript. You can position a link off screen (most easily with CSS) to prevent mainstream pointer activation, and add @jyasskin wrote:
Thanks for raising this comment Jeffrey, and thanks @ShivanKaul for raising the original issue. I agree that there are privacy risks with many features of the Web Platform. As @JAWS-test points out, most of these are related to variance in JavaScript event objects and timing. Although JavaScript events are the core of the issue, they can be used in conjunction with CSS, ARIA, and other HTML features to increase heuristic confidence. The W3C should shine a light on any risk area, including those related to assistive technology (AT). I think it's reasonable to include some note on privacy risk in the ARIA spec, as long as we're clear that similar notes about AT-specific privacy risk should be added to HTML, CSS, and almost every other W3C spec that defines UI and/or interaction. I look forward to discussing this more in a joint working group meeting in 2021. Happy New Year! |
+1 to the suggestion that ARIA include a privacy section, and to suggest that principle 2.7 from the TAG WebPlatform Design Principles is referenced. |
Hi all, just wanted to see if the WG is still interested in a joint call with PING. Just to get a sense of the room, if a call appeals please give a 👍 (or if you're opposed a 👎) to this comment. If there is interest, I'm happy to talk with the chairs and figure out a good time for a call. (thanks for the nudge @cookiecrook !) |
@pes10k The ARIA group would like to propose 9am pacific noon eastern on Thursday Feb 11 for this discussion. |
9 am Pacific Feb 11 works well for me too. |
9am Feb 11 also works for me |
OK - I have scheduled a meeting in Zoom. Join Zoom Meeting Meeting ID: 974 5892 4977 US : +1 646 558 8656 or +1 669 900 6833 IRC: #aria-dive |
Actions from yesterday's meeting as I recall them:
|
I can think of several methods to determine AT usage, not 100%, but quite reliably. However, these do not apply to mobile devices/touch operation. There are probably other methods. For desktop devices, however, the following should work:
|
I took an action today to raise this issue with the TAG, and draft a new Privacy section for 1.3 that includes a note referencing the TAG issue. |
|
As-per the principle, even the click shouldn't expose this - but presumably that happens today because it is inevitable. Will have to read the backlog first to understand.. |
I've filed the Web Platform Design Principles Issue #293 and will reference it in an upcoming PR to add this note to the spec for ARIA 1.3. |
@ShivanKaul could you please make a version that is compatible in Linux? :) |
Unassigning myself b/c James Nurthen is taking this for 1.2. |
@ShivanKaul @jyasskin @cynthia @pes10k please see the proposed Security and Privacy Considerations section at https://raw.githack.com/w3c/aria/jnurthen/issue1371/index.html#privacy-and-security-considerations. |
That looks great to me, with a note that identifying use of AT is more-bad than just being part of a fingerprint: the fact is itself sensitive information. So, instead of
maybe something like
|
The proposed change looks good to me as well. @jyasskin 's proposal also looks good! Are there any takeaways I should add to the principles regarding this? Should we be explicit that our principle primarily targets new work? |
@cynthia I think Alice's comment at w3ctag/design-principles#293 (comment) is exactly right, and I think that thread is a better place to discuss the Principles than this one. I don't immediately see a reason that https://w3ctag.github.io/design-principles/#do-not-expose-use-of-assistive-tech would be any more or less targeted at new work than all the other principles. |
I reviewed https://raw.githack.com/w3c/aria/2020-09_CR/index.html for privacy issues as requested by the ARIA WG. Currently the document does not have a Privacy Considerations section.
It seems that aria-hidden=true can be used in combination with focus or mousedown/up JS events to detect whether or not the user of a website is browsing using a screen reader. Here's a demo website: https://dylanb.github.io/screenreaderdetection. I believe a website developer could use role=none/presentation similarly.
I'm curious as to why there is no text around this in the document. Seems like it is a widely-recognized privacy harm [0, 1] and something that could be discussed along with possible mitigations [2] in a Privacy Considerations section.
The text was updated successfully, but these errors were encountered: