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/latestURL. - 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:
kstuff.elfv1.11 connected successfully. Its output reportedapp.dbpatching and a successful SceShellUI trophyIsServerAvailablepatch.- After more than two seconds,
shadowmountplus.elf1.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 loopback127.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:
- import the versioned JSON manifest without executing or downloading anything;
- keep catalog evidence separate from per-user
enabledandfavoritestate; - fetch an artifact only on explicit request into a quarantine/cache directory;
- require the exact byte size and SHA-256 before moving it into the usable cache;
- reject redirects that end outside the expected GitHub release infrastructure, or at minimum record and display the final origin;
- never resolve a mutable
latestURL for these pinned records; - enforce dependency and load order: kstuff-lite, confirmation, then ShadowMountPlus;
- 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:
- confirm the PS5 is on firmware 13.20 and the ELF loader is visibly listening;
- confirm the sender-to-PS5 firewall rule is limited to TCP 9021 on the LAN;
- re-download and verify
kstuff.elfagainst the recorded size and SHA-256; - send only kstuff-lite and record the console result before doing anything else;
- confirm how the loader accepts the second payload and re-establish it if needed;
- re-download and verify
shadowmountplus.elf, then send it separately; - verify the on-console notification and
/data/shadowmount/debug.log; - leave the API loopback-only and automatic downloads disabled for the first test;
- 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.