diff --git a/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs b/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs index 189d72c9d4..9c3927074a 100644 --- a/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs +++ b/src/modules/previewpane/MarkdownPreviewHandler/MarkdownPreviewHandlerControl.cs @@ -202,7 +202,15 @@ namespace Microsoft.PowerToys.PreviewHandler.Markdown if (args.Uri != null && args.Uri != _localFileURI?.ToString() && args.IsUserInitiated) { args.Cancel = true; - await Launcher.LaunchUriAsync(new Uri(args.Uri)); + + // Only allow http and https schemes to be opened externally. + // Block all other URI schemes (e.g. calculator:, search-ms:, etc.) + // to prevent arbitrary protocol handler execution from the preview pane. + if (Uri.TryCreate(args.Uri, UriKind.Absolute, out Uri uri) && + (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)) + { + await Launcher.LaunchUriAsync(uri); + } } };