Broken Browser
  • Menu ▾
    • Browser Workshop
    • Musings
    • About
  • Browser Workshop
  • Musings
  • About

IE9: Resident createPopup Persists After the Browser Is Closed

2011-02-22 :: browser-workshop :: resident

This one surprised me quite a bit. A createPopup window that has been shown can outlive the browser itself. If the user closes IE while a modal-style alert from the popup is still open, the popup and...

[Read more]

IE9 UXSS: Resident createPopup Function Call

2011-02-21 :: browser-workshop :: uxss

This UXSS relied on an interesting property of createPopup: if the popup is shown (even at size 0×0) and its eval is called via setTimeout inside an iFrame, the popup stays alive across navigation....

[Read more]

IE9: InfoBar URL Spoofing via Navigate2

2011-02-09 :: browser-workshop :: address-bar-spoof

This was a UI spoofing issue with IE's popup-blocked InfoBar. When a popup is blocked, the InfoBar shows the URL that was blocked. By using Navigate2 through an iFrame acting as a WebBrowser control,...

[Read more]

IE9: NavigateAndFind Opens Local Folders and Files Outside Protected Mode

2011-02-08 :: browser-workshop :: misc

I was looking at the external object's less-travelled methods and found that NavigateAndFind with a non-empty third argument opens a new window pointing at any file:// URL — without any popup blocker...

[Read more]

IE9 UXSS: Generate Error to Grab the Error Handler's Caller Function

2011-01-31 :: browser-workshop :: uxss

This one involved a combination of a functionality regression in IE9 and a security bug. When the previous page in a tab was rendered in document mode 8 or lower, certain cross-frame operations that...

[Read more]

IE9 DoS: parent.document.open from an iFrame

2011-01-26 :: browser-workshop :: dos

This was a concise one. Calling parent.document.open() from inside an iFrame and then immediately executing any JavaScript instruction caused the browser to crash. The instruction after the...

[Read more]

IE9: iFrame URL Inconsistency on Refresh After DOM Insertion

2011-01-17 :: browser-workshop :: misc

This was a behavioral quirk that Patrick Mann asked me to look into. When an iFrame's location is changed via window[0].location.replace() and the page is then refreshed, IE correctly honours the...

[Read more]

IE9 DoS: Executing a Method on a Closed Window

2011-01-11 :: browser-workshop :: dos

This crash required a race condition: open a new window, have it close itself immediately via a script, and then try to call a method on the returned window reference before the engine has finished...

[Read more]

IE9 EoP: iFrame innerHTML Self-Destruction

2011-01-07 :: browser-workshop :: eop-rce

I found this while experimenting with self-referential DOM mutations. If an iFrame uses execScript to call innerHTML on its own containing element in the parent, it destroys itself mid-execution,...

[Read more]

IE9 EoP: Iterating an iFrame URL Between Feeds and HTML

2011-01-05 :: browser-workshop :: eop-rce

This one took me by surprise. Rapidly alternating an iFrame between an RSS/Atom feed URL and a regular HTML page caused an exploitable crash after just a few iterations. The key insight was combining...

[Read more]

IE9: setCapture Through Tabs Enables UI Spoofing

2011-01-03 :: browser-workshop :: address-bar-spoof

I was exploring what setCapture could do across tab boundaries and found that it was surprisingly permissive. A page in one tab can capture all mouse clicks — even those made in a completely...

[Read more]

IE9 EoP: document.open While the Browser Is Frozen by a Dialog

2010-12-22 :: browser-workshop :: eop-rce

After playing around for a while with timing-based crash patterns, I found that calling document.open() on the main window while a dialog was freezing it produced an exploitable DEP violation. The...

[Read more]

IE9: Opening Alerts and Modeless Windows Attributed to a Different Tab

2010-12-17 :: browser-workshop :: misc

This one surprised me. It turns out that alerts thrown inside an onunload handler are displayed in whatever tab gains focus after the originating tab closes — so the dialog appears to come from an...

[Read more]

IE9 DoS: document.open on a New Trident Instance

2010-12-16 :: browser-workshop :: dos

This was a fairly simple crash to stumble onto. Calling document.open() on a freshly created Trident instance — either a new blank window or an htmlFile ActiveXObject — would reliably take the...

[Read more]

IE9 UXSS: window.open Redirect with setTimeout Code Execution

2010-12-07 :: browser-workshop :: uxss

I was lucky to find this one early in my IE9 research. The idea is straightforward: open a new window that will redirect to a target domain, and simultaneously schedule a setTimeout against that...

[Read more]

IE9 DoS: xEval on Any Document Method

2010-12-06 :: browser-workshop :: dos

After playing around with cross-frame script execution in IE9, I noticed that calling eval from inside an iFrame and then executing any document method on the parent would reliably crash the browser....

[Read more]

IE9 Crash (Deadcall): appendChild on a Dead createDocumentFragment

2010-12-01 :: browser-workshop :: dos

