Anunciando Tauri 1.3.0

El equipo de Tauri se complace en anunciar el lanzamiento de la versión 1.3. Esta versión incluye mejoras de seguridad, nuevas características y correcciones de errores importantes.
Actualizando
Sección titulada “Actualizando”Asegúrate de actualizar tanto las dependencias de NPM como las de Cargo a la versión 1.3.0. Puedes actualizar las dependencias con:
npm install @tauri-apps/cli@latest @tauri-apps/api@latestyarn upgrade @tauri-apps/cli @tauri-apps/api --latestpnpm update @tauri-apps/cli @tauri-apps/api --latestcargo updateQué hay en 1.3.0
Sección titulada “Qué hay en 1.3.0”La CLI de Tauri ahora puede crear instaladores de aplicaciones de Windows usando NSIS. Este nuevo objetivo de bundle también está disponible en macOS y Linux como una característica experimental, por lo que puedes compilar de forma cruzada tu instalador de Windows. La documentación sobre esto último se publicará pronto.
Auditoría de Tauri 1.3
Sección titulada “Auditoría de Tauri 1.3”La auditoría interna fue realizada por @tweidinger y @chippers, quienes participan en la mayoría de los temas de seguridad en el proyecto Tauri. Se realizó durante tiempo remunerado en CrabNebula y estamos muy agradecidos de poder dedicar parte de nuestro tiempo de trabajo a contribuir al proyecto de código abierto y hacer de él un entorno más seguro :heart:.
Auditamos manualmente más de 45 PRs. Algunas PRs (ej. #5544) nos llevaron a profundizar en RFCs muy antiguos (RFC6068 y RFC3966), documentación de NSIS (ej. #6039) y muchos otros recursos externos. Documentamos preguntas, notas y hallazgos en archivos markdown y compartimos estas notas con los desarrolladores responsables para garantizar las correcciones adecuadas.
Los cambios desde una perspectiva de seguridad y los hallazgos de la auditoría se resumen en las siguientes subsecciones.
Acceso a API Externa #5918
Sección titulada “Acceso a API Externa #5918”Esta fue, con diferencia, la PR más impactante y que más tiempo consumió de las que investigamos. Esta PR introduce una forma simplificada para que las aplicaciones permitan que dominios externos accedan a la capa IPC de Tauri1 y su uso impacta de forma importante el modelo de seguridad de una aplicación Tauri. El impacto de seguridad2 depende de la exposición3 de la característica, los comandos de Tauri habilitados y las capacidades de un adversario4.
Consideramos esta nueva característica similar a conducir un auto de carreras muy rápido sin ninguna característica de seguridad activada e instamos a los desarrolladores a considerar muy pero muy cuidadosamente si realmente necesitan esta exposición.
Antes de que se fusionara esta adición, desarrolladores de aplicaciones (ab)usaban una vulnerabilidad semi-conocida para lograr la misma funcionalidad. Para hacer que toda la comunidad sea consciente de este riesgo, publicamos un aviso de seguridad para advertirles. Las aplicaciones se ven afectadas si permiten a los usuarios navegar a dominios arbitrarios o tienen una vulnerabilidad de redirección abierta5. Si implementas una característica de este tipo, deberías actualizar a la versión 1.3 lo antes posible.
Los cambios iniciales de la PR permitían comodines (wildcards) (https://*) y patrones glob, los cuales creemos que son útiles pero no deberían estar expuestos a todos los desarrolladores de Tauri. Concluimos que el riesgo de sobreexposición, al igual que el conmutador de allowlist para habilitar todos los endpoints de la API de Tauri, no justifica esta exposición permisiva. La implementación final permite configurar (sub)dominios específicos6 (ej: example.com) para obtener acceso remoto al IPC de Tauri.
Los pocos casos de uso límite que requieren comodines o una exposición aún mayor se pueden implementar mediante código de Rust personalizado que sea capaz de modificar dinámicamente el acceso al IPC. Ahora exponemos este alcance del IPC remoto de manera similar al alcance de fs o http.
Asumiendo un servicio web de confianza total en https://trusted.example, ahora es posible configurar el scope de seguridad para permitir que ciertas ventanas o incluso plugins accedan a comandos implementados a medida y, opcionalmente, a la API incorporada de Tauri:
"security": { "dangerousRemoteUrlIpcAccess": [ { "windows": ["main", "settings"], "domain": "trusted.example", "plugins": ["trusted-plugin"], "enableTauriAPI": false }, ],}Bajo ninguna circunstancia se DEBEN usar dominios compartidos para esto. No limitamos el acceso a rutas o archivos específicos. Solo puedes limitar el scope con (sub)dominios de confianza6. Otro detalle muy riesgoso es que los desarrolladores deben estar seguros de que la propiedad del dominio no cambie durante la vida útil de la aplicación. La toma de control de un dominio podría provocar que los dispositivos de los usuarios se vean comprometidos.
Argumentos de Navegador #5799
Sección titulada “Argumentos de Navegador #5799”Debido a que ciertas características de WebView no estaban habilitadas ni accesibles, una contribución de la comunidad introdujo la posibilidad de agregar argumentos adicionales al proceso de WebView, el cual se crea en una nueva ventana.
Esta característica se expuso al frontend en el endpoint window. Encontramos que esta exposición era altamente riesgosa, ya que la mayoría de las webviews tienen características y flags muy impactantes que se pueden permitir a través de los argumentos del proceso.
Todas las siguientes suposiciones del modelo de amenaza se basan en que la creación de ventanas de Tauri esté permitida en la allowlist de tauri.conf y, por lo tanto, expuesta al frontend. Esta PR afecta únicamente a Windows, por lo que no hay impacto en los otros sistemas operativos soportados.
Un adversario con la capacidad de crear ventanas y pasar argumentos de línea de comandos al WebView puede elevar sus privilegios para escapar del estricto sandboxing de Tauri y del WebView.
Los flags permiten habilitar varias características peligrosas de WebView, desde cargar perfiles fuera de la carpeta de perfil predeterminada actual (robando sesiones de navegador del dispositivo) hasta desactivar medidas de seguridad del WebView (ej.: validación de certificados, sandboxing, modo webdriver/headless, endpoints de gestión de dispositivos, …).
Encontramos una referencia de documentación antigua pero valiosa y aún única en https://peter.sh/experiments/chromium-command-line-switches/, la cual nos ayudó a comprender los posibles riesgos en Windows, ya que Webview2 utiliza los mismos flags.
Luego, la característica se modificó para estar expuesta únicamente del lado de Rust. Los desarrolladores de aplicaciones Tauri pueden usar esto para implementar comandos personalizados que invoquen ventanas de WebView con argumentos específicos según el caso de uso.
Posible ZipSlip #4674
Sección titulada “Posible ZipSlip #4674”Encontramos que los componentes para extraer archivos de empaquetadores remotos como el instalador de Webview2 estaban extrayendo manualmente archivos individuales con la función extract_zip, que usa ZipFile::name() en lugar de ZipFile::enclosed_name() como se recomienda en la documentación. Archivos que tenían nombres como ../../../../foo.sh podrían extraerse fuera del directorio previsto en el sistema de archivos. Este tipo de vulnerabilidad se conoce como ZipSlip.
Como la función solo se usaba en archivos verificados y de confianza, el impacto aquí fue casi nulo. De todos modos, cambiamos la implementación para facilitar el método de extracción adecuado.
Endurecimiento de Bundler #6039
Sección titulada “Endurecimiento de Bundler #6039”El empaquetador (bundler) no estaba escapando el contenido pasado a handlebars::Handlebars::render(), lo que podría causar la ejecución de código no deseado durante la fase de empaquetado. Este también fue un problema de bajo impacto pero se corrigió rápidamente.
Otros cambios
Sección titulada “Otros cambios”Nuevas características
Sección titulada “Nuevas características”- Opción
additional_browser_argsal crear ventanas #5799 - Agregar el método de ventana
is_minimized(). #5618 - Agregar getter de
titleen window. #5515 - APIs de protección de contenido #5513
- Se agregaron los métodos
Builder::device_event_filteryApp::set_device_event_filter. #5562 - Agregar
WindowsAttributes::app_manifestpara especificar el manifiesto de aplicación en Windows. #5730 - Agregar soporte para la herencia de workspace de Cargo. #5775 #6144
- Se agregó el getter de
url()en window. #5914 - Se agregó
Window::on_navigation. #5686 - Permitir establecer el texto de los botones del diálogo. #4383
- Implementar
SystemTray::with_tooltipySystemTrayHandle::set_tooltippara Windows y macOS. #5938 - Agregar soporte de dylib a
tauri.bundle.macOS.frameworks. #5732
Mejoras
Sección titulada “Mejoras”- En Windows, la casilla de verificación
Ejecutar Aplicacióndel instaladormsiestará marcada por defecto. #5871 - Agregar la opción
--pngpara el comandoiconpara generar tamaños de ícono personalizados. #5246 - En Windows, cambiar el tema del webview según el tema de la ventana para un soporte de
prefers-color-schememás preciso. #5874 - Eliminar características predeterminadas de la plantilla Cargo.toml. #6074
- Agregar un método al struct
WindowBuilderpara recrear ventanas a partir de configuraciones de tauri.conf.json.#6073 - Mejorar el mensaje de error cuando no se pudo encontrar
rustc. #6021 - Se agregó soporte para identificadores de pre-lanzamiento y números de compilación para el objetivo de bundle
.msi. Solo se puede usar uno de cada uno y debe ser únicamente numérico. La versión aún debe ser compatible con semver según https://semver.org/. #6096 - Agregar el flag
--ciy respetar la variable de entornoCIen el comandosigner generate. En este caso, la contraseña predeterminada será una cadena vacía y la CLI no solicitará un valor. #6097 - Omitir la solicitud de contraseña en el comando build cuando la variable de entorno
TAURI_KEY_PASSWORDesté vacía y se proporcione el argumento--cio esté establecida la variable de entornoCI. d4f89af18d69fd95a4d8a1ede8442547c6a6d0ee
Correcciones
Sección titulada “Correcciones”- Corregir pánico en
tauri infoal analizar la versión de crates en un proyecto recién creado sin un archivoCargo.lock. #5873 - Corregir la compilación de aplicaciones con caracteres unicode en su
productName. #5872 - Sincronizar
__TAURI_METADATA__.__windowsen todas las ventanas. #5615 - Corregir error visual de redimensionamiento al hacer doble clic en una barra de título personalizada en el área de redimensionamiento superior. #5966
- Desactivar eventos del cursor del mouse en Linux. #6025
- Corregir la serialización de
Mapde js cuando se utiliza eninvoke. #6099
Notas al pie
Sección titulada “Notas al pie”-
Inter-Process Communication (Comunicación entre Procesos), en este caso la comunicación entre el núcleo (core) de Tauri y el código del frontend ejecutado dentro del webview. ↩
-
Impacto de Seguridad: ¿Cuál es el mayor impacto teórico de esta combinación de amenazas? Esto depende en gran medida del correcto alcance (scoping) de los endpoints de la API de Tauri y del endurecimiento de los comandos personalizados implementados en Tauri. ↩
-
Exposición: Describe los elementos de scope expuestos de esta característica a un usuario o adversario. Es posible restringir la exposición solo a ciertos dominios, ventanas o únicamente a comandos personalizados implementados. ↩
-
Capacidades del Adversario: ¿Qué tipo de privilegios tiene el adversario? Puede variar desde engañar al usuario para que ingrese una entrada maliciosa hasta la ejecución de código en el frontend a través de cross-site-scripting (que es el privilegio más alto para el código de frontend en nuestro caso). Las capacidades comunes se describen en la documentación de OWASP. ↩
-
Una aplicación puede ser explotada si analiza la entrada del usuario para tomar una decisión de redirección de URL, la cual luego no se valida adecuadamente. Fuente de Wikipedia ↩
-
ver la referencia de Reqwest ↩ ↩2
© 2026 Colaboradores de Tauri. CC-BY / MIT