[webkit-gtk] Vulnerability in Webkit-GTK and PulseAudio volume handling

Alexander E. Patrakov patrakov at gmail.com
Tue Oct 8 03:24:54 PDT 2013


Hello.

Note: this is not a CVE request yet! Before making a formal CVE request, 
I would need to collect "official" information on the topic who needs to 
do what with this bug (although I do have my own opinion, see below). 
For now, I just want to start a discussion by posting this to the 
relevant mailing lists, and also I want to avoid the situation where 
each side blames the other. Please note that I am not an upstream 
developer of any of the mentioned projects. I will attend the audio 
mini-conference at LinuxCon Europe 2013, it is OK to discuss the issue 
there if representatives from both parties intend to come.

The following combination of software has a nasty bug when used 
together, that I personally consider to be a vulnerability:

* PulseAudio (any version, especially when used in flat-volume mode that 
is the default everywhere except Ubuntu).
* Any browser based on Webkit-GTK 2.x (any version with HTML5 
audio/video support based on GStreamer).

The bug is that a malicious piece of javascript on the web page can 
cause an audio file to play at an unexpectedly high volume, not obeying 
the volume that the user has set for the web browser in pavucontrol or 
gnome-volume-control, and effectively not letting the user move the 
volume slider corresponding to the web browser. When flat volumes are in 
effect, the web page can play that audio file at the full volume that 
the sound card is capable of, which can in some cases damage 
loudspeakers (especially tweeters) or the user's hearing.

The reproducer is already public at http://jsfiddle.net/bteam/FbkGD/ and 
can be trivially enhanced to also prevent muting of the audio stream. 
View that in Epiphany or Midori on any Linux distribution except Ubuntu.

My own opinion is that both parties are equally responsible for the 
vulnerability. The salt of the bug is that PulseAudio's security model 
is based on clients not sending malicious requests to change the stream 
volume, while Webkit passes all volume-changing requests (including 
malicious) to GStreamer, because it has no way of telling user-initiated 
volume change requests from automated malicious ones.

Even with non-flat volumes, passing the javascript-initiated volume
changes to pulseaudio means that the user cannot drag the "Epiphany"
volume slider or (with a trivial change to the JavaScript on the page)
mote the Epiphany stream in pavucontrol. So, in my opinion, using a 
pulseaudio stream volume to represent javascript volume (or, for that 
matter, the volume visible to any other runtime that can execute 
untrusted programs/scripts) is always wrong.

However, the fact that flat volumes are enabled by default in upstream 
PulseAudio makes this small annoyance a real vulnerability. Given that 
the "100% hardware volume" type of bug is still present in some 
applications given the vast amount of time the feature exists, I think 
(but understand that it is an extreme position) that flat-volume mode, 
by its mere existence, is a bug that needs to be removed. At the very 
minimum, there is a documentation bug: it is nowhere explained that you 
should never use PulseAudio stream volumes (and for that matter, 
gstreamer sink volumes) for things that are not guaranteed to directly 
correspond to user-draggable volume sliders that no automated script can 
also move.

See also:

https://bugs.webkit.org/show_bug.cgi?id=118974
https://bugzilla.gnome.org/show_bug.cgi?id=675217
https://bugs.freedesktop.org/show_bug.cgi?id=46466
https://bugzilla.gnome.org/show_bug.cgi?id=680779

-- 
Alexander E. Patrakov


More information about the webkit-gtk mailing list