CVE-2025-0509
High · 7.3Sparkle Signing Checks Bypass
CVSS
7.3
EPSS
0.9%
Published
Feb 4, 2025
CISA due date
—
Cloudanix analysis
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
- Locate applications distributed via Sparkle that have not yet updated past the vulnerable versions.
- Position to intercept or control the update feed (compromised server, CDN compromise, or network position).
- Replace the signed update artifact with a malicious payload that preserves or mimics required metadata.
- 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
- CVE-2026-21945 Vulnerability in the Oracle Java SE, Oracle GraalVM for JDK, Oracle GraalVM Enterprise… Also affects openjdk-11-openj9
- CVE-2026-21932 Vulnerability in the Oracle Java SE, Oracle GraalVM for JDK, Oracle GraalVM Enterprise… Also affects openjdk-11-openj9
- CVE-2026-21933 Vulnerability in the Oracle Java SE, Oracle GraalVM for JDK, Oracle GraalVM Enterprise… Also affects openjdk-11-openj9
- CVE-2026-21925 Vulnerability in the Oracle Java SE, Oracle GraalVM for JDK, Oracle GraalVM Enterprise… Also affects openjdk-11-openj9
- CVE-2025-21502 Vulnerability in the Oracle Java SE, Oracle GraalVM for JDK, Oracle GraalVM Enterprise… Also affects openjdk-11-openj9
- CVE-2024-40896 In libxml2 2.11 before 2.11.9, 2.12 before 2.12.9, and 2.13 before 2.13.3, the SAX parser… Also affects openjdk-11-openj9
- CVE-2024-54534 The issue was addressed with improved memory handling. Also affects openjdk-11-openj9
- CVE-2024-47775 GStreamer is a library for constructing graphs of media-handling components. Also affects openjdk-11-openj9