One line of HTML fires a real HTTP request in current Chrome. The request reaches the server. It does not appear in DevTools' Network tab. It emits no CSP violation event. Nothing in report-uri...
Welcome to Broken Browser
A lab where browsers are broken on purpose, bots are studied like insects, and the findings surprise nobody more than the researcher.
Detecting Chrome Extensions Without Console Noise
If you read the previous post about detecting Edge extensions, you already know the general idea: extensions expose resources at predictable URLs, and a page can try to load them to figure out what...
Building a High-Resolution Timer from WebAssembly.Memory
Not a vulnerability — just something I stumbled onto while poking at WebAssembly. One line of JavaScript on a page that has no special headers gives you a working SharedArrayBuffer, and from there...
Revealing the content of the address bar (IE)
Hello fellow bug hunter! Today we are going back to Internet Explorer which despite getting old, tons people still use it. I am much happier with MSRC lately, they are really moving forward regarding...
SOP bypass / UXSS - Stealing Credentials Pretty Fast (Edge)
Today we are going to steal Twitter and Facebook credentials from the user. The previous two SOP bypasses [[1]](../2017-04-17-sop-bypass-abusing-read-protocol/)...
SOP bypass / UXSS - Tweeting like Charles Darwin (Edge)
Watch the 2 minutes exploit video where we manually tweet as if we were Charles Darwin, and get his password (thanks to the default password manager of Microsoft Edge). If you are out of time, watch...
SOP bypass courtesy of the reading mode (Edge)
The Microsoft Edge team recently tweeted about the reading mode, a feature that removes the clutter from webpages to read without distractions. It was not new to me, I learned about it when I was...
Detecting Installed Extensions (Edge)
Attackers love being able to fingerprint their victims. We've seen in the past two techniques that allowed attackers to detect the presence of particular files (to evade analysts) and even get the...
Defeating the popUp blocker, the XSS filter and SuperNavigate with our fake ticket to the Intranet Zone (Edge)
Last year we explored the domainless blank technique to create UXSS/SOP bypasses on both Microsoft Edge and Internet Explorer. The Edge version has been recently patched but unfortunately the fix...
Referrer spoofing with iframe injection (Edge)
Last year we've been playing with a very simple method to spoof the referrer on Edge, which allowed us of course to spoof the referrer and -as a bonus- other neat things like bypass the XSS filter.
SOP bypass / UXSS - More Adventures in a Domainless World (IE)
A few months ago we've been playing with domainless about:blank pages on Edge. Essentially, a powerful about:blank document was capable of accessing every domain without restrictions. It was recently...
Bypassing the patch to keep spoofing the Smartscreen/Malware warning (Edge)
Yesterday, Microsoft pushed a gigantic update where tons of security bugs were fortunately killed, including most ones from this website. Kudos, big kudos to the Edge developers and everyone involved...
The Attack of the Alerts and the Zombie Script (IE)
In our previous post we found a way to UXSS (bypass the SOP policy) using the htmlFile/ActiveXObject, however, I mentioned that there were other interesting things to do using that same object. Have...
SOP bypass / UXSS htmlFile in IFrame (IE)
Today we are going to explore a feature that has been present on Internet Explorer almost since its inception. A feature that allows web-developers to instantiate external objects, and because of...
SOP bypass / UXSS - Adventures in a Domainless World (Edge)
Today we are going to walk around a few design issues that, when used together, will end up in a full SOP bypass or Universal Cross Site Scripting (UXSS) on Microsoft Edge. If you are not a security...
Spoofing the address bar and the SmartScreen/Malware Warning (Edge)
Update: this bug was patched on 2017-03-14 but we found a bypass the same day. Here it is: Bypassing the patch to continue spoofing the address bar and the Malware Warning.
Abusing of Protocols to Load Local Files, bypass the HTML5 Sandbox and Open Popups (Edge)
On October 25th, the fellows @MSEdgeDev twitted a link that called my attention because when I clicked on it (being on Chrome) the Windows Store App opened. It might not surprise you, but it...
Bypassing Mixed Content Warnings - Loading Insecure Content in Secure Pages (Edge/IE)
There are no doubts that the web is moving forward to HTTPS (secure) content. Most important names have today their certificates ready and their websites are in effect, secure. But have you ever...
Detecting Local Files to Evade Analysts (IE)
Last month we've been looking at how attackers were targeting unsavvy users by checking the associated mimeTypes to applications on the system. If the PC had analyst tools installed, something...
On Patching Security Bugs
Hello fellow bug hunter!
Workers SOP Bypass importScripts and baseHref (Edge/IE)
As we know, all browsers impose several restrictions when trying to access resources from different origins. Of course we can play music and render images coming from different domains but thanks to...
Detecting analysts before installing the malware (IE)
With the help of a beautiful piece of code, malware authors can detect installed applications straight from within the browser and serve the bad bits only to unsavvy users. In other words, attackers...
Referer spoofing and defeating the XSS filter (Edge/IE)
According to Wikipedia, "Referer spoofing is the sending of incorrect referer information in an HTTP request in order to prevent a website from obtaining accurate data on the identity of the web page...
CSS History Leak or "I know where you've been" (Edge)
Hello fellow bug hunter!
Grabbing data from Inputs and Textareas (Edge/IE)
Both Microsoft Edge and Internet Explorer suffer from navigation problems, failing to keep up with the most updated history information. A framed navigation confuses these browsers and what seems to...
Capturing Address Bar Input via createPopup and onbeforeunload
This one surprised me. By combining createPopup with an onbeforeunload handler, a page could learn the exact URL the user typed in the address bar the moment they pressed Enter — before the browser...
Spoofing the User's Saved Webpage via pushState + Server Redirect
Calling history.pushState to change the displayed URL to a redirect page, then having the user save the page with Ctrl+S, caused IE to save the redirect's destination — not the current page content —...
UXSS: Injected iFrame + Server Redirect + javascript: Location
Inserting an iFrame pointing to a server-redirect page, caching a reference to top from inside the iFrame's setTimeout, and then assigning a javascript: URL to the iFrame's contentWindow.location...
Persistent Browser Zoom-Out via ExecWB OLECMDID_OPTICAL_ZOOM
Calling ExecWB with the optical zoom command ID and persistence flag from a hidden iFrame set the browser's zoom to 10% — persistently, across all tabs and even after closing and reopening the...
mhtml: Protocol Loads Local Zip Files Without Warnings
Loading a local zip file twice in an iFrame using the mhtml: protocol caused IE to render the zip's contents as browsable files — and if the zip contained executables placed inside a subfolder,...
UXSS: htmlFile ActiveX + about:blank Meta-Refresh + Link Click
A streamlined variant of the htmlFile about:blank UXSS — no new windows or server redirects needed. Loading a target site in an iFrame, navigating its nested iFrame to about:blank via a meta-refresh...
Resident Script Execution via Cached iFrame window.open
Caching the open method from an iFrame's window object and then navigating away preserved a reference that could load arbitrary content into that invisible iFrame regardless of where the user browsed...
Resident Script Execution via HTML Object Element and createPopup
Creating an <object type="text/html"> element via createElement (without appending it to the DOM), navigating the main page away, and then calling createPopup on the object's window kept a...
UXSS: X-Content-Security-Policy Sandbox + Cached window.open + xml Script Tag
This was a two-stage UXSS. The first bug: a page running in docMode 8 with an empty <script language="xml"> tag had its window.open method accessible even after navigating to a URL protected by...
Pop-up Blocker Bypass via Local base href
Setting <base href> to a local path (c:\) bypassed IE's pop-up blocker entirely. Windows opened via window.open after a setTimeout — which should have been blocked as unsolicited pop-ups — were...
base href file:// Bypasses IE Protected Mode Integrity Level
Setting a <base href> to a local file:// path and then calling window.open with a relative filename opened the local file in a new tab running at Medium integrity — not the Low integrity level that...
UXSS: iFrame javascript: URI Executes in base href Origin
The iFrame variant of the base href UXSS: loading a cross-origin URL inside a named iFrame and then calling window.open("javascript:...", iFrameName) executed the script in that iFrame's security...
UXSS: New Window javascript: URI Executes in base href Origin
Setting a <base href> to a target origin and then opening a javascript: URL into a named window that held a page from that origin executed the script in the target's security context. The base href...
Spoofing the Info Bar Pop-up Origin via base href
A simpler variant of the pop-up origin spoof: placing a <base href> pointing to a trusted domain and then calling window.open() caused the IE info bar to display that trusted domain as the source of...
DoS: execCommand EditMode from HTC Behavior File
Calling document.execCommand("EditMode") from inside an HTC behavior file crashed IE11 with a null read in MSHTML!COmWindowProxy::Markup. Classified PROBABLY_NOT_EXPLOITABLE.
Content Injection on Sites with Named iFrames via Flash GetURL
Flash's getURL method allowed navigation of named frames in any open window — including cross-origin iFrames in other tabs. Sites that embedded third-party content in named iFrames (which was nearly...
DoS: WMP Object Inside createPopup, Hidden Immediately
Loading a Windows Media Player <object> inside a createPopup document and hiding the popup during the same load cycle caused a null read in MSHTML!CFakeUIWindow::SetBorderSpace. Classified...
DoS: Windows Media Player launchURL from Cross-Origin iFrame
Calling the WMP launchURL method repeatedly from a cross-origin iFrame crashed IE11 with a null read in MSHTML!CElement::IsFullScreenAvailable. Classified PROBABLY_NOT_EXPLOITABLE, this appeared to...
Spoofing the Blocked Pop-up Origin via WebBrowser Navigate
When IE blocks a pop-up, it displays an info bar that names the originating site — for example, "IE blocked a pop-up from evil.com". The intent is to let users make an informed decision about whether...
EoP: PROBABLY_EXPLOITABLE Crash via Rapid RSS/HTML iFrame Switching
Rapidly alternating an iFrame between an RSS XML file and about:blank at 100ms intervals crashed IE11 in IEFRAME!CFeedViewer::_HandleZoomChange. The crash was classified PROBABLY_EXPLOITABLE — the...
DoS: Accessing Cached Element Collection After Page Redirect
Caching a reference to document.images from a newly opened window, then accessing an element from that collection after the window redirected to a new page, caused a crash in...
typeof Checks Cross-Origin Variable Existence via 'unknown' Return Value
A companion to the ACCESS_DENIED exception method: in IE, typeof applied to a cross-origin iFrame property returns "unknown" when the property exists (because the engine recognizes it but can't...
DocMode 8: Checking Cross-Origin Variable Existence via ACCESS_DENIED
In IE's document compatibility mode 8, accessing a property on a cross-origin iFrame's window normally throws an ACCESS_DENIED exception — but only when the property actually exists. When the...
UXSS: Free Code Execution in the res:// Domain via InsertImage
This one surprised me. By overriding the removeAttribute method on a specific image element and then triggering execCommand("InsertImage"), code could be executed in the context of the res:// domain...
UXSS via iFrame document Cached in modelessDialog returnValue
This was a simplified variant of the modelessDialog external-object UXSS. Rather than using the external object, it stored the iFrame's document directly in window.returnValue — a property that...