14.4 · Deep links, secrets in the binary, and jailbreak detection
The attacker controls more than you think: the URLs that open your app, the binary they can download and run on their own device, and the environment it executes in.
Mental model. Anything that reaches your app from outside is untrusted input, and anything inside the shipped binary is public. Design as if both were already known to the attacker.
Untrusted input
Deep links as an attack surface.
- Why are deep links an attack surface, and how do you validate them?
A deep link is a URL that opens your app and tells it what to do (myapp://transfer?to=…&amount=… or a universal link). Any app, web page, QR code or message…
What the attacker has
Secrets in the binary, and how far jailbreak detection can go.
- Why are secrets in the app binary not secret, and what do you do instead?
Everything you ship runs on a device the attacker owns, and an iOS app binary can be downloaded, decrypted and inspected with common tools in minutes. A string… - What can jailbreak detection and pinning actually achieve, and what are their limits?
A jailbroken device lets the owner run code outside the sandbox: attach debuggers, hook functions at runtime (Frida, Substrate), read app memory and files, and…
More in Security & privacy
- 14.1 · Hashing, MACs, encryption and signatures with CryptoKit
- 14.2 · LocalAuthentication, the Secure Enclave, and App Attest
- 14.3 · Privacy manifests, tracking and ATT, and everyday data hygiene
- 14.5 · A threat model for a consumer app
- 14.6 · CryptoKit in practice: AEAD, key agreement, signatures, one-time codes and tokens
- 14.7 · Trust in practice: pinning by public key, ATS scope, code signatures and Secure Enclave keys
- 14.8 · Defensive coding: secure decoding, injection, dependency integrity and file protection