Search

Find a vulnerability

Search criteria

    4 vulnerabilities found for tauri-plugin-updater by Tauri

    CVE-2026-95625 (GCVE-0-2026-95625)

    Vulnerability from nvd – Published: 2026-09-23 08:51 – Updated: 2026-09-23 14:10
    VLAI
    Title
    Tauri framework v2 missing updater signature version number validation can be exploited into forced downgrade
    Summary
    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.
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-23 14:07 UTC
    CWE
    • CWE-354 - Improper Validation of Integrity Check Value
    Impacted products
    Vendor Product Version
    Tauri tauri-plugin-updater Affected: 2.0.0 , < 2.12.0 (semver)
    Affected: 2.12.0 , ≤ * (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "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": "\u003cp\u003eThe 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\u0027s 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\u0027s private key.\u003c/p\u003e"
                }
              ],
              "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\u0027s 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\u0027s 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": "\u003cp\u003eaddressed 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\u0027s trusted comment, which the signature does cover, and rejects the update when they differ.\u003c/p\u003e"
                }
              ],
              "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\u0027s 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"
    }

    CVE-2026-95624 (GCVE-0-2026-95624)

    Vulnerability from nvd – Published: 2026-09-22 17:16 – Updated: 2026-09-22 19:30
    VLAI
    Title
    Tauri framework v2 malicious downgrade via allow_downgrades from frontend code
    Summary
    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.
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 19:30 UTC
    CWE
    • CWE-284 - Improper Access Control
    Impacted products
    Vendor Product Version
    Tauri tauri-plugin-updater Affected: 2.8.0 , < 2.12.0 (semver)
    Create a notification for this product.
    Date Public
    2026-09-23 10:14
    Show details on NVD website

    {
      "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": "\u003cp\u003eThe Tauri updater plugin\u0027s \u0027check\u0027 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.\u003c/p\u003e"
                }
              ],
              "value": "The Tauri updater plugin\u0027s \u0027check\u0027 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": "\u003cp\u003eFixed 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.\u003c/p\u003e"
                }
              ],
              "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"
    }

    CVE-2026-95625 (GCVE-0-2026-95625)

    Vulnerability from cvelistv5 – Published: 2026-09-23 08:51 – Updated: 2026-09-23 14:10
    VLAI
    Title
    Tauri framework v2 missing updater signature version number validation can be exploited into forced downgrade
    Summary
    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.
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-23 14:07 UTC
    CWE
    • CWE-354 - Improper Validation of Integrity Check Value
    Impacted products
    Vendor Product Version
    Tauri tauri-plugin-updater Affected: 2.0.0 , < 2.12.0 (semver)
    Affected: 2.12.0 , ≤ * (semver)
    Create a notification for this product.
    Show details on NVD website

    {
      "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": "\u003cp\u003eThe 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\u0027s 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\u0027s private key.\u003c/p\u003e"
                }
              ],
              "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\u0027s 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\u0027s 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": "\u003cp\u003eaddressed 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\u0027s trusted comment, which the signature does cover, and rejects the update when they differ.\u003c/p\u003e"
                }
              ],
              "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\u0027s 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"
    }

    CVE-2026-95624 (GCVE-0-2026-95624)

    Vulnerability from cvelistv5 – Published: 2026-09-22 17:16 – Updated: 2026-09-22 19:30
    VLAI
    Title
    Tauri framework v2 malicious downgrade via allow_downgrades from frontend code
    Summary
    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.
    SSVC
    Exploitation: none Automatable: no Technical Impact: total
    CISA Coordinator · CISA-ADP (v2.0.3)
    Decision recorded 2026-09-22 19:30 UTC
    CWE
    • CWE-284 - Improper Access Control
    Impacted products
    Vendor Product Version
    Tauri tauri-plugin-updater Affected: 2.8.0 , < 2.12.0 (semver)
    Create a notification for this product.
    Date Public
    2026-09-23 10:14
    Show details on NVD website

    {
      "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": "\u003cp\u003eThe Tauri updater plugin\u0027s \u0027check\u0027 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.\u003c/p\u003e"
                }
              ],
              "value": "The Tauri updater plugin\u0027s \u0027check\u0027 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": "\u003cp\u003eFixed 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.\u003c/p\u003e"
                }
              ],
              "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"
    }