Application security feature

iOS jailbreak detection

Otukan detects jailbroken iPhones from independent local checks, pairs them with App Attest on your server and applies the response you set for each flow.

  • iOS
Jailbroken devices is met at the environment checks boundary before it reaches the appJailbroken devicesEnvironment checksYour app
  • Independent checks

    Otukan reads filesystem traces, sandbox integrity and loaded code separately, so hiding one side effect does not hide the jailbreak.

  • Paired with App Attest

    Your server can combine Otukan's jailbreak signal with App Attest, which proves requests come from your genuine app.

  • A response per flow

    Each flow gets its own response, so a jailbroken session loses access to payments while legitimate users keep the whole app.

Jailbreak threats Otukan handles

Pick a threat to see how Otukan detects it, how the app responds and what your backend receives.

Rootful jailbreaks

  1. Detect

    Otukan looks for package managers, tweak directories and binaries that jailbreaks install on the system volume.

  2. Respond

    Your policy decides per flow: record, warn, restrict or end the session.

  3. Report

    A jailbreak signal travels to your backend with the next login or transaction request.

Rootless jailbreaks

  1. Detect

    Otukan covers the locations rootless jailbreaks use while the system volume stays unchanged.

  2. Respond

    Rootless and rootful jailbreaks get the same response for the same flow.

  3. Report

    Your backend sees which check fired and can weigh it against account context.

Weakened sandbox

  1. Detect

    Otukan tests whether the app can do what the iOS sandbox normally forbids, such as writing outside its container.

  2. Respond

    Keychain-backed and sensitive flows are restricted on a weakened sandbox.

  3. Report

    A sandbox-integrity signal reaches your server with the request.

Tweak and library injection

  1. Detect

    Otukan finds dynamic libraries in the app's process that were not part of your build.

  2. Respond

    High-risk flows are stepped up or the session ends, as your policy sets.

  3. Report

    An injection signal lets your backend refuse the request.

Hiding tweaks

  1. Detect

    Independent checks mean a tweak has to defeat several of them at once, not just the one it targets.

  2. Respond

    Any positive check is treated as a jailbreak signal for the current flow.

  3. Report

    Your server can pair the result with App Attest before trusting the session.

What Otukan jailbreak detection checks

Three groups of local checks, plus the Apple evidence your server verifies to prove app identity.

  • Filesystem traces

    Files, directories and package manager apps that jailbreaks install, in both rootful and rootless layouts.

  • Sandbox integrity

    Whether the app can do things the iOS sandbox normally forbids, such as writing outside its own container.

  • Loaded code

    Dynamic libraries in the app's process that the app did not ship, the mark of tweak injection and hooking.

  • App identity evidence

    App Attest keys and assertions your server verifies, proving requests come from your genuine app alongside Otukan's jailbreak signal.

You choose the response

Set a response for each user flow. Start by observing, then tighten flow by flow as the signals prove themselves.

Observe

Signal sent to your backend

Rolling out a new policy and measuring real-world signals.

Warn

This device looks modified. Continue with care.

Conditions some genuine users create, such as developer settings.

Restrict

Payments are unavailable on this device.

Payments, stored data and account changes.

Terminate

Session closed for your security.

Clear tampering on a high-risk flow.

How it works

  1. Set your policy

    Choose a response for jailbroken devices in each flow, starting with observe where you want to measure first.

  2. Protect the build

    Otukan fits your existing build and release pipeline. Your signing keys stay with your team.

  3. Checks run on device

    Jailbreak checks run at launch and before sensitive actions, in every session.

  4. Your server decides

    Signals travel with requests and combine with App Attest assertions your server verifies.

Free for app publishers

Check your app's exposure

A passive review of your published app by an Otukan engineer. No files, no access to your systems. Findings go by email to the verified publisher.

You finish the request on the next page.

An iOS app can tell it is running on a jailbroken device when several independent signs agree, and Otukan is built to read those signs. Apple provides no public jailbreak API, so Otukan’s local checks look for the side effects a jailbreak leaves: files the app should not see, sandbox rules that no longer hold, and code in the app’s process that you did not ship. Because the checks are independent, a hiding tweak has to defeat several of them at once. Your server can pair the signal with App Attest and apply the response you set per flow. This page covers iOS; Android root detection is its own control.

The broader set of runtime checks is covered on mobile RASP.

Detection boundary

Two kinds of evidence exist on iOS. They answer different questions, and Otukan uses each for what it proves.

Local checks

