padosoft-mobile-security-reviewlisted
Install: claude install-skill padosoft/skills
# Mobile security review
**The premise that decides everything: the bundle is shipped to every device and can be decompiled.** Anything
in the bundle or in a committed asset is public. `EXPO_PUBLIC_*` variables are inlined at build time, so they
are public configuration — never a secret, never a runtime security boundary.
Run these before committing a change to the areas below. A HIGH/CRITICAL violation should bounce the PR.
---
## 1. No secrets in the bundle — `MOBILE-SEC-SECRET-001`
```bash
grep -rnE "privateKey|BEGIN (RSA |EC )?PRIVATE KEY|pkcs12|p12Password|apiKey\s*[:=]\s*[\"']" src apps packages
grep -rn "EXPO_PUBLIC_" src apps packages | grep -iE "secret|token|key|password"
```
No private cryptographic material in source: RSA PEM, PKCS12 blobs, the PKCS12 password. No hardcoded API
keys. `.env` (non-example) gitignored.
**The JS on the device is not obfuscated.** Metro minifies and Hermes emits bytecode: that shortens **names**,
not **string constants**. A PEM comes out of a Hermes bundle with `strings`. And an OTA bundle travels over
the network and stays in a cache — less friction than native code, not more.
**A key distributed over the air is public from the moment you distribute it**, so rotating it does not
restore secrecy.
### When the constraint is real, the remediation has to respect it
A client certificate has to be **rotatable**, and rotating something in native code needs a store release —
whoever does not update is left with a key the server rejec