When an iframe was sandboxed with allow-scripts and allow-top-navigation, assigning a javascript: URL to parent.location was permitted — executing code in the parent's context. Interestingly,...
IE10 EoP: Calling scroll Methods on Behalf of Another Window Crashes Browser
Calling window.scroll, scrollBy, or scrollTo using .call() with a different frame's window as the context caused IE10 to crash with a classification of PROBABLY_EXPLOITABLE.
IE10 DoS: AppCache Fallback with Auto-Refresh Crashes the Browser
Combining an AppCache manifest with a fallback entry and a meta-refresh tag caused IE10 to crash after a few reloads.
IE10 Address Bar Spoof via history.pushState and Reload
The history.pushState API in IE10 Preview 3 did not always refresh the address bar correctly when navigating back and forth. By pushing a redirect URL into the history and immediately reloading, the...
IE10 Sandbox Bypass: Navigating the Parent URL via History Methods
A sandboxed iframe with only allow-scripts is not supposed to be able to change its parent's URL. But any of the history navigation methods — history.back(), history.forward(), history.go() — could...
Persistent Keylogger via iFrame createPopup Survives Navigation
This one surprised me. By injecting an iframe into a newly opened window before it redirected to the target site, and then creating a createPopup from that injected frame, I could attach a keylogger...
Information Disclosure: Local Machine Name Shown in Blocked createPopup Infobar
When a createPopup call was blocked because the tab did not have focus, the Infobar that appeared to notify the user showed the local machine name instead of the URL of the page that triggered the...
IE9 DoS: createPopup with Plugin Crashes on iFrame Navigation
Rendering a Flash (or Silverlight) object inside an iframe's createPopup and then navigating that iframe while the popup was still visible caused IE9 to crash.
Silverlight 5 Security Findings: DoS, EoP, UXSS, and Persistence
During a focused review of Silverlight 5, I came across several interesting issues spanning denial of service, elevation of privilege, cross-origin access, and an unusual persistence technique. These...
MSRC 11355 Patch Bypass via createPopup on Destroyed iFrame
After a patch was issued for a createPopup security issue (MSRC 11355), I found a way to recreate the same effect by taking advantage of a timing window. When an iframe is destroyed by replacing its...
IE10 Sandbox Bypass via Flash GetURL with JavaScript Protocol
After loading, a sandboxed iframe with only allow-scripts could inject a Flash object that used the ActionScript GetURL method to execute JavaScript in the parent window. The Flash call was...
IE10 Sandbox Bypass via Windows Media Player launchURL
A sandboxed iframe restricted to only allow-scripts could open a fully unsandboxed window by inserting a Windows Media Player ActiveX object and calling its launchURL method. The new window opened...
IE10 Sandbox Multiple Flags Bypass via createHTMLDocument
A sandboxed iframe with only allow-scripts set could bypass restrictions on cookie access and same-domain content reads by creating a new document object through...
DoS: Loading an HTC Behavior on a createHTMLDocument Element Crashes IE
Assigning a CSS behavior (.htc file) to an element in a document created with document.implementation.createHTMLDocument crashed the browser.
EoP/RCE: Arbitrary Code Execution via InsertImage Internal Dialog
This was a variation of an earlier internal dialog elevation bug that still worked after the initial patch. By overriding removeAttribute on an element before calling...
UXSS: VBScript Error Bubbles Up to Expose Cross-Origin Constructor
This is a VBScript variant of a technique I explored with JavaScript errors. When a cross-origin iframe calls execScript with a VBScript block that attempts to access the parent window, the resulting...
XSS Filter Bypass by Spoofing the Referrer on Reload
The XSS filter in IE correctly blocks a reflected XSS attempt when it can see that the referrer matches the attacker's origin. This bypass exploited a subtle behavior: when a main page is reloaded,...
TP58 Drag and Drop Cross-Origin Bypass
This set of test cases explored whether content from a cross-origin iframe could be dragged and dropped into an editable element in the parent page. The baseline case showed that dragging XML content...
IE10 DoS: Dragging XML Content Crashes the Browser
This was a lucky strike — the crash stumbled upon me while I was testing something else entirely. Dragging text out of an <input> or <textarea> element inside an XML file caused IE10 Preview 2 to...
IE10 Sandbox Bypass via navigate.call(parent) with JavaScript Protocol
Similar to the window.open.call(parent) technique I found earlier, this variation used the navigate method with a javascript: URL called on behalf of the parent to execute arbitrary code in the...
IE10 Sandbox Multiple Flags Bypass via HTML Object Tag
Even with only allow-scripts enabled and all other sandbox flags absent, a sandboxed iframe could break out of all restrictions by injecting an HTML <object> element with type="text/html" after the...
IE10 Sandbox allow-same-origin Bypass via XML Island
A sandboxed iframe with only allow-scripts set is supposed to be unable to load or read same-domain content — XMLHttpRequest is correctly blocked. But the old IE-specific <xml> island element, when...
IE10 Sandbox Bypass via SVG JavaScript xLink
I was lucky to find this one. A fully sandboxed iframe — no flags at all — could execute JavaScript in the parent window simply by embedding an SVG file with a javascript: xlink targeting _parent....
IE10 Sandbox ms-allow-popups Bypass
While looking at the IE10 sandbox flags, I found two ways to open new windows from a sandboxed iframe even when ms-allow-popups was not set. Both techniques worked even across origins, which made...
IE10 Workers Load Redirected URL (Cross-Origin)
The W3C spec requires Web Workers to be same-origin, and IE10 Preview 2 enforced that correctly — until I tried using a server-side redirect. A worker created from a same-origin URL that immediately...
UXSS: Mixing Document Mode Across Tridents Using MHT
This one surprised me. By embedding an MHT file that forced a lower document mode (IE7 emulation) and then placing a cross-origin iframe inside it, I found that errors triggered when the inner frame...
IE10 Sandbox Bypass Using a Window as a Bridge
After playing around with the IE10 sandbox for a while, I noticed that a fully sandboxed iframe could be used as a stepping stone to access the parent DOM through a modeless dialog. The trick was to...
IE9: Bypassing iFrame security=restricted via XML Stylesheet
The security="restricted" attribute on an iFrame is supposed to prevent any script execution inside it. I found that loading an XML document with an external XSL stylesheet inside such a restricted...
DoS: Silverlight Content Object Cached Across Page Reload
I was exploring whether the cached-object pattern that worked with Flash and iframe Document references also applied to Silverlight plugin objects. It did, and with an interesting twist: caching the...
X-Frame-Options Header Bypass via XML Stylesheet
The X-Frame-Options header is supposed to prevent a page from being embedded in an iFrame on another domain. I found that loading XML content inside an iFrame and referencing the protected URL as the...
IE9 DoS: Executing a Script in a Cached HTC Document After It Is Destroyed
This crash involved HTC (HTML Component) files and their cached document objects. By saving a reference to an HTC document, changing the behavior URL to destroy the cached document, and then...
Drag-Jacking: Capturing Cross-Domain Data via a Drag-and-Drop Game
This one was interesting to put together. The idea is to disguise a cross-origin drag-and-drop data capture as a fun basketball game. A transparent textarea sits over the game area, and when the user...
IE9/IE10: History Sniffing via Copy-Paste Color Change
This was a novel history-sniffing technique that used the clipboard rather than CSS color measurements. When you select part of a hyperlink's text and paste it back onto itself inside a visited link,...
UXSS: Caching the ActiveXObject Constructor Across a Redirect
This UXSS worked by saving a reference to the ActiveXObject constructor inside an iFrame before it redirected to a target domain, and then using that cached constructor after the redirect to create...
Pseudo-UXSS: external.returnValue Shared Across Domains in Modal Dialogs
This is what I would call a cooperative or pseudo-UXSS: both parties need to be set up for it to work, so it requires the attacker to control at least part of the modal dialog's content. The...
UXSS: createElement Cached Reference Survives Redirect
Another variation on the cached-reference UXSS theme. This time the object that survives navigation is a plain DOM element created with createElement. After inserting the element into the window's...
IE9 EoP: Crashing the Browser by Resizing a Persistent createPopup
After discovering that persistent createPopup windows survive navigation, I found that trying to resize one manually would crash the browser. The popup shown before the redirect has resize handles...
IE9 Crash: Resizing a createPopup Belonging to a Dead IFrame
By opening a modeless dialog from within an IFrame, saving a pointer back to the IFrame, and then reloading the main window (which destroyed the IFrame), the modeless dialog could create a...
IE9: Persistent createPopup Acts as a Keylogger Across Navigation
Building on the earlier resident-popup findings, I put together a demonstration showing that a createPopup created before a redirect can capture keystrokes typed into the redirected page. The popup...
EoP: Destroying an htmlFile Reference While Its Trident Is Refreshing
This crash was surprisingly compact. Creating an htmlFile ActiveXObject, initializing its Trident with open()/close(), executing a Refresh command, and then immediately deleting the reference caused...
IE8: User Style Sheet Bug Crashes on SELECT Element Expansion
This was an exploitable crash triggered by a user style sheet interaction with a SELECT element. Simply expanding a dropdown SELECT widget on a page that had a particular style sheet applied would...
EoP: Windows Media Player launchURL Crash via Intentional Failure
This crash required an unusual setup: the Windows Media Player control in an iFrame on a different domain from the top window, calling launchURL repeatedly in a way that would always fail to...
WMP Popup Blocker Bypass via scriptcommand in WMV or launchURL
The Windows Media Player ActiveX control had two ways to open a URL that both bypassed IE's popup blocker: a scriptcommand embedded inside a WMV file, and the launchURL method called directly from...
Resident Cached createPopup Document Survives Redirect
This is a variant of the cached-object redirect pattern. Instead of caching a collection like styleSheets, I saved a reference to a createPopup document object before the containing window redirected...
UXSS: Cached document.styleSheets and document.selection Survive Redirect
This UXSS relied on the fact that certain live collections returned by the DOM — specifically document.styleSheets and document.selection — remain valid and readable after the window they came from...
IE9 DoS: Object.defineProperty Crashes the Properties Dialog
This was a simple interaction between Object.defineProperty and IE's context-menu Properties dialog. Redefining documentElement on an iFrame's document via a getter, and then asking IE to show the...
IE9 EoP: Arbitrary Code Execution via Internal InsertImage Dialog
This was a creative path to code execution. IE's internal InsertImage dialog (invoked via document.execCommand("InsertImage", ...)) uses removeAttribute on image elements to clean up after itself. By...
IE9: createPopup Inside a XAML Frame Covers the Entire Screen
This was a UI containment issue. A createPopup created from inside an HTML frame embedded in a XAML document is not constrained to the browser window — it can be sized to cover the entire screen....
IE9 EoP: Execute Window Method After the Page Has Navigated Away
Timing was the critical element here. By saving a reference to window inside an iFrame, immediately navigating the iFrame away, and then calling a method on the saved reference inside a try/catch,...
IE9 EoP: Execute Window Method After Page Has Gone (Variant)
Found during my years at Microsoft (2006–2014). These bugs were patched long ago — shared here as a historical record for learning purposes.