Sparkle: Binary delta apply intermediate-symlink traversal in malicious .delta (sparkle-project Sparkle)

CVE-2026-47121
MEDIUM 6.1

At a glance

Source
NVD
EPSS
EPSS 0.34 % Β· percentile 27 ()
State
PUBLISHED
Published
Updated
Assigner
GitHub_M
NVD status
Analyzed

Description

Sparkle is a software update framework for macOS. Prior to version 2.9.2, `Autoupdate/SUBinaryDeltaApply.m` enforces `relativePath.pathComponents containsObject:@".."` and rejects writes whose immediate parent directory IS itself a symbolic link, but does not detect symlinks deeper in the relative path. `Autoupdate/SPUSparkleDeltaArchive.m`'s `extractItem:` will create symlinks in the destination tree from archive content (no `..` check on the symlink target), and a subsequent `Extract` item targeting `<symlink>/foo/bar` then escapes the destination tree via `fopen(path, "wb")` because the kernel resolves the intermediate symlink during the open call. This is a defense-in-depth issue: exploitation requires a maliciously-crafted `.delta` that passes EdDSA signature verification, i.e. EdDSA private-key compromise. With the AppInstaller running as root for system-domain installs, it gives the holder of a stolen signing key arbitrary file write at root level via the delta-apply path, which is a strictly broader primitive than the "drop-in replacement bundle" install they would otherwise have. Version 2.9.2 contains a patch for the issue.

Weaknesses (CWE)

  • CWE-22 β€” Improper Limitation of a Pathname to a Restricted Directory
  • CWE-59 β€” Improper Link Resolution Before File Access

References

Scores

VersionScoreVectorScored by
CVSS 3.1MEDIUM 6.1CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:N/I:H/A:NGitHub_M
CVSS 3.1MEDIUM 6.1CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:N/I:H/A:NNVD Β· security-advisories@github.com (Secondary)

European references

Affected configurations (NVD CPE)

Affected products

ProductVersions
sparkle-project Β· Sparkleaffected < 2.9.2

Sources

SourceLicence
CVE List (CVEProject cvelistV5)CVE Program Terms of Use
EPSS (FIRST.org)FIRST β€” attribution requested
ENISA EUVDENISA β€” reproduction authorised, source acknowledged
NVD (NIST) via fkie-cad/nvd-json-data-feedsPublic domain β€” this product uses data from the NVD API but is not endorsed or certified by the NVD