Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Untrusted Types for DevTools

Untrusted Types is a Chrome extension that abuses Trusted Types to log DOMXSS sinks.

Untrusted Types for DevTools


Using npm

  1. Clone the repository
  2. Install dependencies: npm i
  3. Build the project: npm run build
  4. Go to chrome://extensions, enable Developer mode
  5. Load unpacked, choose the public folder

Chrome Web Store

Prebuilt version

If the project is failing to build for some reason, you can download the prebuilt version from the Releases page.

  1. Download and extract the archive
  2. Go to chrome://extensions, enable Developer mode
  3. Load unpacked, choose the extracted folder


Discover and test inputs passed into sinks that could lead to DOM XSS vulnerabilities.

A sink is a code pattern that could run arbitrary JavaScript code if the input is malicious, for example: innerHTML, eval, document.write.

Keywords (by default d0mxss) that are found to be passed in a sink will be highlighted in the extension and the console.

A simple tutorial:

To find the stack trace of a specific log:

  1. Copy the ID by clicking on it,
  2. Open Console>Filter and paste the ID,
  3. Now you can inspect the stack trace. Click on the function name to open it in the Sources tab.

The original version was made by filedescriptor. This version extends it by adding a DevTools panel that allows for easier filtering/searching of found sinks.


You can edit settings directly in the extension: Settings

Limitation & Known Issues

  1. While it covers a majority of sinks, it doesn't cover navigation sinks like location = user_input unless it's location = 'javascript:' + user_input.
  2. It doesn't work in websites that are already using Trusted Types. This is not a problem for now because even Google themselves don't use it a lot
  3. If console logs are not showing the stack trace, refresh the page.
  4. It will fail on web pages with <iframe src="javascript:..."> (but fine if dynamically inserted). Check issue #1
  5. It will fail in web workers using importScripts(). Check issue #7

Based on