Closed
Bug 1191284
Opened 9 years ago
Closed 9 years ago
CRITICAL (0-day?): Possible Same Origin Policy bypass (file:// access)
Categories
(Firefox :: PDF Viewer, defect)
Tracking
()
People
(Reporter: contact, Assigned: bholley)
References
Details
(Keywords: sec-critical)
Attachments
(1 file)
(deleted),
text/plain
|
Details |
User Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:39.0) Gecko/20100101 Firefox/39.0
Build ID: 20150629114049
Steps to reproduce:
Summary:
I was visiting a news website when some ad script ran and injected an iframe that used PDF.JS's viewer.js to access files on my system (Possible Same Origin Policy bypass?). It triggered an error in view.js that I could view in the Firefox Developer Tools:
"An error occurred while loading the PDF.
PDF.js v1.1.24 (build: f6a8110)
Message: undefined" viewer.js:6023:5
The exploit script has been attached!
Steps to reproduce (at the time of writing):
1. Visited: http://www.themoscowtimes.com/news/article/duma-considers-anti-terrorism-bill-for-online-payments/492780.html
2. 'Ad' was loaded in the background: http://185.86.77.48/ads.php
3. Which loaded: http://185.86.77.48/counter.php (File has been attached to report)
4. Counter.php contained script which created an iframe and started accessing system files (/.ssh/id_rsa, known_hosts etc.), sending the contents in a POST payload to: http://185.86.77.48/banner.php (with some GET parameters). It looks like the script is also configured to exploit the same bug on Windows so different files may be accessed with that OS. The files that are targeted can be found in plain-text in the script.
System details:
Browser: Firefox 39.0, Mozilla Firefox for Ubuntu canonical - 1.0
OS: Ubuntu 15.04
Actual results:
NA
Expected results:
NA
Reporter | ||
Updated•9 years ago
|
OS: Unspecified → Linux
Hardware: Unspecified → x86_64
Updated•9 years ago
|
Status: UNCONFIRMED → NEW
Component: Untriaged → PDF Viewer
Ever confirmed: true
Reporter | ||
Comment 1•9 years ago
|
||
It's probably a combination of https://www.mozilla.org/en-US/security/advisories/mfsa2015-69/ (Privilege escalation through internal workers, July 2, 2015) and a (new) Same Origin Policy bypass.
Comment 3•9 years ago
|
||
I'm unclear as to whether ESR38 is affected. Comment 1 makes me think no but the comment is not definitive enough for me to mark ESR38 as unaffected.
status-firefox39:
--- → affected
status-firefox40:
--- → affected
status-firefox41:
--- → affected
status-firefox42:
--- → affected
status-firefox-esr38:
--- → ?
tracking-firefox40:
--- → +
tracking-firefox41:
--- → +
tracking-firefox42:
--- → +
tracking-firefox-esr38:
--- → ?
Assignee | ||
Comment 4•9 years ago
|
||
(In reply to Lawrence Mandel [:lmandel] (use needinfo) from comment #3)
> I'm unclear as to whether ESR38 is affected. Comment 1 makes me think no but
> the comment is not definitive enough for me to mark ESR38 as unaffected.
comment 1 isn't accurate. ESR38 is almost certainly affected.
Tracked for ESR38.
Updated•9 years ago
|
Flags: sec-bounty?
Comment 6•9 years ago
|
||
In case if we decide to disable PlayPreview used in PDF Viewer, I attached uplift patches for bug 1179262 for Firefox 40 and 38esr there. Firefox 42 already contains the fix.
Assignee | ||
Comment 7•9 years ago
|
||
Bug 1178058 is the relevant one here.
Assignee | ||
Comment 8•9 years ago
|
||
The exploit code here appears to be targeted at developers - it steals credentials for ftp, s3, svn, sql, etc, and sends them to 185.86.77.48.
185.86.77.48 is in the Ukraine, and comment 0 indicates that it's targeting people in Moscow/Russia. That's certainly very interesting, but let's stay focused on getting this patched.
Comment 9•9 years ago
|
||
Bobby: are the changes to nsExpandedPrincipal in bug 1178058 sufficient to fix this bug in Firefox 40, or does its effectiveness on Nightly subtly depend on other changes that might have landed in the past couple of months? Ditto for ESR-38 which is missing another three months worth of development work?
Flags: needinfo?(bobbyholley)
Assignee | ||
Comment 10•9 years ago
|
||
(In reply to Daniel Veditz [:dveditz] from comment #9)
> Bobby: are the changes to nsExpandedPrincipal in bug 1178058 sufficient to
> fix this bug in Firefox 40, or does its effectiveness on Nightly subtly
> depend on other changes that might have landed in the past couple of months?
> Ditto for ESR-38 which is missing another three months worth of development
> work?
I think they should be independently backportable, but it's difficult to be certain. I recommend uplifting both bug 1178058 and bug 1179262. I am working on getting a deeper understanding of this testcase in order to gain additional certainty that everything is fixed, but I think that can happen in parallel with the above.
Flags: needinfo?(bobbyholley)
Reporter | ||
Comment 11•9 years ago
|
||
I am glad to see this was picked up so fast.
@bholley
Indeed very interesting. The website is actually in English (International) but it's a Russian news agency so for all I know they didn't target a specific country or region. I tested with a Dutch and German VPN and both times the iframe loading the malicious script was included.
Assignee | ||
Comment 12•9 years ago
|
||
Lawrence, I recommend uplifting bug 1179262 as well, but we should discuss it here rather than in the other bug (which is public). Does the patch look ok to take?
Flags: needinfo?(lmandel)
Comment 13•9 years ago
|
||
Yury: is there anything in the PDF reader we could quickly disable with a hotfix add-on that would short-circuit this exploit until we can ship real (and tested!) patches? Obviously we could disable the entire PDF reader easily, but that dumps millions of people back into Adobe Reader and I'm not sure that's any better given how many users have outdated versions and how many active exploits there are for _that_!
Any way to disable the 'application/x-moz-playpreview-pdfjs' handler or override its registration with a do-nothing component?
Flags: needinfo?(ydelendik)
Comment 14•9 years ago
|
||
(In reply to Daniel Veditz [:dveditz] from comment #13)
> Yury: is there anything in the PDF reader we could quickly disable with a
> hotfix add-on that would short-circuit this exploit until we can ship real
> (and tested!) patches? Obviously we could disable the entire PDF reader
> easily, but that dumps millions of people back into Adobe Reader and I'm not
> sure that's any better given how many users have outdated versions and how
> many active exploits there are for _that_!
>
> Any way to disable the 'application/x-moz-playpreview-pdfjs' handler or
> override its registration with a do-nothing component?
Yes, the bug 1179262 does just that and it's currently landed in Firefox 42 (so this bug shall not affect the Nightly)
Flags: needinfo?(ydelendik)
Bobby, given that the patch for bug 1179262 has been in Nightly for a month now it seems safe to uplift. However, while reviewing that patch I noticed the classID line (copied below). Is this a UUID change? I was told that UUID changes are not ok in Aurora, Beta channels. Not that it would stop us in this case, but just wanted your comment on that aspect.
+ classID2: Components.ID('{d0c5195d-e798-49d4-b1d3-9324328b2292}'),
Flags: needinfo?(lmandel) → needinfo?(bobbyholley)
Comment 16•9 years ago
|
||
I've verified that on aurora the patches from bug 1178058 and bug 1179262 both independently fix the testcase from bug 1178058 (which formed the basis for the exploit code). I still think it would be a good idea to take both.
Comment 17•9 years ago
|
||
(In reply to Ritu Kothari (:ritu) from comment #15)
> Is this a UUID change? I was told that UUID
> changes are not ok in Aurora, Beta channels. Not that it would stop us in
> this case, but just wanted your comment on that aspect.
>
> + classID2: Components.ID('{d0c5195d-e798-49d4-b1d3-9324328b2292}'),
Yury might be a better person to ask about that.
Flags: needinfo?(ydelendik)
Assignee | ||
Comment 18•9 years ago
|
||
(In reply to Ritu Kothari (:ritu) from comment #15)
> Bobby, given that the patch for bug 1179262 has been in Nightly for a month
> now it seems safe to uplift. However, while reviewing that patch I noticed
> the classID line (copied below). Is this a UUID change? I was told that UUID
> changes are not ok in Aurora, Beta channels. Not that it would stop us in
> this case, but just wanted your comment on that aspect.
>
> + classID2: Components.ID('{d0c5195d-e798-49d4-b1d3-9324328b2292}'),
It does not constitute the kind of UUID change we're worried about for uplifts.
Assignee | ||
Updated•9 years ago
|
Flags: needinfo?(ydelendik)
Flags: needinfo?(bobbyholley)
Comment 19•9 years ago
|
||
(In reply to Yury Delendik (:yury) from comment #14)
> > Any way to disable the 'application/x-moz-playpreview-pdfjs' handler or
> > override its registration with a do-nothing component?
>
> Yes, the bug 1179262 does just that and it's currently landed in Firefox 42
> (so this bug shall not affect the Nightly)
Sorry if I wasn't clear enough: I meant "Any way to do that from a hotfix add-on?" The patch in bug 1179262 contains changes to Firefox binaries. I'm not sure a hotfix add-on could simulate those or monkey-patch around it.
Updated•9 years ago
|
Flags: needinfo?(ydelendik)
Assignee | ||
Comment 20•9 years ago
|
||
(In reply to Daniel Veditz [:dveditz] from comment #19)
> Sorry if I wasn't clear enough: I meant "Any way to do that from a hotfix
> add-on?" The patch in bug 1179262 contains changes to Firefox binaries. I'm
> not sure a hotfix add-on could simulate those or monkey-patch around it.
This fix requires platform support, I think.
Comment 21•9 years ago
|
||
(In reply to Bobby Holley (:bholley) from comment #12)
> Lawrence, I recommend uplifting bug 1179262 as well, but we should discuss
> it here rather than in the other bug (which is public). Does the patch look
> ok to take?
Yes. It has more code change that I'd like to see at this point in a release but it has been on m-c for a month and the usual rules don't apply to 0 day bugs. I would definitely prefer that we verify that the fix is good before we take the changes.
ESR31 is EOL on Tuesday but, if we ship a chemspill we need to include ESR31 as it is still an actively supported branch. Is ESR31 affected?
Comment 22•9 years ago
|
||
(In reply to Lawrence Mandel [:lmandel] (use needinfo) from comment #21)
> I would definitely prefer that we verify that the fix is good before
> we take the changes.
nm. Just read comment 16.
Comment 23•9 years ago
|
||
One more in my string of comments, is fennec affected?
Assignee | ||
Comment 24•9 years ago
|
||
(In reply to Lawrence Mandel [:lmandel] (use needinfo) from comment #23)
> One more in my string of comments, is fennec affected?
According to Yury we don't use pdf.js on Fennec, so no.
Comment 25•9 years ago
|
||
(In reply to Daniel Veditz [:dveditz] from comment #19)
> (In reply to Yury Delendik (:yury) from comment #14)
> > > Any way to disable the 'application/x-moz-playpreview-pdfjs' handler or
> > > override its registration with a do-nothing component?
> >
> > Yes, the bug 1179262 does just that and it's currently landed in Firefox 42
> > (so this bug shall not affect the Nightly)
>
> Sorry if I wasn't clear enough: I meant "Any way to do that from a hotfix
> add-on?" The patch in bug 1179262 contains changes to Firefox binaries. I'm
> not sure a hotfix add-on could simulate those or monkey-patch around it.
No, there is not. The patch in the Firefox binaries allows stream converter for PDF content work even when EMBED tag is used and that cannot be done with just add-on. However simple disabling of Play Preview for EMBED tag, potentially can be done with add-on code (e.g. by overriding PdfRedirector.jsm to not do anything), but this will be a loss of functionality for content that uses embedded PDFs.
Flags: needinfo?(ydelendik)
OK, it sounds like we be landing both patches mentioned in comment 16.
Then we should land them on a relbranch and on m-r, m-b, and m-a. Once they land I can start a build for 39.0.1 and ESR 38.
Can someone help out in figuring out whether ESR 31 is affected?
Comment 27•9 years ago
|
||
(In reply to Yury Delendik (:yury) from comment #25)
> No, there is not. The patch in the Firefox binaries allows stream converter
> for PDF content work even when EMBED tag is used and that cannot be done
> with just add-on. However simple disabling of Play Preview for EMBED tag,
> potentially can be done with add-on code (e.g. by overriding
> PdfRedirector.jsm to not do anything), but this will be a loss of
> functionality for content that uses embedded PDFs.
That could be promising, right? A hotfix that disables embedding for a few days until we can release Firefox 40 might be better than a full chemspill on 39.0.x, 38.1.x and possibly 31.8.x.
Then again we know how to do chemspills but hotfix add-ons are bespoke and might require more testing to make sure we got it right.
Well, we know that the patch(es) worked in Nightly, so that makes me think we have a good chance these fixes will work in other versions. And, we have that fix already.
I kind of wish we had called it the other way, earlier, but we are about to land the patches from both bugs and start the builds for 39.0.3 and 38.1.1esr so, onwards with the chemspilling.
Okay, the patches from both bugs have been uplifted to aurora/beta/release/esr38 (and the two relbranches). We haven't uplifted to esr31 yet. Don't know if we need to.
Comment 30•9 years ago
|
||
For what it's worth I cannot reproduce the 1178058 testcase on ESR-31. In the dev-tools console I get
Error: stream must have data" pdf.worker.js:215
assert@resource://pdf.js/build/pdf.worker.js:232:5
init@resource://pdf.js/build/pdf.worker.js:4615:5
PDFDocument@resource://pdf.js/build/pdf.worker.js:4606:7
LocalPdfManager@resource://pdf.js/build/pdf.worker.js:4201:5
getPdfManager@resource://pdf.js/build/pdf.worker.js:36831:11
wphSetupDoc@resource://pdf.js/build/pdf.worker.js:36997:7
messageHandlerComObjOnMessage@resource://pdf.js/build/pdf.worker.js:1115:9
I don't know if the problem can be worked around or if that version of Firefox and/or the PDF reader is missing a crucial feature, but at least the 0-day won't work as written.
Assignee | ||
Comment 31•9 years ago
|
||
Note - to verify this bug without sending the contents of your hard drive to the Ukraine, use the test in bug 1178058. Note that that testcase is designed to work on Windows and Linux - you'll need to modify it to make it work on Mac.
Updated•9 years ago
|
Attachment #8643666 -
Attachment description: counter.php → ***ACTIVE EXPLOIT*** Will send your data to Ukraine if run
Attachment #8643666 -
Attachment filename: exploit.js → counter.php
Attachment #8643666 -
Attachment is private: true
Attachment #8643666 -
Attachment mime type: application/javascript → text/plain
Can we call this fixed now?
Comment 33•9 years ago
|
||
Yes, this is fixed by landing the patches in the other two bugs, and now released.
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Comment 34•9 years ago
|
||
Found a variant pasted on ubuntu pastebin. This one *does* go after Mac users, slightly different set of interesting files (but same developer-type focus). Not sure about all the '!' at the beginning of the file, they were in the pastebin like that. I have no idea where it was found.
Uploading file in case pastebin expires
http://paste.ubuntu.com/12030863/
Found via Twitter
https://twitter.com/_argp/status/630409999324479488
Comment 35•9 years ago
|
||
Found another one on Debian's pastebin. more similar to the Ubuntu one than the one originally reported here. https://paste.debian.net/?show=290146;lines=0
Also notice the n.version="1.0.7" in the Ubuntu one. That's not in either of the others, but suggestive this may have been out for a some time.
Comment 36•9 years ago
|
||
The Debian pastebin was uploaded the day before the Ubuntu version so maybe it's evolving. Also, found via @hdmoore's retweet of https://twitter.com/PhysicalDrive0/status/630469684341645312
Reporter | ||
Comment 37•9 years ago
|
||
What's interesting is that the list of targeted files is longer but this list no longer includes the public key ('id_rsa.pub'). The only reason I noticed the file theft was because when it tried to open my public key file it triggered a file dialog because Firefox determined the file was executable because of the 'application/vnd.ms-publisher' mimetype associated with the .pub file extension. All other files in the list either have no file extension or a file extension that returns a mimetype the browser can handle (e.g. file extension .xml). The only exception in the list is *.sh. These files seem to trigger file dialogs too but of course not everyone has shellscript files so the file theft could still go unnoticed.
What's also interesting is that in this case the targets actually seem to be Russians. It also seems to have been modified by someone other than the original author who's English is clearly not as good, see for example the variable named 'interessed_text_files'.
Comment 38•9 years ago
|
||
(In reply to Bobby Holley (:bholley) from comment #31)
> Note - to verify this bug without sending the contents of your hard drive to
> the Ukraine, use the test in bug 1178058. Note that that testcase is
> designed to work on Windows and Linux - you'll need to modify it to make it
> work on Mac.
Landry Breuil managed to do some verification here: https://bugzilla.mozilla.org/show_bug.cgi?id=1178058#c66.
Updated•9 years ago
|
Keywords: sec-critical
Updated•9 years ago
|
Flags: sec-bounty? → sec-bounty+
Updated•9 years ago
|
Target Milestone: --- → Firefox 42
Updated•9 years ago
|
Group: core-security → core-security-release
Updated•9 years ago
|
Comment 39•9 years ago
|
||
What was the exact breach or pot hole for this bug?
I am new to bugzilla and trying to learn about this bug.
Flags: needinfo?(bobbyholley)
Assignee | ||
Comment 40•9 years ago
|
||
(In reply to Akshay Jain from comment #39)
> What was the exact breach or pot hole for this bug?
> I am new to bugzilla and trying to learn about this bug.
This bug was related to a poorly-thought-out technology called PlayPreview which has since been removed from gecko (bug 1179262). Now that it's gone I've done my best to forget all about it, and so a precise explanation of the failure mode would take me a long time to write. It would also probably take a lot of background-research for a non-gecko-security-hacker to understand, and that time wouldn't be all that well spent because most of the systems involved have been deleated.
If you'd like to understand a devious and complicated gecko bug start to finish, I might recommend the one described in bug 863933 comment 5. All of the stuff referenced there is pretty well-documented, but still would probably take months for an outsider to understand. If you can grok that bug, my hat goes off to you. ;-)
Flags: needinfo?(bobbyholley)
Assignee | ||
Comment 41•9 years ago
|
||
s/background-research/background research/
s/deleated/deleted/.
Sorry for the typos - in a bit of a hurry going through my backlog. :\
Updated•8 years ago
|
Attachment #8645791 -
Attachment description: contact@fukusa.nl,5000?,2015-08-05,2015-08-08,2015-08-10,true,,, → contact@fukusa.nl,5000,2015-08-05,2015-08-08,2015-08-10,true,,,
You need to log in
before you can comment on or make changes to this bug.
Description
•