CVE-2026-47122: Sparkle's AppInstaller post-stage-1 XPC listener accepts unvalidated connections, allowing spoofed appcast item data injection
Summary
AppInstaller post-stage-1 XPC listener accepts unvalidated connections, allowing spoofed appcast item data injection.
Details
Autoupdate/AppInstaller.m's shouldAcceptNewConnection: only enforces SUCodeSigningVerifier validateConnection: before stage 1 completes. After performedStage1Installation = YES, new connections to the registered Mach service <bundleId>-spki are accepted from any local process without team-ID or code-signing checks.
The following chain of events enables an attacker to inject a spoofed SPUSentUpdateAppcastItemData payload:
1. Installer finishes unarchiving the update successfully (willCompleteInstallation is set). 2. The app responsible for updating the bundle crashes or is forcefully quit before it has a chance to send SPUSentUpdateAppcastItemData to the installer. There is no user interaction between the prior step and this one, so the timing window is tight. 3. After stage 1 of the installer is performed (performedStage1Installation = YES), but before final installation completes (since all services are cleaned up by then), an attacker process connects to the <bundleId>-spki Mach service - no code-signing validation is enforced - and sends a spoofed SPUSentUpdateAppcastItemData message containing an attacker-crafted SUAppcastItem. 4. A Sparkle-aware app that checks for updates on the bundle being updated launches before installation completes. The progress agent re-broadcasts the spoofed SUAppcastItem on its <bundleId>-spks status service, and the launching app displays attacker-controlled release notes (name, version, critical flag).
Note: Sparkle can be used to update other app bundles, so the "app doing the updating" and the "app being updated" are not necessarily the same bundle.
In the system-domain case (SPUUsesSystemDomainForBundlePath = true), the AppInstaller runs as root via SMJobSubmit to kSMDomainSystemLaunchd, and the Mach service is reachable by any local user process.
Affected versions: 2.x branch including 2.9.1.
Impact
A local user-level process can inject a forged SUAppcastItem (arbitrary name, version, critical flag) into the progress agent's status broadcast. Other Sparkle-aware clients on the system will display attacker-controlled release notes as authoritative installation state.
The integrity of the installed code is not affected - the bundle moved into place is the legitimate, signature-validated update from stage 1. The impact is limited to UI spoofing of installation metadata.
Remediation
Enforce SUCodeSigningVerifier validateConnection: on all new connections regardless of installation stage, or disallow SPUSentUpdateAppcastItemData after the active connection invalidates.
Other sources
Sparkle is a software update framework for macOS. In versions up to and including 2.9.1, Autoupdate/AppInstaller.m's shouldAcceptNewConnection: only enforces SUCodeSigningVerifier validateConnection: before stage 1 completes. After performedStage1Installation = YES, new connections to the registered Mach service <bundleId>-spki are accepted from any local process without team-ID or code-signing checks. As of time of publication, no known patched versions are available.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
In Autoupdate/AppInstaller.m, update shouldAcceptNewConnection: so that SUCodeSigningVerifier validateConnection: is applied to every new connection, not only before `_performedStage1Installation = YES` (affected versions include the 2.x branch up to and including 2.9.1).
Sparkle/AppInstaller (Autoupdate/AppInstaller.m) shouldAcceptNewConnection: SUCodeSigningVerifier validateConnection: enforcement = Enforce on all new connections regardless of installation stage - Configuration
In the AppInstaller post-stage-1 XPC/Mach listener path, disallow receiving `SPUSentUpdateAppcastItemData` once the active connection becomes invalid (to prevent attacker injection of a spoofed `SPUSentUpdateAppcastItemData` containing a forged `SUAppcastItem`).
Sparkle/AppInstaller Mach service <bundleId>-spki SPUSentUpdateAppcastItemData acceptance = Disallow after the active connection invalidates
Event History
Frequently Asked Questions
What is the severity of CVE-2026-47122?
CVE-2026-47122 has a medium severity rating of 4.2.
What is the risk factor associated with CVE-2026-47122?
CVE-2026-47122 has a risk factor rating of 28.
How do I fix CVE-2026-47122?
To mitigate CVE-2026-47122, ensure that your application enforces stricter validation of connections before accepting new ones.
What does CVE-2026-47122 exploit?
CVE-2026-47122 allows for spoofed appcast item data injection through unvalidated connections accepted by the AppInstaller post-stage-1 XPC listener.
Which software is affected by CVE-2026-47122?
CVE-2026-47122 affects the Sparkle software library hosted on GitHub.