Files

7.6 KiB

Payload candidate evidence: kstuff-lite and ShadowMountPlus

Evidence date: 2026-10-02

This directory records a controlled intake and startup smoke test of two payload candidates on a PS5 running firmware 13.20. The verified payloads were sent once, in dependency order, from net-utils01 to the console's ELF loader. No downloaded binary is stored in this repository or left in the server's temporary directory.

The machine-readable handoff for a future payload-manager repository is manifest-2026-10-02.v1.json. It deliberately imports both candidates as disabled and not favorited. Runtime success does not implicitly enable a catalog entry. User state such as active/inactive and favorite must be stored separately from source evidence.

Selected releases

Payload Release and commit Release asset Size SHA-256
kstuff-lite v1.11, 85fb88a526e58e357d6f1e626ce05af4acdb8b5d kstuff.elf 1,737,080 ab9a6cb4d3b1daf139d4d646e402b1cf569071acd64599c936d7a3a6164dc779
ShadowMountPlus 1.7beta3, f0d15ffc46e9237d41cc3555b1cf11362d9a32e0 shadowmountplus.elf 2,437,848 2a7427e20ba7a70bd8cd01e47eb00ee7ca82db82dff3da7884f48f9c3fcbe95a
ShadowMountPlus support bundle 1.7beta3, same commit ShadowMountPlus_1.7beta3.zip 1,352,255 2fb8edd89f2390a4a6a7b568ed9c5f34db01705781e0f3f386beb6612d29b6aa

The files were downloaded from the release URLs recorded in the manifest. Each locally calculated digest matched the SHA-256 digest returned by GitHub's release API. The ELF inside the ShadowMountPlus ZIP was also byte-for-byte identical to the separately published shadowmountplus.elf.

Static findings

Both payloads are stripped, dynamically linked, position-independent ELF64 x86-64 executables. Static inspection alone cannot establish that a privileged payload is safe.

The kstuff-lite v1.11 release states support for firmware 1.00 through 13.60, which includes the target firmware 13.20. ShadowMountPlus documents kstuff-lite v1.07 or newer as a dependency, so the intended order is kstuff-lite first and ShadowMountPlus second.

ShadowMountPlus contains HTTP, HTTPS and networking support. Its supplied default configuration enables an HTTP API only on loopback 127.0.0.1:10101; automatic AMPR downloading is disabled; mounts are read-only; forced mounts and persistent mounts are disabled. Do not change the API bind address to 0.0.0.0 without a separate firewall and threat review. Upstream also warns that mounting images can cause shutdown problems and data corruption.

Provenance limitations

  • GitHub release digests demonstrate that the downloaded bytes match the assets currently registered by GitHub. They do not prove benign behavior.
  • Neither release provides a detached signature, SBOM, or build attestation for the ELF. Both referenced source commits are unsigned.
  • kstuff-lite's CI downloads a toolchain through a mutable releases/latest URL.
  • ShadowMountPlus's workflow checks out build dependencies without immutable commit pins.
  • This review did not reproduce either ELF from source. The relationship between each binary and its source commit is therefore asserted by the publisher, not independently proven by a reproducible build.
  • A tag and its release assets can be moved or replaced upstream. The payload manager must treat the recorded SHA-256 and size as authoritative and reject any mismatch instead of silently accepting replacement bytes.

Runtime smoke-test evidence

At 2026-10-02T12:42:02Z, the two hash-verified ELFs were sent sequentially from net-utils01 (192.168.20.30) to the PS5 (192.168.40.14) over TCP 9021. The Relapse page had already reached elfldr is listening on port 9021; no R2 action was involved.

The observed sequence was:

  1. kstuff.elf v1.11 connected successfully. Its output reported app.db patching and a successful SceShellUI trophy IsServerAvailable patch.
  2. After more than two seconds, shadowmountplus.elf 1.7beta3 connected successfully. It detected firmware 13.20, reported kstuff runtime control ready, installed its SceShellCore hooks, started the game lifecycle watcher, synchronized the library with zero games found and started its API on loopback 127.0.0.1:10101.

The effective first-run defaults kept mounts read-only, forced and persistent mounting disabled, automatic AMPR downloads disabled, and the API unavailable to the LAN. The temporary copies of both ELFs were removed from net-utils01 after the send.

This is a startup smoke test only. No image was mounted, and suspend/resume, shutdown, reboot, API actions, gameplay stability and automatic kstuff pause/resume were not tested.

Payload-manager import contract

The manager should:

  1. import the versioned JSON manifest without executing or downloading anything;
  2. keep catalog evidence separate from per-user enabled and favorite state;
  3. fetch an artifact only on explicit request into a quarantine/cache directory;
  4. require the exact byte size and SHA-256 before moving it into the usable cache;
  5. reject redirects that end outside the expected GitHub release infrastructure, or at minimum record and display the final origin;
  6. never resolve a mutable latest URL for these pinned records;
  7. enforce dependency and load order: kstuff-lite, confirmation, then ShadowMountPlus;
  8. record every send attempt with payload ID, version, digest, target, timestamp, result and operator identity, without storing credentials in the log.

Release discovery may propose newer versions, but it must create a new candidate record and require review. It must never overwrite the evidence for an already approved digest.

For integration with Y2JB Autoloader, keep the manager as the executor of the post-jailbreak chain. The autoloader should stop after Relapse and an externally reachable, reviewed ELF loader are ready. Do not duplicate kstuff-lite or ShadowMountPlus in autoload.txt, because their execution would bypass manager hash checks, dependency handling and audit records. The default loopback-only loader must be replaced or explicitly configured for the LAN integration; access must remain restricted by firewall to 192.168.20.30 → 192.168.40.14:9021.

The first manager profile should encode kstuff-lite, positive startup evidence, at least 4000 ms delay, then ShadowMountPlus. An open port is not positive startup evidence. Runtime state is valid only for the current console boot and must be invalidated after reboot or ambiguous connectivity loss.

Controlled runtime-test procedure

The current Relapse flow ends at elfldr is listening on port 9021; there is no R2 step. Use the following procedure for a repeat test only after explicit operator approval:

  1. confirm the PS5 is on firmware 13.20 and the ELF loader is visibly listening;
  2. confirm the sender-to-PS5 firewall rule is limited to TCP 9021 on the LAN;
  3. re-download and verify kstuff.elf against the recorded size and SHA-256;
  4. send only kstuff-lite and record the console result before doing anything else;
  5. confirm how the loader accepts the second payload and re-establish it if needed;
  6. re-download and verify shadowmountplus.elf, then send it separately;
  7. verify the on-console notification and /data/shadowmount/debug.log;
  8. leave the API loopback-only and automatic downloads disabled for the first test;
  9. avoid suspend, forced shutdown and writable mounts until the basic lifecycle has been observed successfully.

A TCP connection probe is not a payload test. Do not infer runtime success from an open port. Keep each execution as an independent runtime record rather than overwriting this evidence.