These run inside your app and look for the side effects of a jailbreak.

  • Filesystem traces. Package manager apps, tweak directories and binaries that jailbreaks install. Rootless jailbreaks keep the system volume unchanged and place their files elsewhere, and Otukan covers both layouts.
  • Sandbox integrity. Attempts to write outside the app’s container or call functions the sandbox normally blocks. Success shows the sandbox has been weakened.
  • Loaded code. Dynamic libraries in the app’s process that were not part of your build, which is how most tweaks and hooking tools work.
  • URL schemes. Whether a package manager’s URL scheme can be opened. This needs the scheme declared in LSApplicationQueriesSchemes, and it adds one more independent sign.

Platform-provided evidence

App Attest generates a key in the Secure Enclave and lets your server verify that requests come from a genuine instance of your app, identified by your team ID and bundle identifier. DeviceCheck lets your server store two bits per device. Neither reports jailbreak state; together with Otukan’s local checks they give your server both halves of the picture.

EvidenceWhere it is evaluatedWhat it shows
Otukan local checksIn the app, reported to your serverJailbreak side effects on this device, by check
App AttestOn your serverThe request comes from your genuine app
DeviceCheckOn your serverPer-device state your server set earlier

Supported versions

OS-dependent behaviour

Jailbreak techniques are tied to iOS versions and chips, and they change with each release. File locations, sandbox behaviour and the libraries a jailbreak injects all differ between versions. Some older chips have a bootrom weakness that a software update cannot patch, so those devices stay exposed across iOS updates. Otukan keeps its checks current as new iOS versions and jailbreaks appear, and each check carries its own tested iOS version range, which we share in a technical session.

Build and distribution

Checks behave differently depending on how the app is built and shipped. An Objective-C method can be swapped at runtime, so Otukan does not rely on a single method a tweak can replace. Swift, Objective-C, Flutter and React Native apps all get the same checks, and the result reaches your policy directly. Development, TestFlight, enterprise and App Store builds carry different entitlements and signing, and app extensions run in their own, more limited process. Otukan documents how each check behaves in each of these.

Staying current

Every Otukan check is proven on signed builds running on physical devices, and retested on each new iOS version. iOS-specific guidance is covered on iOS app security.

Response policy

Continuity for legitimate users

Otukan reports which check fired and lets you start in observe mode. An unusual reading on a legitimate device then affects one flow, not the whole app, and your team sees exactly why.

Choosing a response per flow

FlowRecommended starting responseWhy
Browsing and public contentObserve and recordA jailbreak changes little about the risk here
LoginSend the signal with the request; decide on the serverThe backend combines it with App Attest and account context
Keychain-stored secretsLimit what is stored locallyA jailbreak can expose app data and Keychain items
Payments and account changesStep up or refuse, based on combined signalsThe cost of a wrong decision is highest

Measure how often each check fires on real users, then tighten flow by flow. Policy design for runtime signals is covered on threat response.

Proving each check

Before your protected release ships, Otukan proves each check with your team:

  1. Reproduce a jailbreak in an authorised lab and confirm the expected signal.
  2. Run the same journey on a legitimate, supported device and confirm the check stays quiet.
  3. Repeat install, update, login and your most sensitive flow on the signed build.

Results are recorded with devices, iOS versions and the reviewer. For a structured way to evaluate options, see the iOS jailbreak detection solution guide.

Common questions

  • Can App Attest tell us a device is jailbroken?

    No. App Attest lets your server confirm that requests come from a genuine instance of your app, using a key held in the Secure Enclave. It does not report jailbreak state. That is why Otukan's local checks and App Attest work well together: one tells you about the device, the other proves the request comes from your app.

  • Why is jailbreak detection different on iOS from root detection on Android?

    The iOS sandbox limits what an app can learn about the rest of the system, and Apple offers no jailbreak verdict. Detection therefore reads side effects, such as files the app should not see or code it did not load. Otukan runs several independent checks, so a hiding tweak has to defeat them together rather than one at a time.

  • Do jailbreak checks work in the simulator?

    The simulator runs on macOS with a different filesystem and no Secure Enclave, and App Attest is not supported there. Otukan proves its checks on signed builds running on physical devices, and that is where your team should judge detection and false-positive behaviour too.

  • Which iOS versions can be jailbroken?

    It changes over time and by device. Public jailbreaks target specific iOS versions and chips, and some older chips have a bootrom weakness that software updates cannot fix. Otukan plans for jailbroken devices on every iOS version you support and keeps its checks current as new versions and jailbreaks appear.

On the mobile engineering team?

How protection fits your build, signing and release, platform by platform.

Related

Know when your app runs jailbroken

Tell us the iOS versions you support, whether the app is Swift, Objective-C or cross-platform, and which flows you most need to protect. We do not ask for binaries, signing keys or production credentials.

Or request a technical demo