VYPR
Moderate severityNVD Advisory· Published May 9, 2023· Updated Jan 28, 2025

Tauri Open Redirect Vulnerability Possibly Exposes IPC to External Sites

CVE-2023-31134

Description

Tauri is software for building applications for multi-platform deployment. The Tauri IPC is usually strictly isolated from external websites, but in versions 1.0.0 until 1.0.9, 1.1.0 until 1.1.4, and 1.2.0 until 1.2.5, the isolation can be bypassed by redirecting an existing Tauri window to an external website. This is either possible by an application implementing a feature for users to visit arbitrary websites or due to a bug allowing the open redirect. This allows the external website access to the IPC layer and therefore to all configured and exposed Tauri API endpoints and application specific implemented Tauri commands. This issue has been patched in versions 1.0.9, 1.1.4, and 1.2.5. As a workaround, prevent arbitrary input in redirect features and/or only allow trusted websites access to the IPC.

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

Tauri IPC isolation bypass via open redirect allows external websites to access all configured Tauri API endpoints and custom commands.

Vulnerability

Overview

CVE-2023-31134 is a security bypass in Tauri, a framework for building multi-platform desktop applications. The vulnerability allows an attacker to circumvent the strict isolation between the Tauri IPC (Inter-Process Communication) layer and external websites. This is achieved by redirecting an existing Tauri window to an external website, either through a legitimate feature that lets users navigate to arbitrary URLs or via an open redirect bug [2]. Once the window loads the external site, that site gains full access to the IPC layer, including all configured and exposed Tauri API endpoints and any application-specific Tauri commands [1].

Exploitation

Prerequisites

Exploitation requires that the Tauri application either implements a feature allowing users to visit arbitrary websites or contains an open redirect vulnerability. No additional authentication is needed beyond the user's existing session. An attacker can craft a malicious link or redirect chain that navigates the Tauri window to a controlled external domain, which then communicates with the IPC as if it were a trusted origin.

Impact

A successful attack gives the external website the same privileges as the legitimate Tauri frontend. This means the attacker can invoke any Tauri API endpoint (e.g., file system access, shell commands, clipboard) and any custom commands defined by the application. The impact ranges from data exfiltration to arbitrary code execution, depending on the exposed capabilities.

Mitigation

The issue has been patched in Tauri versions 1.0.9, 1.1.4, and 1.2.5 [3][4]. The fix blocks remote URLs from accessing the IPC. As a workaround, developers should prevent arbitrary input in redirect features and restrict IPC access to only trusted websites via the dangerousRemoteDomainIPCAccess configuration option [1].

AI Insight generated on May 20, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
tauricrates.io
>= 1.0.0, < 1.0.91.0.9
tauricrates.io
>= 1.1.0, < 1.1.41.1.4
tauricrates.io
>= 1.2.0, < 1.2.51.2.5

Affected products

2
  • ghsa-coords
    Range: >= 1.0.0, < 1.0.9
  • tauri-apps/tauriv5
    Range: >= 1.0.0, < 1.0.9

Patches

1
9c0593c33af5

feat(core): block remote URLs from accessing the IPC

