{"api_version":"1","generated_at":"2026-09-25T09:24:44+00:00","cve":"CVE-2026-95625","urls":{"html":"https://cve.report/CVE-2026-95625","api":"https://cve.report/api/cve/CVE-2026-95625.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-95625","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-95625"},"summary":{"title":"Tauri framework v2 missing updater signature version number validation can be exploited into forced downgrade","description":"The Tauri updater plugin verifies update binaries using minisign signatures, but the signature covers only the raw binary bytes. The update manifest -- which contains the version number, download URL, and signature -- is fetched over TLS but is never itself signed or authenticated. Because the only anti-rollback check compares the manifest's version field against the current version, and that field is unsigned, an attacker who can serve a crafted manifest can force installation of any older signed release without possessing the developer's private key.","state":"PUBLISHED","assigner":"JFROG","published_at":"2026-09-23 09:17:09","updated_at":"2026-09-23 19:42:02"},"problem_types":["CWE-354","CWE-354 CWE-354: Improper Validation of Integrity Check Value"],"metrics":[{"version":"3.1","source":"reefs@jfrog.com","type":"Secondary","score":"5.9","severity":"MEDIUM","vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N","baseScore":5.9,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"HIGH","privilegesRequired":"HIGH","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"NONE"}},{"version":"3.1","source":"CNA","type":"CVSS","score":"5.9","severity":"MEDIUM","vector":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N","data":{"attackComplexity":"HIGH","attackVector":"NETWORK","availabilityImpact":"NONE","baseScore":5.9,"baseSeverity":"MEDIUM","confidentialityImpact":"HIGH","integrityImpact":"HIGH","privilegesRequired":"HIGH","scope":"UNCHANGED","userInteraction":"NONE","vectorString":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N","version":"3.1"}}],"references":[{"url":"https://github.com/tauri-apps/plugins-workspace/commit/690dcfd694","name":"https://github.com/tauri-apps/plugins-workspace/commit/690dcfd694","refsource":"reefs@jfrog.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/tauri-apps/plugins-workspace","name":"https://github.com/tauri-apps/plugins-workspace","refsource":"reefs@jfrog.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/tauri-apps/plugins-workspace/security/advisories/GHSA-j38x-g3m3-95fr","name":"https://github.com/tauri-apps/plugins-workspace/security/advisories/GHSA-j38x-g3m3-95fr","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-95625","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-95625","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Tauri","product":"tauri-plugin-updater","version":"affected 2.0.0 2.12.0 semver","platforms":[]},{"source":"CNA","vendor":"Tauri","product":"tauri-plugin-updater","version":"affected 2.12.0 * semver","platforms":[]}],"timeline":[{"source":"CNA","time":"2026-09-01T13:31:00.000Z","lang":"en","value":"Reported to the Tauri team as GHSA-j38x-g3m3-95fr"},{"source":"CNA","time":"2026-09-19T23:57:00.000Z","lang":"en","value":"Opt-in fix released in tauri-plugin-updater 2.12.0, commit 690dcfd694, adding the requireSignedVersion option"}],"solutions":[{"source":"CNA","title":"","value":"addressed in tauri-plugin-updater 2.12.0, and it has to be switched on. The new requireSignedVersion option compares the version announced by the endpoint against the version recorded in the signature's trusted comment, which the signature does cover, and rejects the update when they differ.","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":"95625","cve":"CVE-2026-95625","epss":"0.001560000","percentile":"0.040130000","score_date":"2026-09-24","updated_at":"2026-09-25 00:02:55"},"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"adp":[{"metrics":[{"other":{"content":{"id":"CVE-2026-95625","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"total"}],"role":"CISA Coordinator","timestamp":"2026-09-23T14:07:42.715205Z","version":"2.0.3"},"type":"ssvc"}}],"providerMetadata":{"dateUpdated":"2026-09-23T14:10:35.332Z","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/updater.rs","plugins/updater/src/config.rs"],"repo":"git://github.com/tauri-apps/plugins-workspace","vendor":"Tauri","versions":[{"lessThan":"2.12.0","status":"affected","version":"2.0.0","versionType":"semver"},{"lessThanOrEqual":"*","status":"affected","version":"2.12.0","versionType":"semver"}]}],"credits":[{"lang":"en","type":"finder","value":"Yuval Moravchick"},{"lang":"en","type":"coordinator","value":"JFrog Security Research"}],"descriptions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>The Tauri updater plugin verifies update binaries using minisign signatures, but the signature covers only the raw binary bytes. The update manifest -- which contains the version number, download URL, and signature -- is fetched over TLS but is never itself signed or authenticated. Because the only anti-rollback check compares the manifest's version field against the current version, and that field is unsigned, an attacker who can serve a crafted manifest can force installation of any older signed release without possessing the developer's private key.</p>"}],"value":"The Tauri updater plugin verifies update binaries using minisign signatures, but the signature covers only the raw binary bytes. The update manifest -- which contains the version number, download URL, and signature -- is fetched over TLS but is never itself signed or authenticated. Because the only anti-rollback check compares the manifest's version field against the current version, and that field is unsigned, an attacker who can serve a crafted manifest can force installation of any older signed release without possessing the developer's private key."}],"metrics":[{"cvssV3_1":{"attackComplexity":"HIGH","attackVector":"NETWORK","availabilityImpact":"NONE","baseScore":5.9,"baseSeverity":"MEDIUM","confidentialityImpact":"HIGH","integrityImpact":"HIGH","privilegesRequired":"HIGH","scope":"UNCHANGED","userInteraction":"NONE","vectorString":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N","version":"3.1"},"format":"CVSS","scenarios":[{"lang":"en","value":"GENERAL"}]}],"problemTypes":[{"descriptions":[{"cweId":"CWE-354","description":"CWE-354: Improper Validation of Integrity Check Value","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-09-23T08:51:53.922Z","orgId":"48a46f29-ae42-4e1d-90dd-c1676c1e5e6d","shortName":"JFROG"},"references":[{"name":"GHSA-j38x-g3m3-95fr (tauri-apps/plugins-workspace)","tags":["issue-tracking"],"url":"https://github.com/tauri-apps/plugins-workspace/security/advisories/GHSA-j38x-g3m3-95fr"},{"name":"tauri-apps/plugins-workspace repository","tags":["product"],"url":"https://github.com/tauri-apps/plugins-workspace"},{"name":"Add requireSignedVersion to bind an update to its signed version","tags":["patch"],"url":"https://github.com/tauri-apps/plugins-workspace/commit/690dcfd694"},{"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>addressed in tauri-plugin-updater 2.12.0, and it has to be switched on. The new requireSignedVersion option compares the version announced by the endpoint against the version recorded in the signature's trusted comment, which the signature does cover, and rejects the update when they differ.</p>"}],"value":"addressed in tauri-plugin-updater 2.12.0, and it has to be switched on. The new requireSignedVersion option compares the version announced by the endpoint against the version recorded in the signature's trusted comment, which the signature does cover, and rejects the update when they differ."}],"source":{"discovery":"EXTERNAL"},"timeline":[{"lang":"en","time":"2026-09-01T13:31:00.000Z","value":"Reported to the Tauri team as GHSA-j38x-g3m3-95fr"},{"lang":"en","time":"2026-09-19T23:57:00.000Z","value":"Opt-in fix released in tauri-plugin-updater 2.12.0, commit 690dcfd694, adding the requireSignedVersion option"}],"title":"Tauri framework v2 missing updater signature version number validation can be exploited into forced downgrade","x_generator":{"engine":"Vulnogram 1.0.5"}}},"cveMetadata":{"assignerOrgId":"48a46f29-ae42-4e1d-90dd-c1676c1e5e6d","assignerShortName":"JFROG","cveId":"CVE-2026-95625","datePublished":"2026-09-23T08:51:53.922Z","dateReserved":"2026-09-22T10:38:03.883Z","dateUpdated":"2026-09-23T14:10:35.332Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-09-23 09:17:09","lastModifiedDate":"2026-09-23 19:42:02","problem_types":["CWE-354","CWE-354 CWE-354: Improper Validation of Integrity Check Value"],"metrics":{"cvssMetricV31":[{"source":"reefs@jfrog.com","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:N","baseScore":5.9,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"HIGH","privilegesRequired":"HIGH","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"NONE"},"exploitabilityScore":0.7,"impactScore":5.2}],"ssvcV203":[{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","ssvcData":{"timestamp":"2026-09-23T14:07:42.715205Z","id":"CVE-2026-95625","options":[{"exploitation":"none"},{"automatable":"no"},{"technicalImpact":"total"}],"role":"CISA Coordinator","version":"2.0.3"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"95625","Ordinal":"1","Title":"Tauri framework v2 missing updater signature version number vali","CVE":"CVE-2026-95625","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"95625","Ordinal":"1","NoteData":"The Tauri updater plugin verifies update binaries using minisign signatures, but the signature covers only the raw binary bytes. The update manifest -- which contains the version number, download URL, and signature -- is fetched over TLS but is never itself signed or authenticated. Because the only anti-rollback check compares the manifest's version field against the current version, and that field is unsigned, an attacker who can serve a crafted manifest can force installation of any older signed release without possessing the developer's private key.","Type":"Description","Title":"Tauri framework v2 missing updater signature version number vali"}]}}}