Cloudanix VulnDB

CVE-2025-0509

High · 7.3

Sparkle Signing Checks Bypass

CVSS

7.3

EPSS

0.9%

Published

Feb 4, 2025

CISA due date

—

Cloudanix analysis

Monitor only SSVC: Track

Attackers could trick apps into installing harmful updates that should have been blocked by security checks, potentially giving them control over many computers.

Exploitation
Supply Chain
Attacker needs
Low Privilege
Complexity
Moderate
Impact
Full Compromise
Component
Library
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The flaw allows an attacker to substitute a legitimately signed update package with a malicious payload that evades the library's (Ed)DSA signature verification, enabling delivery of arbitrary code under the guise of a trusted update.

Why it matters to the business

Organizations relying on the affected update mechanism face elevated risk of supply-chain compromise, potentially resulting in widespread malware deployment across user bases and requiring emergency patching or rollback procedures.

How an attack unfolds

An attacker identifies an application using the vulnerable Sparkle library, crafts or obtains a malicious update archive, replaces the legitimate signed update at the distribution endpoint or MITM position, and relies on the bypassed signature check to have the payload accepted and executed as a valid update.

How to fix it

Upgrade all instances of sparkle-project/sparkle to the fixed commit 0ef1ee0220239b3776f433314515fd849025673f (corresponding to version 2.6.4 or later). Rebuild and redistribute affected applications with the patched library. Verify that update channels enforce the corrected verification logic.

How to confirm the fix worked

Confirm the presence of the fixed commit in the build dependency tree or source. Test by attempting to serve a deliberately altered update package and verify that the client rejects it with a signature error. Monitor update telemetry for successful installations only from known-good hashes.

Typical attack path

  1. Locate applications distributed via Sparkle that have not yet updated past the vulnerable versions.
  2. Position to intercept or control the update feed (compromised server, CDN compromise, or network position).
  3. Replace the signed update artifact with a malicious payload that preserves or mimics required metadata.
  4. Trigger the application's update check so the tampered package is downloaded and installed without signature rejection.

How to detect it

Examine update-related logs and network captures for unexpected payload hashes or signature verification failures that were previously logged as successes. Correlate application launch events following update checks with unusual binary signatures or process ancestry.

What your security team should do

  • Immediately inventory all products shipping Sparkle and schedule upgrades to the fixed commit.
  • Add the library to the organization's software bill of materials and vulnerability scanning rules.
  • Review update distribution infrastructure for tampering protections such as additional code signing or pinned manifests.
  • Communicate the update requirement to downstream application vendors and users.

The record

A security issue was found in Sparkle before version 2.6.4. An attacker can replace an existing signed update with another payload, bypassing Sparkle’s (Ed)DSA signing checks.

Affected packages

Ecosystem Package Introduced Fixed
Chainguard openjdk-11-openj9 0 0.53.0-r0
Chainguard openjdk-11-openj9-dbg 0 0.53.0-r0
Chainguard openjdk-11-openj9-default-jdk 0 0.53.0-r0
Chainguard openjdk-11-openj9-default-jvm 0 0.53.0-r0
Chainguard openjdk-11-openj9-default-policy 0 0.53.0-r0
Chainguard openjdk-11-openj9-doc 0 0.53.0-r0
Chainguard openjdk-11-openj9-jmods 0 0.53.0-r0
Chainguard openjdk-11-openj9-jre 0 0.53.0-r0
Chainguard openjdk-17-openj9 0 0.53.0-r0
Chainguard openjdk-17-openj9-dbg 0 0.53.0-r0
Chainguard openjdk-17-openj9-default-jdk 0 0.53.0-r0
Chainguard openjdk-17-openj9-default-jvm 0 0.53.0-r0
Chainguard openjdk-17-openj9-default-policy 0 0.53.0-r0
Chainguard openjdk-17-openj9-doc 0 0.53.0-r0
Chainguard openjdk-17-openj9-jmods 0 0.53.0-r0
Chainguard openjdk-17-openj9-jre 0 0.53.0-r0
Chainguard openjdk-21-openj9 0 0.53.0-r0
Chainguard openjdk-21-openj9-dbg 0 0.53.0-r0
Chainguard openjdk-21-openj9-default-jdk 0 0.53.0-r0
Chainguard openjdk-21-openj9-default-jvm 0 0.53.0-r0
Chainguard openjdk-21-openj9-default-policy 0 0.53.0-r0
Chainguard openjdk-21-openj9-doc 0 0.53.0-r0
Chainguard openjdk-21-openj9-jmods 0 0.53.0-r0
Chainguard openjdk-21-openj9-jre 0 0.53.0-r0
Chainguard openjdk-8-openj9 0 0.53.0-r1
Chainguard openjdk-8-openj9-dbg 0 0.53.0-r1
Chainguard openjdk-8-openj9-default-jdk 0 0.53.0-r1
Chainguard openjdk-8-openj9-default-jvm 0 0.53.0-r1
Chainguard openjdk-8-openj9-doc 0 0.53.0-r1
Chainguard openjdk-8-openj9-jre 0 0.53.0-r1
SwiftURL github.com/sparkle-project/Sparkle 0 2.6.4
Ubuntu:16.04:LTS openjdk-9 0 No fix
Ubuntu:20.04:LTS openjdk-13 0 No fix
Ubuntu:20.04:LTS openjdk-16 0 No fix
Ubuntu:20.04:LTS openjdk-17 0 No fix
Ubuntu:20.04:LTS openjdk-21 0 No fix
Ubuntu:20.04:LTS openjdk-8 0 No fix
Ubuntu:20.04:LTS openjdk-lts 0 No fix
Ubuntu:22.04:LTS openjdk-17 0 No fix
Ubuntu:22.04:LTS openjdk-18 0 No fix
Ubuntu:22.04:LTS openjdk-19 0 No fix
Ubuntu:22.04:LTS openjdk-21 0 No fix
Ubuntu:22.04:LTS openjdk-8 0 No fix
Ubuntu:22.04:LTS openjdk-lts 0 No fix
Ubuntu:24.04:LTS openjdk-17 0 No fix
Ubuntu:24.04:LTS openjdk-21 0 No fix
Ubuntu:24.04:LTS openjdk-8 0 No fix
Ubuntu:24.04:LTS openjdk-lts 0 No fix
Ubuntu:24.10 openjdk-17 0 No fix
Ubuntu:24.10 openjdk-21 0 No fix
Ubuntu:24.10 openjdk-22 0 No fix
Ubuntu:24.10 openjdk-23 0 No fix
Ubuntu:24.10 openjdk-8 0 No fix
Ubuntu:24.10 openjdk-lts 0 No fix
Ubuntu:Pro:16.04:LTS openjdk-8 0 No fix
Ubuntu:Pro:16.04:LTS openjdk-9 0 No fix
Ubuntu:Pro:18.04:LTS openjdk-17 0 No fix
Ubuntu:Pro:18.04:LTS openjdk-8 0 No fix
Ubuntu:Pro:18.04:LTS openjdk-lts 0 No fix
Ubuntu:Pro:20.04:LTS openjdk-13 0 No fix
Ubuntu:Pro:20.04:LTS openjdk-16 0 No fix

Related vulnerabilities