{"api_version":"1","generated_at":"2026-09-25T07:55:08+00:00","cve":"CVE-2026-95624","urls":{"html":"https://cve.report/CVE-2026-95624","api":"https://cve.report/api/cve/CVE-2026-95624.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-95624","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-95624"},"summary":{"title":"Tauri framework v2 malicious downgrade via allow_downgrades from frontend code","description":"The Tauri updater plugin's 'check' IPC command accepts an allowDowngrades boolean parameter directly from frontend JavaScript code. When set to true, it replaces the version comparator from \"update must be newer\" to \"update must be different.\" Because the default permission set grants allow-check to the webview, any XSS in the app frontend can invoke this command and bypass the only anti-rollback protection the updater offers. Combined with another bug, this enables downgrade attacks without even needing to fake a higher version number.","state":"PUBLISHED","assigner":"JFROG","published_at":"2026-09-22 18:17:36","updated_at":"2026-09-22 20:17:13"},"problem_types":["CWE-284","CWE-284 CWE-284: Improper Access Control"],"metrics":[{"version":"3.1","source":"reefs@jfrog.com","type":"Secondary","score":"6.8","severity":"MEDIUM","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N","baseScore":6.8,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"HIGH","privilegesRequired":"NONE","userInteraction":"REQUIRED","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"NONE"}},{"version":"3.1","source":"CNA","type":"CVSS","score":"6.8","severity":"MEDIUM","vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N","data":{"attackComplexity":"HIGH","attackVector":"NETWORK","availabilityImpact":"NONE","baseScore":6.8,"baseSeverity":"MEDIUM","confidentialityImpact":"HIGH","integrityImpact":"HIGH","privilegesRequired":"NONE","scope":"UNCHANGED","userInteraction":"REQUIRED","vectorString":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N","version":"3.1"}}],"references":[{"url":"https://github.com/tauri-apps/tauri","name":"https://github.com/tauri-apps/tauri","refsource":"reefs@jfrog.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/tauri-apps/plugins-workspace/commit/1308bfa399b962b3977c767100a6339d1cbfdd20","name":"https://github.com/tauri-apps/plugins-workspace/commit/1308bfa399b962b3977c767100a6339d1cbfdd20","refsource":"reefs@jfrog.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/tauri-apps/tauri/security/advisories/GHSA-rjc6-5hfg-grp9","name":"https://github.com/tauri-apps/tauri/security/advisories/GHSA-rjc6-5hfg-grp9","refsource":"reefs@jfrog.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/tauri-apps/plugins-workspace/releases/tag/updater-v2.12.0","name":"https://github.com/tauri-apps/plugins-workspace/releases/tag/updater-v2.12.0","refsource":"reefs@jfrog.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-95624","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-95624","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Tauri","product":"tauri-plugin-updater","version":"affected 2.8.0 2.12.0 semver","platforms":[]}],"timeline":[{"source":"CNA","time":"2026-06-25T09:40:00.000Z","lang":"en","value":"Reported to the Tauri team as GHSA-rjc6-5hfg-grp9"},{"source":"CNA","time":"2026-09-20T00:00:00.000Z","lang":"en","value":"Fixed in tauri-plugin-updater 2.12.0, commit 1308bfa399, by moving allowDowngrades out of the IPC command and into the plugin configuration"}],"solutions":[{"source":"CNA","title":"","value":"Fixed in tauri-plugin-updater 2.12.0. allowDowngrades was removed from the check command and is now read from the plugin configuration instead, where the frontend cannot reach it, and it defaults to false. An application that provides its own version comparator still takes precedence.","time":"","lang":"en"}],"workarounds":[],"exploits":[],"credits":[{"source":"CNA","value":"Yuval Moravchick","lang":"en"},{"source":"CNA","value":"JFrog Security Research","lang":"en"}],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":{"cve_year":"2026","cve_id":"95624","cve":"CVE-2026-95624","epss":"0.004490000","percentile":"0.383790000","score_date":"2026-09-23","updated_at":"2026-09-24 00:07:16"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"adp":[{"metrics":[{"other":{"content":{"id":"CVE-2026-95624","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"total"}],"role":"CISA Coordinator","timestamp":"2026-09-22T19:30:03.565802Z","version":"2.0.3"},"type":"ssvc"}}],"providerMetadata":{"dateUpdated":"2026-09-22T19:30:22.534Z","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP"},"title":"CISA ADP Vulnrichment"}],"cna":{"affected":[{"collectionURL":"https://crates.io/crates/tauri-plugin-updater","defaultStatus":"unaffected","packageName":"tauri-plugin-updater","product":"tauri-plugin-updater","programFiles":["plugins/updater/src/commands.rs","plugins/updater/src/config.rs"],"repo":"git://github.com/tauri-apps/tauri","vendor":"Tauri","versions":[{"lessThan":"2.12.0","status":"affected","version":"2.8.0","versionType":"semver"}]}],"credits":[{"lang":"en","type":"finder","value":"Yuval Moravchick"},{"lang":"en","type":"coordinator","value":"JFrog Security Research"}],"datePublic":"2026-09-23T10:14:00.000Z","descriptions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>The Tauri updater plugin's 'check' IPC command accepts an allowDowngrades boolean parameter directly from frontend JavaScript code. When set to true, it replaces the version comparator from \"update must be newer\" to \"update must be different.\" Because the default permission set grants allow-check to the webview, any XSS in the app frontend can invoke this command and bypass the only anti-rollback protection the updater offers. Combined with another bug, this enables downgrade attacks without even needing to fake a higher version number.</p>"}],"value":"The Tauri updater plugin's 'check' IPC command accepts an allowDowngrades boolean parameter directly from frontend JavaScript code. When set to true, it replaces the version comparator from \"update must be newer\" to \"update must be different.\" Because the default permission set grants allow-check to the webview, any XSS in the app frontend can invoke this command and bypass the only anti-rollback protection the updater offers. Combined with another bug, this enables downgrade attacks without even needing to fake a higher version number."}],"metrics":[{"cvssV3_1":{"attackComplexity":"HIGH","attackVector":"NETWORK","availabilityImpact":"NONE","baseScore":6.8,"baseSeverity":"MEDIUM","confidentialityImpact":"HIGH","integrityImpact":"HIGH","privilegesRequired":"NONE","scope":"UNCHANGED","userInteraction":"REQUIRED","vectorString":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N","version":"3.1"},"format":"CVSS","scenarios":[{"lang":"en","value":"GENERAL"}]}],"problemTypes":[{"descriptions":[{"cweId":"CWE-284","description":"CWE-284: Improper Access Control","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-09-22T17:16:25.195Z","orgId":"48a46f29-ae42-4e1d-90dd-c1676c1e5e6d","shortName":"JFROG"},"references":[{"name":"GHSA-rjc6-5hfg-grp9 (tauri-apps/tauri)","tags":["issue-tracking"],"url":"https://github.com/tauri-apps/tauri/security/advisories/GHSA-rjc6-5hfg-grp9"},{"name":"tauri-apps/tauri repository","tags":["product"],"url":"https://github.com/tauri-apps/tauri"},{"name":"Move allowDowngrades from the check command to the plugin configuration","tags":["patch"],"url":"https://github.com/tauri-apps/plugins-workspace/commit/1308bfa399b962b3977c767100a6339d1cbfdd20"},{"name":"tauri-plugin-updater 2.12.0 release notes","tags":["release-notes"],"url":"https://github.com/tauri-apps/plugins-workspace/releases/tag/updater-v2.12.0"}],"solutions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>Fixed in tauri-plugin-updater 2.12.0. allowDowngrades was removed from the check command and is now read from the plugin configuration instead, where the frontend cannot reach it, and it defaults to false. An application that provides its own version comparator still takes precedence.</p>"}],"value":"Fixed in tauri-plugin-updater 2.12.0. allowDowngrades was removed from the check command and is now read from the plugin configuration instead, where the frontend cannot reach it, and it defaults to false. An application that provides its own version comparator still takes precedence."}],"source":{"discovery":"EXTERNAL"},"timeline":[{"lang":"en","time":"2026-06-25T09:40:00.000Z","value":"Reported to the Tauri team as GHSA-rjc6-5hfg-grp9"},{"lang":"en","time":"2026-09-20T00:00:00.000Z","value":"Fixed in tauri-plugin-updater 2.12.0, commit 1308bfa399, by moving allowDowngrades out of the IPC command and into the plugin configuration"}],"title":"Tauri framework v2 malicious downgrade via allow_downgrades from frontend code","x_generator":{"engine":"Vulnogram 1.0.5"}}},"cveMetadata":{"assignerOrgId":"48a46f29-ae42-4e1d-90dd-c1676c1e5e6d","assignerShortName":"JFROG","cveId":"CVE-2026-95624","datePublished":"2026-09-22T17:16:25.195Z","dateReserved":"2026-09-22T10:38:03.883Z","dateUpdated":"2026-09-22T19:30:22.534Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-09-22 18:17:36","lastModifiedDate":"2026-09-22 20:17:13","problem_types":["CWE-284","CWE-284 CWE-284: Improper Access Control"],"metrics":{"cvssMetricV31":[{"source":"reefs@jfrog.com","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N","baseScore":6.8,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"HIGH","privilegesRequired":"NONE","userInteraction":"REQUIRED","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"NONE"},"exploitabilityScore":1.6,"impactScore":5.2}],"ssvcV203":[{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","ssvcData":{"timestamp":"2026-09-22T19:30:03.565802Z","id":"CVE-2026-95624","options":[{"exploitation":"none"},{"automatable":"no"},{"technicalImpact":"total"}],"role":"CISA Coordinator","version":"2.0.3"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"95624","Ordinal":"1","Title":"Tauri framework v2 malicious downgrade via allow_downgrades from","CVE":"CVE-2026-95624","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"95624","Ordinal":"1","NoteData":"The Tauri updater plugin's 'check' IPC command accepts an allowDowngrades boolean parameter directly from frontend JavaScript code. When set to true, it replaces the version comparator from \"update must be newer\" to \"update must be different.\" Because the default permission set grants allow-check to the webview, any XSS in the app frontend can invoke this command and bypass the only anti-rollback protection the updater offers. Combined with another bug, this enables downgrade attacks without even needing to fake a higher version number.","Type":"Description","Title":"Tauri framework v2 malicious downgrade via allow_downgrades from"}]}}}