Skip to content

Add PotentiallyUnguardedProtocolHandler query for Java and C++ - #32

Open
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle
Open

Add PotentiallyUnguardedProtocolHandler query for Java and C++#32
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle

Conversation

@ex0dus-0x

@ex0dus-0xex0dus-0x commented Dec 17, 2025

Copy link
Copy Markdown
Contributor

This a multi-language query that attempts to model CVE-2022-43550 for desktop apps that employ protocol handling on untrusted URLs through a variety of mechanisms. If no sanitization/guards are introduced, then links with arbitrary protocols (eg. smb:// and some-custom-vuln-handler://) can be supplied to trigger unintended actions against a user that clicks.

Languages and frameworks supported:

  • C/C++
    • Generic shell invoction through rundll32 url.dll,FileProtocolHandler, xdg-open and open for their respective platforms
    • Qt's QDesktopServices::openUrl
  • Java
    • Generic sell invocation
    • Desktop.browse()


public void bad1(HttpServletRequest request) throws IOException, URISyntaxException {
String url = request.getParameter("url");
Desktop.getDesktop().browse(new URI(url));

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
String url = request.getParameter("url");
URI uri = new URI(url);
if (uri.getScheme().equals("https") || uri.getScheme().equals("http")) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).

// Weak check - only checks if scheme exists, not what it is
if (uri.getScheme() != null) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
public void bad6_rundll32(HttpServletRequest request) throws IOException {
String url = request.getParameter("url");
// ProcessBuilder with list
ProcessBuilder pb = new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url);

Check failure

Code scanning / CodeQL

Uncontrolled command line

This command line depends on a [user-provided value](1).
@ex0dus-0xex0dus-0x changed the title Add PotentiallyUnguardedProtocolHandler query for JavaAdd PotentiallyUnguardedProtocolHandler query for Java and C++Dec 17, 2025
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from c3d12d8 to 3275b0dCompareJanuary 2, 2026 17:49
@ex0dus-0x
ex0dus-0x marked this pull request as ready for review January 8, 2026 14:29
Comment threadcpp/test/query-tests/security/PotentiallyUnguardedProtocolHandler/test.cpp Outdated
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from 29a9a76 to e0d42d1CompareApril 6, 2026 18:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ex0dus-0x@GrosQuildu@github-advanced-security@kumarak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Add PotentiallyUnguardedProtocolHandler query for Java and C++ by ex0dus-0x · Pull Request #32 · trailofbits/codeql-queries · GitHub
Skip to content

Add PotentiallyUnguardedProtocolHandler query for Java and C++ - #32

Open
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle
Open

Add PotentiallyUnguardedProtocolHandler query for Java and C++#32
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle

Conversation

@ex0dus-0x

@ex0dus-0xex0dus-0x commented Dec 17, 2025

Copy link
Copy Markdown
Contributor

This a multi-language query that attempts to model CVE-2022-43550 for desktop apps that employ protocol handling on untrusted URLs through a variety of mechanisms. If no sanitization/guards are introduced, then links with arbitrary protocols (eg. smb:// and some-custom-vuln-handler://) can be supplied to trigger unintended actions against a user that clicks.

Languages and frameworks supported:

  • C/C++
    • Generic shell invoction through rundll32 url.dll,FileProtocolHandler, xdg-open and open for their respective platforms
    • Qt's QDesktopServices::openUrl
  • Java
    • Generic sell invocation
    • Desktop.browse()


public void bad1(HttpServletRequest request) throws IOException, URISyntaxException {
String url = request.getParameter("url");
Desktop.getDesktop().browse(new URI(url));

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
String url = request.getParameter("url");
URI uri = new URI(url);
if (uri.getScheme().equals("https") || uri.getScheme().equals("http")) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).

// Weak check - only checks if scheme exists, not what it is
if (uri.getScheme() != null) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
public void bad6_rundll32(HttpServletRequest request) throws IOException {
String url = request.getParameter("url");
// ProcessBuilder with list
ProcessBuilder pb = new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url);

Check failure

Code scanning / CodeQL

Uncontrolled command line

This command line depends on a [user-provided value](1).
@ex0dus-0xex0dus-0x changed the title Add PotentiallyUnguardedProtocolHandler query for JavaAdd PotentiallyUnguardedProtocolHandler query for Java and C++Dec 17, 2025
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from c3d12d8 to 3275b0dCompareJanuary 2, 2026 17:49
@ex0dus-0x
ex0dus-0x marked this pull request as ready for review January 8, 2026 14:29
Comment threadcpp/test/query-tests/security/PotentiallyUnguardedProtocolHandler/test.cpp Outdated
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from 29a9a76 to e0d42d1CompareApril 6, 2026 18:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ex0dus-0x@GrosQuildu@github-advanced-security@kumarak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add PotentiallyUnguardedProtocolHandler query for Java and C++ by ex0dus-0x · Pull Request #32 · trailofbits/codeql-queries · GitHub
Skip to content

Add PotentiallyUnguardedProtocolHandler query for Java and C++ - #32

Open
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle
Open

Add PotentiallyUnguardedProtocolHandler query for Java and C++#32
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle

Conversation

@ex0dus-0x

@ex0dus-0xex0dus-0x commented Dec 17, 2025

Copy link
Copy Markdown
Contributor

This a multi-language query that attempts to model CVE-2022-43550 for desktop apps that employ protocol handling on untrusted URLs through a variety of mechanisms. If no sanitization/guards are introduced, then links with arbitrary protocols (eg. smb:// and some-custom-vuln-handler://) can be supplied to trigger unintended actions against a user that clicks.

Languages and frameworks supported:

  • C/C++
    • Generic shell invoction through rundll32 url.dll,FileProtocolHandler, xdg-open and open for their respective platforms
    • Qt's QDesktopServices::openUrl
  • Java
    • Generic sell invocation
    • Desktop.browse()


public void bad1(HttpServletRequest request) throws IOException, URISyntaxException {
String url = request.getParameter("url");
Desktop.getDesktop().browse(new URI(url));

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
String url = request.getParameter("url");
URI uri = new URI(url);
if (uri.getScheme().equals("https") || uri.getScheme().equals("http")) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).

// Weak check - only checks if scheme exists, not what it is
if (uri.getScheme() != null) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
public void bad6_rundll32(HttpServletRequest request) throws IOException {
String url = request.getParameter("url");
// ProcessBuilder with list
ProcessBuilder pb = new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url);

Check failure

Code scanning / CodeQL

Uncontrolled command line

This command line depends on a [user-provided value](1).
@ex0dus-0xex0dus-0x changed the title Add PotentiallyUnguardedProtocolHandler query for JavaAdd PotentiallyUnguardedProtocolHandler query for Java and C++Dec 17, 2025
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from c3d12d8 to 3275b0dCompareJanuary 2, 2026 17:49
@ex0dus-0x
ex0dus-0x marked this pull request as ready for review January 8, 2026 14:29
Comment threadcpp/test/query-tests/security/PotentiallyUnguardedProtocolHandler/test.cpp Outdated
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from 29a9a76 to e0d42d1CompareApril 6, 2026 18:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ex0dus-0x@GrosQuildu@github-advanced-security@kumarak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add PotentiallyUnguardedProtocolHandler query for Java and C++ by ex0dus-0x · Pull Request #32 · trailofbits/codeql-queries · GitHub
Skip to content

Add PotentiallyUnguardedProtocolHandler query for Java and C++ - #32

Open
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle
Open

Add PotentiallyUnguardedProtocolHandler query for Java and C++#32
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle

Conversation

@ex0dus-0x

@ex0dus-0xex0dus-0x commented Dec 17, 2025

Copy link
Copy Markdown
Contributor

This a multi-language query that attempts to model CVE-2022-43550 for desktop apps that employ protocol handling on untrusted URLs through a variety of mechanisms. If no sanitization/guards are introduced, then links with arbitrary protocols (eg. smb:// and some-custom-vuln-handler://) can be supplied to trigger unintended actions against a user that clicks.

Languages and frameworks supported:

  • C/C++
    • Generic shell invoction through rundll32 url.dll,FileProtocolHandler, xdg-open and open for their respective platforms
    • Qt's QDesktopServices::openUrl
  • Java
    • Generic sell invocation
    • Desktop.browse()


public void bad1(HttpServletRequest request) throws IOException, URISyntaxException {
String url = request.getParameter("url");
Desktop.getDesktop().browse(new URI(url));

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
String url = request.getParameter("url");
URI uri = new URI(url);
if (uri.getScheme().equals("https") || uri.getScheme().equals("http")) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).

// Weak check - only checks if scheme exists, not what it is
if (uri.getScheme() != null) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
public void bad6_rundll32(HttpServletRequest request) throws IOException {
String url = request.getParameter("url");
// ProcessBuilder with list
ProcessBuilder pb = new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url);

Check failure

Code scanning / CodeQL

Uncontrolled command line

This command line depends on a [user-provided value](1).
@ex0dus-0xex0dus-0x changed the title Add PotentiallyUnguardedProtocolHandler query for JavaAdd PotentiallyUnguardedProtocolHandler query for Java and C++Dec 17, 2025
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from c3d12d8 to 3275b0dCompareJanuary 2, 2026 17:49
@ex0dus-0x
ex0dus-0x marked this pull request as ready for review January 8, 2026 14:29
Comment threadcpp/test/query-tests/security/PotentiallyUnguardedProtocolHandler/test.cpp Outdated
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from 29a9a76 to e0d42d1CompareApril 6, 2026 18:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ex0dus-0x@GrosQuildu@github-advanced-security@kumarak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Add PotentiallyUnguardedProtocolHandler query for Java and C++ by ex0dus-0x · Pull Request #32 · trailofbits/codeql-queries · GitHub
Skip to content

Add PotentiallyUnguardedProtocolHandler query for Java and C++ - #32

Open
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle
Open

Add PotentiallyUnguardedProtocolHandler query for Java and C++#32
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle

Conversation

@ex0dus-0x

@ex0dus-0xex0dus-0x commented Dec 17, 2025

Copy link
Copy Markdown
Contributor

This a multi-language query that attempts to model CVE-2022-43550 for desktop apps that employ protocol handling on untrusted URLs through a variety of mechanisms. If no sanitization/guards are introduced, then links with arbitrary protocols (eg. smb:// and some-custom-vuln-handler://) can be supplied to trigger unintended actions against a user that clicks.

Languages and frameworks supported:

  • C/C++
    • Generic shell invoction through rundll32 url.dll,FileProtocolHandler, xdg-open and open for their respective platforms
    • Qt's QDesktopServices::openUrl
  • Java
    • Generic sell invocation
    • Desktop.browse()


public void bad1(HttpServletRequest request) throws IOException, URISyntaxException {
String url = request.getParameter("url");
Desktop.getDesktop().browse(new URI(url));

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
String url = request.getParameter("url");
URI uri = new URI(url);
if (uri.getScheme().equals("https") || uri.getScheme().equals("http")) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).

// Weak check - only checks if scheme exists, not what it is
if (uri.getScheme() != null) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
public void bad6_rundll32(HttpServletRequest request) throws IOException {
String url = request.getParameter("url");
// ProcessBuilder with list
ProcessBuilder pb = new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url);

Check failure

Code scanning / CodeQL

Uncontrolled command line

This command line depends on a [user-provided value](1).
@ex0dus-0xex0dus-0x changed the title Add PotentiallyUnguardedProtocolHandler query for JavaAdd PotentiallyUnguardedProtocolHandler query for Java and C++Dec 17, 2025
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from c3d12d8 to 3275b0dCompareJanuary 2, 2026 17:49
@ex0dus-0x
ex0dus-0x marked this pull request as ready for review January 8, 2026 14:29
Comment threadcpp/test/query-tests/security/PotentiallyUnguardedProtocolHandler/test.cpp Outdated
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from 29a9a76 to e0d42d1CompareApril 6, 2026 18:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ex0dus-0x@GrosQuildu@github-advanced-security@kumarak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add PotentiallyUnguardedProtocolHandler query for Java and C++ by ex0dus-0x · Pull Request #32 · trailofbits/codeql-queries · GitHub
Skip to content

Add PotentiallyUnguardedProtocolHandler query for Java and C++ - #32

Open
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle
Open

Add PotentiallyUnguardedProtocolHandler query for Java and C++#32
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle

Conversation

@ex0dus-0x

@ex0dus-0xex0dus-0x commented Dec 17, 2025

Copy link
Copy Markdown
Contributor

This a multi-language query that attempts to model CVE-2022-43550 for desktop apps that employ protocol handling on untrusted URLs through a variety of mechanisms. If no sanitization/guards are introduced, then links with arbitrary protocols (eg. smb:// and some-custom-vuln-handler://) can be supplied to trigger unintended actions against a user that clicks.

Languages and frameworks supported:

  • C/C++
    • Generic shell invoction through rundll32 url.dll,FileProtocolHandler, xdg-open and open for their respective platforms
    • Qt's QDesktopServices::openUrl
  • Java
    • Generic sell invocation
    • Desktop.browse()


public void bad1(HttpServletRequest request) throws IOException, URISyntaxException {
String url = request.getParameter("url");
Desktop.getDesktop().browse(new URI(url));

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
String url = request.getParameter("url");
URI uri = new URI(url);
if (uri.getScheme().equals("https") || uri.getScheme().equals("http")) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).

// Weak check - only checks if scheme exists, not what it is
if (uri.getScheme() != null) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
public void bad6_rundll32(HttpServletRequest request) throws IOException {
String url = request.getParameter("url");
// ProcessBuilder with list
ProcessBuilder pb = new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url);

Check failure

Code scanning / CodeQL

Uncontrolled command line

This command line depends on a [user-provided value](1).
@ex0dus-0xex0dus-0x changed the title Add PotentiallyUnguardedProtocolHandler query for JavaAdd PotentiallyUnguardedProtocolHandler query for Java and C++Dec 17, 2025
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from c3d12d8 to 3275b0dCompareJanuary 2, 2026 17:49
@ex0dus-0x
ex0dus-0x marked this pull request as ready for review January 8, 2026 14:29
Comment threadcpp/test/query-tests/security/PotentiallyUnguardedProtocolHandler/test.cpp Outdated
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from 29a9a76 to e0d42d1CompareApril 6, 2026 18:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ex0dus-0x@GrosQuildu@github-advanced-security@kumarak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add PotentiallyUnguardedProtocolHandler query for Java and C++ by ex0dus-0x · Pull Request #32 · trailofbits/codeql-queries · GitHub
Skip to content

Add PotentiallyUnguardedProtocolHandler query for Java and C++ - #32

Open
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle
Open

Add PotentiallyUnguardedProtocolHandler query for Java and C++#32
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle

Conversation

@ex0dus-0x

@ex0dus-0xex0dus-0x commented Dec 17, 2025

Copy link
Copy Markdown
Contributor

This a multi-language query that attempts to model CVE-2022-43550 for desktop apps that employ protocol handling on untrusted URLs through a variety of mechanisms. If no sanitization/guards are introduced, then links with arbitrary protocols (eg. smb:// and some-custom-vuln-handler://) can be supplied to trigger unintended actions against a user that clicks.

Languages and frameworks supported:

  • C/C++
    • Generic shell invoction through rundll32 url.dll,FileProtocolHandler, xdg-open and open for their respective platforms
    • Qt's QDesktopServices::openUrl
  • Java
    • Generic sell invocation
    • Desktop.browse()


public void bad1(HttpServletRequest request) throws IOException, URISyntaxException {
String url = request.getParameter("url");
Desktop.getDesktop().browse(new URI(url));

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
String url = request.getParameter("url");
URI uri = new URI(url);
if (uri.getScheme().equals("https") || uri.getScheme().equals("http")) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).

// Weak check - only checks if scheme exists, not what it is
if (uri.getScheme() != null) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
public void bad6_rundll32(HttpServletRequest request) throws IOException {
String url = request.getParameter("url");
// ProcessBuilder with list
ProcessBuilder pb = new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url);

Check failure

Code scanning / CodeQL

Uncontrolled command line

This command line depends on a [user-provided value](1).
@ex0dus-0xex0dus-0x changed the title Add PotentiallyUnguardedProtocolHandler query for JavaAdd PotentiallyUnguardedProtocolHandler query for Java and C++Dec 17, 2025
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from c3d12d8 to 3275b0dCompareJanuary 2, 2026 17:49
@ex0dus-0x
ex0dus-0x marked this pull request as ready for review January 8, 2026 14:29
Comment threadcpp/test/query-tests/security/PotentiallyUnguardedProtocolHandler/test.cpp Outdated
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from 29a9a76 to e0d42d1CompareApril 6, 2026 18:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ex0dus-0x@GrosQuildu@github-advanced-security@kumarak
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Add PotentiallyUnguardedProtocolHandler query for Java and C++ by ex0dus-0x · Pull Request #32 · trailofbits/codeql-queries · GitHub
Skip to content

Add PotentiallyUnguardedProtocolHandler query for Java and C++ - #32

Open
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle
Open

Add PotentiallyUnguardedProtocolHandler query for Java and C++#32
ex0dus-0x wants to merge 11 commits into
mainfrom
alan/untrusted-protocol-handle

Conversation

@ex0dus-0x

@ex0dus-0xex0dus-0x commented Dec 17, 2025

Copy link
Copy Markdown
Contributor

This a multi-language query that attempts to model CVE-2022-43550 for desktop apps that employ protocol handling on untrusted URLs through a variety of mechanisms. If no sanitization/guards are introduced, then links with arbitrary protocols (eg. smb:// and some-custom-vuln-handler://) can be supplied to trigger unintended actions against a user that clicks.

Languages and frameworks supported:

  • C/C++
    • Generic shell invoction through rundll32 url.dll,FileProtocolHandler, xdg-open and open for their respective platforms
    • Qt's QDesktopServices::openUrl
  • Java
    • Generic sell invocation
    • Desktop.browse()


public void bad1(HttpServletRequest request) throws IOException, URISyntaxException {
String url = request.getParameter("url");
Desktop.getDesktop().browse(new URI(url));

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
String url = request.getParameter("url");
URI uri = new URI(url);
if (uri.getScheme().equals("https") || uri.getScheme().equals("http")) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).

// Weak check - only checks if scheme exists, not what it is
if (uri.getScheme() != null) {
Desktop.getDesktop().browse(uri);

Check warning

Code scanning / CodeQL

URL redirection from remote source

Untrusted URL redirection depends on a [user-provided value](1).
public void bad6_rundll32(HttpServletRequest request) throws IOException {
String url = request.getParameter("url");
// ProcessBuilder with list
ProcessBuilder pb = new ProcessBuilder("rundll32", "url.dll,FileProtocolHandler", url);

Check failure

Code scanning / CodeQL

Uncontrolled command line

This command line depends on a [user-provided value](1).
@ex0dus-0xex0dus-0x changed the title Add PotentiallyUnguardedProtocolHandler query for JavaAdd PotentiallyUnguardedProtocolHandler query for Java and C++Dec 17, 2025
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from c3d12d8 to 3275b0dCompareJanuary 2, 2026 17:49
@ex0dus-0x
ex0dus-0x marked this pull request as ready for review January 8, 2026 14:29
Comment threadcpp/test/query-tests/security/PotentiallyUnguardedProtocolHandler/test.cpp Outdated
@ex0dus-0x
ex0dus-0xforce-pushed the alan/untrusted-protocol-handle branch from 29a9a76 to e0d42d1CompareApril 6, 2026 18:00
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@ex0dus-0x@GrosQuildu@github-advanced-security@kumarak