https://github.com/tauri-apps/tauriLucas NogueiraApr 12, 2023via ghsa
12 files changed · +141 59
  • .changes/remote-urls.md+7 0 added
    @@ -0,0 +1,7 @@
    +---
    +"tauri": patch
    +"tauri-runtime": patch
    +"tauri-runtime-wry": patch
    +---
    +
    +Block remote URLs from accessing the IPC.
    
  • core/tauri-build/src/static_vcruntime.rs+1 1 modified
    @@ -54,5 +54,5 @@ fn override_msvcrt_lib() {
         f.write_all(bytes).unwrap();
       }
       // Add the output directory to the native library path.
    -  println!("cargo:rustc-link-search=native={}", out_dir);
    +  println!("cargo:rustc-link-search=native={out_dir}");
     }
    
  • core/tauri-runtime/Cargo.toml+1 0 modified
    @@ -32,6 +32,7 @@ http = "0.2.4"
     http-range = "0.1.4"
     raw-window-handle = "0.5"
     rand = "0.8"
    +url = "2"
     
     [target."cfg(windows)".dependencies]
     webview2-com = "0.19.1"
    
  • core/tauri-runtime/src/window.rs+15 5 modified
    @@ -12,6 +12,7 @@ use crate::{
     };
     use serde::{Deserialize, Deserializer, Serialize};
     use tauri_utils::{config::WindowConfig, Theme};
    +use url::Url;
     
     use std::{
       collections::{HashMap, HashSet},
    @@ -224,14 +225,17 @@ pub struct PendingWindow<T: UserEvent, R: Runtime<T>> {
       /// How to handle IPC calls on the webview window.
       pub ipc_handler: Option<WebviewIpcHandler<T, R>>,
     
    -  /// The resolved URL to load on the webview.
    -  pub url: String,
    -
       /// Maps runtime id to a string menu id.
       pub menu_ids: Arc<Mutex<HashMap<MenuHash, MenuId>>>,
     
       /// A HashMap mapping JS event names with associated listener ids.
       pub js_event_listeners: Arc<Mutex<HashMap<JsEventListenerKey, HashSet<u64>>>>,
    +
    +  /// A handler to decide if incoming url is allowed to navigate.
    +  pub navigation_handler: Option<Box<dyn Fn(Url) -> bool + Send>>,
    +
    +  /// The current webview URL.
    +  pub current_url: Arc<Mutex<Url>>,
     }
     
     pub fn is_label_valid(label: &str) -> bool {
    @@ -268,9 +272,10 @@ impl<T: UserEvent, R: Runtime<T>> PendingWindow<T, R> {
             uri_scheme_protocols: Default::default(),
             label,
             ipc_handler: None,
    -        url: "tauri://localhost".to_string(),
             menu_ids: Arc::new(Mutex::new(menu_ids)),
             js_event_listeners: Default::default(),
    +        navigation_handler: Default::default(),
    +        current_url: Arc::new(Mutex::new("tauri://localhost".parse().unwrap())),
           })
         }
       }
    @@ -297,9 +302,10 @@ impl<T: UserEvent, R: Runtime<T>> PendingWindow<T, R> {
             uri_scheme_protocols: Default::default(),
             label,
             ipc_handler: None,
    -        url: "tauri://localhost".to_string(),
             menu_ids: Arc::new(Mutex::new(menu_ids)),
             js_event_listeners: Default::default(),
    +        navigation_handler: Default::default(),
    +        current_url: Arc::new(Mutex::new("tauri://localhost".parse().unwrap())),
           })
         }
       }
    @@ -340,6 +346,9 @@ pub struct JsEventListenerKey {
     /// A webview window that is not yet managed by Tauri.
     #[derive(Debug)]
     pub struct DetachedWindow<T: UserEvent, R: Runtime<T>> {
    +  /// The current webview URL.
    +  pub current_url: Arc<Mutex<Url>>,
    +
       /// Name of the window
       pub label: String,
     
    @@ -356,6 +365,7 @@ pub struct DetachedWindow<T: UserEvent, R: Runtime<T>> {
     impl<T: UserEvent, R: Runtime<T>> Clone for DetachedWindow<T, R> {
       fn clone(&self) -> Self {
         Self {
    +      current_url: self.current_url.clone(),
           label: self.label.clone(),
           dispatcher: self.dispatcher.clone(),
           menu_ids: self.menu_ids.clone(),
    
  • core/tauri-runtime-wry/Cargo.toml+1 0 modified
    @@ -19,6 +19,7 @@ tauri-utils = { version = "1.2.1", path = "../tauri-utils" }
     uuid = { version = "1", features = [ "v4" ] }
     rand = "0.8"
     raw-window-handle = "0.5"
    +url = "2"
     
     [target."cfg(windows)".dependencies]
     webview2-com = "0.19.1"
    
  • core/tauri-runtime-wry/src/lib.rs+15 2 modified
    @@ -37,6 +37,7 @@ use wry::application::platform::windows::{WindowBuilderExtWindows, WindowExtWind
     #[cfg(target_os = "macos")]
     use tauri_utils::TitleBarStyle;
     use tauri_utils::{config::WindowConfig, debug_eprintln, Theme};
    +use url::Url;
     use uuid::Uuid;
     use wry::{
       application::{
    @@ -211,6 +212,7 @@ impl<T: UserEvent> Context<T> {
     impl<T: UserEvent> Context<T> {
       fn create_webview(&self, pending: PendingWindow<T, Wry<T>>) -> Result<DetachedWindow<T, Wry<T>>> {
         let label = pending.label.clone();
    +    let current_url = pending.current_url.clone();
         let menu_ids = pending.menu_ids.clone();
         let js_event_listeners = pending.js_event_listeners.clone();
         let context = self.clone();
    @@ -232,6 +234,7 @@ impl<T: UserEvent> Context<T> {
         };
         Ok(DetachedWindow {
           label,
    +      current_url,
           dispatcher,
           menu_ids,
           js_event_listeners,
    @@ -1931,6 +1934,7 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
     
       fn create_window(&self, pending: PendingWindow<T, Self>) -> Result<DetachedWindow<T, Self>> {
         let label = pending.label.clone();
    +    let current_url = pending.current_url.clone();
         let menu_ids = pending.menu_ids.clone();
         let js_event_listeners = pending.js_event_listeners.clone();
         let window_id = rand::random();
    @@ -1957,6 +1961,7 @@ impl<T: UserEvent> Runtime<T> for Wry<T> {
     
         Ok(DetachedWindow {
           label,
    +      current_url,
           dispatcher,
           menu_ids,
           js_event_listeners,
    @@ -2944,7 +2949,7 @@ fn create_webview<T: UserEvent>(
         mut window_builder,
         ipc_handler,
         label,
    -    url,
    +    current_url,
         menu_ids,
         js_event_listeners,
         ..
    @@ -2990,7 +2995,7 @@ fn create_webview<T: UserEvent>(
       }
       let mut webview_builder = WebViewBuilder::new(window)
         .map_err(|e| Error::CreateWebview(Box::new(e)))?
    -    .with_url(&url)
    +    .with_url(current_url.lock().unwrap().as_str())
         .unwrap() // safe to unwrap because we validate the URL beforehand
         .with_transparent(is_window_transparent)
         .with_accept_first_mouse(webview_attributes.accept_first_mouse);
    @@ -3001,10 +3006,16 @@ fn create_webview<T: UserEvent>(
       if let Some(user_agent) = webview_attributes.user_agent {
         webview_builder = webview_builder.with_user_agent(&user_agent);
       }
    +  if let Some(navigation_handler) = pending.navigation_handler {
    +    webview_builder = webview_builder.with_navigation_handler(move |url| {
    +      Url::parse(&url).map(&navigation_handler).unwrap_or(true)
    +    });
    +  }
       if let Some(handler) = ipc_handler {
         webview_builder = webview_builder.with_ipc_handler(create_ipc_handler(
           context,
           label.clone(),
    +      current_url,
           menu_ids,
           js_event_listeners,
           handler,
    @@ -3115,6 +3126,7 @@ fn create_webview<T: UserEvent>(
     fn create_ipc_handler<T: UserEvent>(
       context: Context<T>,
       label: String,
    +  current_url: Arc<Mutex<Url>>,
       menu_ids: Arc<Mutex<HashMap<MenuHash, MenuId>>>,
       js_event_listeners: Arc<Mutex<HashMap<JsEventListenerKey, HashSet<u64>>>>,
       handler: WebviewIpcHandler<T, Wry<T>>,
    @@ -3123,6 +3135,7 @@ fn create_ipc_handler<T: UserEvent>(
         let window_id = context.webview_id_map.get(&window.id()).unwrap();
         handler(
           DetachedWindow {
    +        current_url: current_url.clone(),
             dispatcher: WryDispatcher {
               window_id,
               context: context.clone(),
    
  • core/tauri/src/app.rs+1 1 modified
    @@ -1017,7 +1017,7 @@ impl<R: Runtime> Builder<R> {
           #[cfg(any(windows, target_os = "linux"))]
           runtime_any_thread: false,
           setup: Box::new(|_| Ok(())),
    -      invoke_handler: Box::new(|_| ()),
    +      invoke_handler: Box::new(|invoke| invoke.resolver.reject("not implemented")),
           invoke_responder: Arc::new(window_invoke_responder),
           invoke_initialization_script:
             "Object.defineProperty(window, '__TAURI_POST_MESSAGE__', { value: (message) => window.ipc.postMessage(JSON.stringify(message)) })".into(),
    
  • core/tauri/src/manager.rs+52 37 modified
    @@ -25,10 +25,9 @@ use tauri_utils::{
       html::{SCRIPT_NONCE_TOKEN, STYLE_NONCE_TOKEN},
     };
     
    -use crate::hooks::IpcJavascript;
     #[cfg(feature = "isolation")]
     use crate::hooks::IsolationJavascript;
    -use crate::pattern::{format_real_schema, PatternJavascript};
    +use crate::pattern::PatternJavascript;
     use crate::{
       app::{AppHandle, GlobalWindowEvent, GlobalWindowEventListener},
       event::{assert_event_name_is_valid, Event, EventHandler, Listeners},
    @@ -54,6 +53,7 @@ use crate::{
       app::{GlobalMenuEventListener, WindowMenuEvent},
       window::WebResourceRequestHandler,
     };
    +use crate::{hooks::IpcJavascript, pattern::format_real_schema};
     
     #[cfg(any(target_os = "linux", target_os = "windows"))]
     use crate::api::path::{resolve_path, BaseDirectory};
    @@ -139,7 +139,7 @@ fn set_csp<R: Runtime>(
         let default_src = csp
           .entry("default-src".into())
           .or_insert_with(Default::default);
    -    default_src.push(format_real_schema(schema));
    +    default_src.push(crate::pattern::format_real_schema(schema));
       }
     
       Csp::DirectiveMap(csp).to_string()
    @@ -231,7 +231,7 @@ pub struct InnerWindowManager<R: Runtime> {
       /// The script that initializes the invoke system.
       invoke_initialization_script: String,
       /// Application pattern.
    -  pattern: Pattern,
    +  pub(crate) pattern: Pattern,
     }
     
     impl<R: Runtime> fmt::Debug for InnerWindowManager<R> {
    @@ -367,9 +367,12 @@ impl<R: Runtime> WindowManager<R> {
       /// Get the base URL to use for webview requests.
       ///
       /// In dev mode, this will be based on the `devPath` configuration value.
    -  fn get_url(&self) -> Cow<'_, Url> {
    +  pub(crate) fn get_url(&self) -> Cow<'_, Url> {
         match self.base_path() {
           AppUrl::Url(WindowUrl::External(url)) => Cow::Borrowed(url),
    +      #[cfg(windows)]
    +      _ => Cow::Owned(Url::parse("https://tauri.localhost").unwrap()),
    +      #[cfg(not(windows))]
           _ => Cow::Owned(Url::parse("tauri://localhost").unwrap()),
         }
       }
    @@ -477,7 +480,7 @@ impl<R: Runtime> WindowManager<R> {
           });
         }
     
    -    let window_url = Url::parse(&pending.url).unwrap();
    +    let window_url = pending.current_url.lock().unwrap().clone();
         let window_origin =
           if cfg!(windows) && window_url.scheme() != "http" && window_url.scheme() != "https" {
             format!("https://{}.localhost", window_url.scheme())
    @@ -1072,7 +1075,16 @@ mod test {
         );
     
         #[cfg(custom_protocol)]
    -    assert_eq!(manager.get_url().to_string(), "tauri://localhost");
    +    {
    +      assert_eq!(
    +        manager.get_url().to_string(),
    +        if cfg!(windows) {
    +          "https://tauri.localhost/"
    +        } else {
    +          "tauri://localhost"
    +        }
    +      );
    +    }
     
         #[cfg(dev)]
         assert_eq!(manager.get_url().to_string(), "http://localhost:4000/");
    @@ -1123,27 +1135,21 @@ impl<R: Runtime> WindowManager<R> {
           return Err(crate::Error::WindowLabelAlreadyExists(pending.label));
         }
         #[allow(unused_mut)] // mut url only for the data-url parsing
    -    let (is_local, mut url) = match &pending.webview_attributes.url {
    +    let mut url = match &pending.webview_attributes.url {
           WindowUrl::App(path) => {
             let url = self.get_url();
    -        (
    -          true,
    -          // ignore "index.html" just to simplify the url
    -          if path.to_str() != Some("index.html") {
    -            url
    -              .join(&path.to_string_lossy())
    -              .map_err(crate::Error::InvalidUrl)
    -              // this will never fail
    -              .unwrap()
    -          } else {
    -            url.into_owned()
    -          },
    -        )
    -      }
    -      WindowUrl::External(url) => {
    -        let config_url = self.get_url();
    -        (config_url.make_relative(url).is_some(), url.clone())
    +        // ignore "index.html" just to simplify the url
    +        if path.to_str() != Some("index.html") {
    +          url
    +            .join(&*path.to_string_lossy())
    +            .map_err(crate::Error::InvalidUrl)
    +            // this will never fail
    +            .unwrap()
    +        } else {
    +          url.into_owned()
    +        }
           }
    +      WindowUrl::External(url) => url.clone(),
           _ => unimplemented!(),
         };
     
    @@ -1170,7 +1176,7 @@ impl<R: Runtime> WindowManager<R> {
           }
         }
     
    -    pending.url = url.to_string();
    +    *pending.current_url.lock().unwrap() = url;
     
         if !pending.window_builder.has_icon() {
           if let Some(default_window_icon) = self.inner.default_window_icon.clone() {
    @@ -1186,17 +1192,15 @@ impl<R: Runtime> WindowManager<R> {
           }
         }
     
    -    if is_local {
    -      let label = pending.label.clone();
    -      pending = self.prepare_pending_window(
    -        pending,
    -        &label,
    -        window_labels,
    -        app_handle.clone(),
    -        web_resource_request_handler,
    -      )?;
    -      pending.ipc_handler = Some(self.prepare_ipc_handler(app_handle));
    -    }
    +    let label = pending.label.clone();
    +    pending = self.prepare_pending_window(
    +      pending,
    +      &label,
    +      window_labels,
    +      app_handle.clone(),
    +      web_resource_request_handler,
    +    )?;
    +    pending.ipc_handler = Some(self.prepare_ipc_handler(app_handle));
     
         // in `Windows`, we need to force a data_directory
         // but we do respect user-specification
    @@ -1221,6 +1225,17 @@ impl<R: Runtime> WindowManager<R> {
           }
         }
     
    +    let current_url_ = pending.current_url.clone();
    +    let navigation_handler = pending.navigation_handler.take();
    +    pending.navigation_handler = Some(Box::new(move |url| {
    +      *current_url_.lock().unwrap() = url.clone();
    +      if let Some(handler) = &navigation_handler {
    +        handler(url)
    +      } else {
    +        true
    +      }
    +    }));
    +
         Ok(pending)
       }
     
    
  • core/tauri/src/pattern.rs+5 2 modified
    @@ -11,6 +11,9 @@ use serialize_to_javascript::{default_template, Template};
     
     use tauri_utils::assets::{Assets, EmbeddedAssets};
     
    +/// The domain of the isolation iframe source.
    +pub const ISOLATION_IFRAME_SRC_DOMAIN: &str = "localhost";
    +
     /// An application pattern.
     #[derive(Debug, Clone)]
     pub enum Pattern<A: Assets = EmbeddedAssets> {
    @@ -87,8 +90,8 @@ pub(crate) struct PatternJavascript {
     #[allow(dead_code)]
     pub(crate) fn format_real_schema(schema: &str) -> String {
       if cfg!(windows) {
    -    format!("https://{}.localhost", schema)
    +    format!("https://{schema}.{ISOLATION_IFRAME_SRC_DOMAIN}")
       } else {
    -    format!("{}://localhost", schema)
    +    format!("{schema}://{ISOLATION_IFRAME_SRC_DOMAIN}")
       }
     }
    
  • core/tauri/src/test/mock_runtime.rs+2 0 modified
    @@ -69,6 +69,7 @@ impl<T: UserEvent> RuntimeHandle<T> for MockRuntimeHandle {
       ) -> Result<DetachedWindow<T, Self::Runtime>> {
         Ok(DetachedWindow {
           label: pending.label,
    +      current_url: Arc::new(Mutex::new("tauri://localhost".parse().unwrap())),
           dispatcher: MockDispatcher {
             context: self.context.clone(),
           },
    @@ -665,6 +666,7 @@ impl<T: UserEvent> Runtime<T> for MockRuntime {
       fn create_window(&self, pending: PendingWindow<T, Self>) -> Result<DetachedWindow<T, Self>> {
         Ok(DetachedWindow {
           label: pending.label,
    +      current_url: Arc::new(Mutex::new("tauri://localhost".parse().unwrap())),
           dispatcher: MockDispatcher {
             context: self.context.clone(),
           },
    
  • core/tauri/src/window.rs+30 2 modified
    @@ -35,6 +35,7 @@ use crate::{
     };
     
     use serde::Serialize;
    +use url::Url;
     #[cfg(windows)]
     use windows::Win32::Foundation::HWND;
     
    @@ -570,7 +571,7 @@ impl<'a, R: Runtime> WindowBuilder<'a, R> {
     #[derive(Debug)]
     pub struct Window<R: Runtime> {
       /// The webview window created by the runtime.
    -  window: DetachedWindow<EventLoopMessage, R>,
    +  pub(crate) window: DetachedWindow<EventLoopMessage, R>,
       /// The manager to associate this webview window with.
       manager: WindowManager<R>,
       pub(crate) app_handle: AppHandle<R>,
    @@ -1256,9 +1257,27 @@ impl<R: Runtime> Window<R> {
     
     /// Webview APIs.
     impl<R: Runtime> Window<R> {
    +  /// Returns the current url of the webview.
    +  pub fn url(&self) -> Url {
    +    self.window.current_url.lock().unwrap().clone()
    +  }
    +
       /// Handles this window receiving an [`InvokeMessage`].
       pub fn on_message(self, payload: InvokePayload) -> crate::Result<()> {
         let manager = self.manager.clone();
    +    let current_url = self.url();
    +    let config_url = manager.get_url();
    +    #[allow(unused_mut)]
    +    let mut is_local = config_url.make_relative(&current_url).is_some();
    +    #[cfg(feature = "isolation")]
    +    if let crate::Pattern::Isolation { schema, .. } = &self.manager.inner.pattern {
    +      if current_url.scheme() == schema
    +        && current_url.domain() == Some(crate::pattern::ISOLATION_IFRAME_SRC_DOMAIN)
    +      {
    +        is_local = true;
    +      }
    +    }
    +
         match payload.cmd.as_str() {
           "__initialized" => {
             let payload: PageLoadPayload = serde_json::from_value(payload.inner)?;
    @@ -1272,8 +1291,17 @@ impl<R: Runtime> Window<R> {
               payload.inner,
             );
             let resolver = InvokeResolver::new(self, payload.callback, payload.error);
    -
             let invoke = Invoke { message, resolver };
    +
    +        println!("{} {}", config_url, current_url);
    +
    +        if !is_local {
    +          invoke
    +            .resolver
    +            .reject("Remote URLs are not allowed to access the IPC");
    +          return Ok(());
    +        }
    +
             if let Some(module) = &payload.tauri_module {
               crate::endpoints::handle(
                 module.to_string(),
    
  • examples/api/src-tauri/Cargo.lock+11 9 modified
    @@ -3128,7 +3128,7 @@ dependencies = [
     
     [[package]]
     name = "tauri"
    -version = "1.2.0"
    +version = "1.1.3"
     dependencies = [
      "anyhow",
      "attohttpc",
    @@ -3190,7 +3190,7 @@ dependencies = [
     
     [[package]]
     name = "tauri-build"
    -version = "1.2.0"
    +version = "1.1.1"
     dependencies = [
      "anyhow",
      "cargo_toml",
    @@ -3206,7 +3206,7 @@ dependencies = [
     
     [[package]]
     name = "tauri-codegen"
    -version = "1.2.0"
    +version = "1.1.1"
     dependencies = [
      "base64",
      "brotli",
    @@ -3230,7 +3230,7 @@ dependencies = [
     
     [[package]]
     name = "tauri-macros"
    -version = "1.2.0"
    +version = "1.1.1"
     dependencies = [
      "heck 0.4.0",
      "proc-macro2",
    @@ -3242,7 +3242,7 @@ dependencies = [
     
     [[package]]
     name = "tauri-runtime"
    -version = "0.12.0"
    +version = "0.11.1"
     dependencies = [
      "gtk",
      "http",
    @@ -3253,14 +3253,15 @@ dependencies = [
      "serde_json",
      "tauri-utils",
      "thiserror",
    - "uuid 1.2.1",
    + "url",
    + "uuid 1.1.2",
      "webview2-com",
      "windows 0.39.0",
     ]
     
     [[package]]
     name = "tauri-runtime-wry"
    -version = "0.12.0"
    +version = "0.11.1"
     dependencies = [
      "cocoa",
      "gtk",
    @@ -3269,7 +3270,8 @@ dependencies = [
      "raw-window-handle",
      "tauri-runtime",
      "tauri-utils",
    - "uuid 1.2.1",
    + "url",
    + "uuid 1.1.2",
      "webkit2gtk",
      "webview2-com",
      "windows 0.39.0",
    @@ -3278,7 +3280,7 @@ dependencies = [
     
     [[package]]
     name = "tauri-utils"
    -version = "1.2.0"
    +version = "1.1.1"
     dependencies = [
      "aes-gcm",
      "brotli",
    

Vulnerability mechanics

Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

11

News mentions

0

No linked articles in our index yet.