Skip to content

Back to the catalog

Beyond Prompt Injection: Hacking Apple's Private Cloud Compute
blog.sentry.securitywriteup

Beyond Prompt Injection: Hacking Apple's Private Cloud Compute

Sentry researcher Drinor Selmanaj found CVE-2026-20685, a path traversal (Zip Slip/CWE-22 class) in darwin-init, the root PID 1 process that provisions Apple Private Cloud Compute nodes by extracting cryptex bundles. By crafting a tar archive that is simultaneously a valid cryptex and a set of traversal entries, the attacker writes files as root to the persistent /var/db data volume during boot, redirects the splunkloggingd log forwarder to an attacker-controlled server, and exfiltrates CloudBoard/Trusted Inference Engine telemetry including per-request metadata, token counts, and timing side-channels — while PCC's attestation, which only measures installed software, remains indistinguishable from a clean boot. Apple rated it CVSS 6.5 information disclosure, patched it in PCC 5E290.3+, and paid a $150,000 Apple Security Bounty award.

TL;DR A 30-year-old Zip Slip bug in Apple PCC's darwin-init let a researcher write files as root, hijack log forwarding, and leak AI inference telemetry while evading attestation — earning CVE-2026-20685 and a $150K bounty.
Document

What it is

CVE-2026-20685: a Zip Slip / CWE-22 path traversal in darwin-init, the root PID 1 provisioner for Apple Private Cloud Compute nodes. Found by Drinor Selmanaj (Sentry/SARC) inside Apple's Virtual Research Environment. CVSS 6.5 (AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N), fixed in PCC 5E290.3+, $150,000 bounty. A more detailed technical paper is promised "in the coming weeks."

How it works

darwin-init reads only the first four bytes of a downloaded artifact to pick an extractor. A tar's ustar magic sits at offset 257, so a tar matches nothing and falls through to a generic extract(to:). That function appends the archive entry name to the output dir with no sanitation, and sets only ARCHIVE_EXTRACT_TIME|PERM|ACL|FFLAGS — none of libarchive's security flags — so entries write wherever they point and return ARCHIVE_OK. Two would-be controls fail: PrivateCloudOSValidator.validate(cryptexConfig:) is an empty function body in published source, and the per-cryptex sha256 digest is optional (attacker supplies the config, omits it).

Extraction base is /var/tmp/darwin-init/cryptex/<UUID>/ (four levels deep). Three .. reach /var/tmp (wiped by userspace reboot); four reach /var/db, which persists. The malicious tar must be both a traversal exploit and a valid cryptex, else the fullyApplied check fails and boot hangs. So it carries traversal entries (../../../../db/...) plus a genuine Restore/BuildManifest.plist and cryptex bundle built with Apple's own pccvre cryptex create.

Impact escalation: one traversal entry writes /var/db/prcos/splunkloggingd/config-main.plist, whose existence trips a PathState KeepAlive that starts splunkloggingd pointed at the attacker's Server. Redirected telemetry leaked CloudBoard state plus per-request bundleID/workloadType/requestID/automatedDeviceGroup, TIE token counts, and per-token timing (speculative-decoding side channel).

flowchart TD
    A[tar artifact] --> B{first 4 bytes<br/>match magic?}
    B -->|yes .aar| C[safe AA01 extractor]
    B -->|no| D[generic extract to:<br/>no security flags]
    D --> E["../../../../db/ writes<br/>as root, survive reboot"]
    E --> F[splunkloggingd config →<br/>attacker endpoint]
    F --> G[exfil inference telemetry]
    E -.-> H[attestation measures<br/>installed software only]

The attestation gap

A nonce-controlled diff of clean vs. poisoned boots (byte-identical .cxbd bundles) showed pccvre attestation verify treated both identically at every level. Attestation measures installed software, not writable-volume config files — so a poisoned node is indistinguishable from a clean one. This is the detection-relevant finding: runtime config on /var/db is outside the attested surface.

Caveats

Verified only in the VRE (PCC release 37684 / 5E290.3-era), not production; the research-only Debug Shell used for proof is absent in production. Rated information disclosure — no integrity/availability impact claimed.

Organisations named here

  • Apple Security Bounty
  • Drinor Selmanaj
  • Sentry Applied Research Center
  • Zip Slip

CVEs named here

  • CVE-2026-20685
  • CVE-2007-4559

Technologies named here

  • Apple Private Cloud Compute
  • Virtual Research Environment
  • darwin-init
  • pccvre
  • libarchive
  • Apple Intelligence
  • Siri AI
  • cryptexctl
  • PCC release 37684
  • CVE-2026-20685.py
  • PCC releases 5E290.3 and later
  • Debug Shell
  • splunkloggingd
  • macOS
  • Private Cloud Compute

Techniques named here

  • Path traversal
  • Malicious cryptex crafting
  • Root file write during boot window
  • LaunchDaemon config hijack via PathState KeepAlive
  • Side-channel metadata/telemetry exfiltration
  • Attestation bypass / integrity gap

Also named here

  • CWE-22