Another entry in the deadcall collection. Creating a DocumentFragment from an IFrame, reloading the IFrame (destroying the fragment's backing context), and then calling...

[Read more]

IE9 Crash (Deadcall): Calling show() of a Dead createPopup via Function.call

2010-12-01 :: browser-workshop :: dos

This was the first entry in what I called the "deadcall" collection — a series of crashes where Function.call (and equivalently bind and apply) was used to execute a method of one object on behalf of...

[Read more]

IE9 Crash (Deadcall): cloneRange on a Dead Range

2010-12-01 :: browser-workshop :: dos

A deadcall crash using DOM Range objects: creating a range from an IFrame, reloading the IFrame, and then calling cloneRange() from a live range on behalf of the dead one caused a crash in...

[Read more]

IE9 Crash (Deadcall): toString on a Dead Selection Range

2010-12-01 :: browser-workshop :: dos

A deadcall crash involving selection ranges: obtaining a range from an IFrame's selection, reloading the IFrame to destroy the range's context, and calling toString() from a live range on behalf of...

[Read more]

IE9 Information Disclosure (Deadcall): Reading IFrame Location via toString

2010-12-01 :: browser-workshop :: misc

A non-crashing deadcall: caching the location object of an IFrame via valueOf(), letting the user navigate wherever they wished, and then calling location.toString.call(cachedLocation) revealed the...

[Read more]

IE9: Prompt and VBScript InputBox Not Blocked Without User Interaction

2010-12-01 :: browser-workshop :: misc

IE8 blocked prompt() and VBScript's InputBox when called without user interaction, similar to the window.open() popup blocker. IE9 did not apply those restrictions, allowing a page to open...

[Read more]

IE9 UXSS: Location.prototype.replace Intercepts Cross-Origin Frame-Breaking

2010-12-01 :: browser-workshop :: uxss

By overriding Location.prototype.replace on the top-level window, an attacker page could intercept any call to location.replace() made by a framed page — including the common frame-breaking pattern...

[Read more]

IE9 Crash: D3D VMware Driver Fault on Window Open and Navigate

2010-11-11 :: browser-workshop :: dos

Opening a blank window and then navigating it to a real URL caused a crash in the VMware SVGA 3D driver (vm3dum.dll) when IE9 was running inside a VMware virtual machine. The IE WebGraphics team...

[Read more]

Drag-Drop UXSS Attempt (Unfinished)

2010-11-03 :: browser-workshop :: uxss

This was an incomplete attempt at a drag-and-drop UXSS technique. The idea was to trick a user into dragging selected text from a cross-origin IFrame into an attacker-controlled drop target, leaking...

[Read more]

IE9 Crash: Enumerating Properties of a Non-HTML Object Element

2010-11-03 :: browser-workshop :: dos

Enumerating the properties of a reference to an HTML Object element that hosted non-HTML content (XAML, XPS, PDF, etc.) via a for...in loop caused a crash in IE9's JScript9 engine. The crash occurred...

[Read more]

IE9 Information Disclosure: Detecting When the XSS Filter Has Activated

2010-10-29 :: browser-workshop :: misc

Gareth Heyes discovered that comparing the screenTop property before and after triggering a potential XSS could reveal whether the IE XSS filter had activated and shown its yellow InfoBar. When the...

[Read more]

IE9 UXSS: Generate an Error in an IFrame and Grab the Exception Object

2010-10-29 :: browser-workshop :: uxss

Deliberately causing an error inside a cross-origin IFrame and catching the exception gave access to the exception object's constructor chain, which led to the Function constructor of the IFrame's...

[Read more]

IE9 UXSS: Window Members Set in onunload Persist Across Cross-Origin Navigation

2010-10-22 :: browser-workshop :: uxss

Properties set on an IFrame's window object during its onunload event persisted after the IFrame navigated to a different origin. Setting onload in onunload was particularly convenient because the...

[Read more]

IE9: Staying Resident and Capturing Keystrokes via Zombie IFrame and createPopup

2010-10-13 :: browser-workshop :: resident

Combining the IFrame resurrection technique with a createPopup() that attached a keypress event handler made it possible to capture all keystrokes typed anywhere in the browser, even after the...

[Read more]

IE9 UXSS: location.replace with javascript: URL Bypasses Protocol Safety

2010-09-30 :: browser-workshop :: uxss

Calling location.replace() with a javascript: URL on a cross-origin IFrame executed the script in the IFrame's security context. The replace method did not apply the same javascript: protocol block...

[Read more]

IE9 InfoBar Overlay via createPopup

2010-09-28 :: browser-workshop :: misc

The IE9 InfoBar (the yellow notification bar at the top of the content area) could be overlaid by a createPopup() positioned to cover it exactly. This allowed an attacker page to hide security...

[Read more]

IE9 UXSS: Free Access to Non-HTML IFrame Content from Inline Events

2010-09-08 :: browser-workshop :: uxss

When an IFrame loaded an XML feed or other non-HTML content, accessing its document from an inline event handler bypassed the same-origin check that protected it from script in regular functions....

[Read more]

IE9 Crash: Calling document.open on a createPopup Document

2010-09-06 :: browser-workshop :: dos

Calling document.open() on a freshly created popup document caused a PROBABLY_EXPLOITABLE crash in IE9. The popup document was not in a state that supported being re-opened, and the open() call...

[Read more]

IE9 UXSS: location Object Called as a Function Bypasses javascript: Protocol Safety

2010-09-03 :: browser-workshop :: uxss

The location object in IE9 could be called as a function. When called this way with a javascript: URL, it executed the script in the IFrame's context, bypassing the normal javascript: protocol...

[Read more]

UXSS: Cached childNodes Collection Survives Cross-Origin Redirect

2010-09-03 :: browser-workshop :: uxss

Another variant of the cached-collection UXSS family: document.childNodes from a same-origin IFrame remained live after a cross-origin redirect, and its nodes' ownerDocument pointed into the new...

[Read more]

IE9 UXSS: Object.defineProperty Intercepts Cross-Origin Navigation

2010-09-02 :: browser-workshop :: uxss

By defining a setter on window.location using Object.defineProperty, an attacker page could intercept the moment a framed page tried to break out of its frame (a common frame-breaking pattern). At...

[Read more]

IE9 UXSS: Reading Non-HTML IFrame Content from an Inline Event Handler

2010-09-01 :: browser-workshop :: uxss

When an IFrame loaded non-HTML content (such as a .mht MHTML file), accessing its document property was normally blocked. However, doing so from an inline event handler on a button — rather than from...

[Read more]

IE9 UXSS: Getting Function Constructor from a Cached location.replace

2010-08-26 :: browser-workshop :: uxss

Caching the location object of a same-origin IFrame, redirecting it cross-origin, and then calling .replace.constructor() on the cached location object gave access to the Function constructor of the...

[Read more]

IE9 UXSS: Overriding Window Methods or Getting Function via Constructor

2010-08-12 :: browser-workshop :: uxss

Two related techniques for reading cross-origin document content in IE9. The first overrode a method on a cross-origin IFrame's window before the victim page called it; the second obtained a live...

[Read more]

IE9 RCE: Intercepting Internal Dialogs via Object.defineProperty

2010-08-11 :: browser-workshop :: eop-rce

By intercepting a property access that IE's own internal code triggered during a document.execCommand call, and using arguments.callee.caller.constructor to obtain the native Function constructor, it...

[Read more]

IE9 UXSS: document.execCommand InsertImage Injects into Cross-Origin IFrame

2010-08-09 :: browser-workshop :: uxss

Focusing a cross-origin IFrame and then calling document.execCommand from the parent page allowed injecting arbitrary HTML attributes into the IFrame's content via the InsertImage command. The...

[Read more]

IE9 Crash: Getting the Function Object from a Cached Document Method

2010-08-04 :: browser-workshop :: dos

Caching a reference to document.getElementById from an IFrame, reloading the IFrame, and then calling .constructor() on the cached method caused a PROBABLY_EXPLOITABLE crash. The method reference...

[Read more]

IE9 UXSS: Accessing Cross-Origin Content via window.self

2010-07-28 :: browser-workshop :: uxss

Accessing window[0].self on a cross-origin IFrame returned a window reference that bypassed same-origin checks, allowing the attacker page to read the IFrame's document URL and body content directly.

[Read more]

IE9 Referrer Spoofing Enables XSS Filter Bypass

2010-07-28 :: browser-workshop :: address-bar-spoof

The IE9 XSS filter used the HTTP Referer header to determine whether a reflected script came from the same page, and only blocked scripts that appeared to have been injected from outside. By...

[Read more]

IE9 Crash: XML Script Tag Written into an IFrame

2010-07-26 :: browser-workshop :: dos

Writing a <script language="xml"> tag into an IFrame's document caused IE9 to crash with a PROBABLY_EXPLOITABLE rating. The XML script language type was an obscure IE-specific feature, and its...

[Read more]

IE9 Crash: Accessing SVG viewport Property from DOMParser

2010-07-20 :: browser-workshop :: dos

Parsing an SVG document via DOMParser and then accessing the viewport property on the root SVG element caused a crash in IE9. The DOMParser-created document was not a fully initialized rendering...

[Read more]

IE9 Crash: Inline document.write with createPopup in setInterval

2010-07-13 :: browser-workshop :: dos

Repeatedly calling document.write(1) on a freshly created popup via setInterval caused IE9 to crash. The first call worked; the interval kept creating new popups and writing to them, eventually...

[Read more]

IE9 Crash: Accessing Opener Window Object Repeatedly from Modeless Dialog

2010-07-13 :: browser-workshop :: dos

Calling dialogArguments.window in a tight loop from within a modeless dialog caused IE9 to crash with a PROBABLY_EXPLOITABLE rating. The dialogArguments object exposed the opener window, and repeated...

[Read more]

IE9 Zombie Audio Tag Survives Page Navigation

2010-07-06 :: browser-workshop :: misc

An <audio> tag with the autoplay attribute inserted via insertAdjacentHTML continued playing audio even after the page navigated away. The audio element was not torn down with the rest of the...

[Read more]
Page 6 of 11
← Newer 1234567891011 Older →
© 2026 Broken Browser