CVE-2026-47122: Sparkle's AppInstaller post-stage-1 XPC listener accepts unvalidated connections, allowing spoofed appcast item data injection

Published May 29, 2026
·
Updated

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

2 affected components
swift/github.com/sparkle-project/Sparkle<=2.9.1
Sparkle-project Sparkle<=2.9.1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. 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
  2. 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

May 29, 2026
Advisory Published
via GitHub·07:47 PM
Data Sourced
via GitHub·07:47 PM
DescriptionSeverityWeaknessAffected Software
Jul 21, 2026
CVE Published
via MITRE·01:57 PM
Data Sourced
via MITRE·01:57 PM
DescriptionSeverityWeakness
Data Sourced
via NVD·03:16 PM
DescriptionSeverityWeaknessAffected Software
Free Weekly Intel

Don't miss critical vulnerabilities

Join thousands of security professionals who receive our weekly digest of trending CVEs, zero-days, and exploited vulnerabilities.

No spam. Unsubscribe anytime.

Frequently Asked Questions

1

What is the severity of CVE-2026-47122?

CVE-2026-47122 has a medium severity rating of 4.2.

2

What is the risk factor associated with CVE-2026-47122?

CVE-2026-47122 has a risk factor rating of 28.

3

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.

4

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.

5

Which software is affected by CVE-2026-47122?

CVE-2026-47122 affects the Sparkle software library hosted on GitHub.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203