Skip to content

Collect what is known about tags in owner-connected mode - #171

Merged
parawanderer merged 1 commit into
mainfrom
docs/owner-connected-tag-research
Aug 31, 2026
Merged

Collect what is known about tags in owner-connected mode#171
parawanderer merged 1 commit into
mainfrom
docs/owner-connected-tag-research

Conversation

@parawanderer

@parawanderer parawanderer commented Aug 31, 2026

Copy link
Copy Markdown
Owner

Adds docs/owner-connected-tags.md — a reading list for the one case this app cannot handle, with a summary of what each source actually establishes rather than just a pile of links.

Why

A tag that is with its owner is not in the Offline Finding network at all. No stranger's iPhone reports it, so there is nothing on Apple's servers to fetch however far back we look — which is why Apple's own app falls back to "last seen by your device". Everything in this area has to happen over Bluetooth, locally.

What is known about it was scattered across two blog series, four papers, three GitHub threads and a FRIDA repository, and none of it says which parts are settled.

The finding worth the document

stek29, in FindMy.py #88. He tested the proof of concept everyone reaches for against real AirTags with the owner device nearby, and it failed — the characteristic it writes to, 4F860003-943B-49EF-BED4-2F730304427A, was not present on the device at all. His own correction:

I just realised this PoC is about unauthorized sound command, not about ringing when AirTag is in "owner is nearby" mode. authorised sound playback seems to be a completely different beast, requiring l2cap communication

Unauthorised ringing (any passer-by) and authorised ringing (the owner, tag nearby) are two different protocols, and only the first is a simple GATT write. Somebody starting from the obvious PoC would spend a week finding that out.

That has a bearing on #139, which plays a nearby accessory's sound over GATT — so the document says so rather than leaving it to be noticed later.

Also collected

  • What a nearby tag broadcasts, versus a separated one — primary key rotating ~15 minutes, secondary key daily at 04:00 — from The Binary Hick's two Lost Apples posts, plus malmeloo's own one-paragraph statement in FindMy.py Nearby, separated, lost? malmeloo/FindMy.py#137
  • Adam Catley on the first six bytes of the P-224 key travelling as the BLE device address, so only 23 of 29 bytes appear in the advertisement
  • seemoo-lab/airtag — the FRIDA scripts that do play sounds on a paired tag, and what its jailbreak requirement actually is (iOS 14.6–14.8, checkm8 hardware). This is the resource stek29 named for the L2CAP side
  • The papers — WOOT'22 AirTag of the Clones, PoPETs 2021 Who Can Find My Devices?, the AirGuard paper, PoPETs 2023 Track You
  • AirGuard, which malmeloo says already rings tags from Android. Marked unverified — it is the strongest lead here, an Apache-2.0 Android existence proof, and precisely because of that it should not be taken on trust. GitHub code search returned nothing useful and I did not want to assert a file I had not read.

Clean room

Nothing was read out of rustpush, apple-private-apis or export-findmy, per docs/findmy-export/README.md. stek29's public issue comments are quoted; his branches are not opened.

Index row added to docs/README.md in the same commit, per rule 10.


🤖 Generated with Claude Code

The one case this app cannot handle: a tag that is with its owner, so it
is not in the Offline Finding network and there is nothing on Apple's
servers to fetch however far back anyone looks. Everything about it was
scattered across two blog series, four papers, three GitHub threads and a
FRIDA repository, and none of it says which parts are settled.

**The finding worth the whole document** is stek29's, in FindMy.py #88:
the proof of concept everyone reaches for writes GATT to a characteristic
that is not present on a real AirTag with its owner nearby, because it is
the *unauthorised* sound command. Authorised ringing - the owner's own
tag, sitting next to them - is a different protocol over L2CAP. Somebody
starting from the obvious PoC would spend a week finding that out.

That has a bearing on #139, which plays a nearby accessory's sound over
GATT, so it is said in the document rather than left to be noticed.

Also collects: what a nearby tag actually broadcasts and how that differs
from a separated one (primary key every 15 minutes, secondary key daily
at 04:00); Adam Catley on the first six key bytes travelling as the BLE
address; the WOOT'22 firmware work behind seemoo-lab/airtag and what its
jailbreak requirement really is; and AirGuard, which malmeloo says already
rings tags from Android - marked unverified, because that claim is the
strongest lead here and it should not be taken on trust.

Nothing was read out of rustpush, apple-private-apis or export-findmy,
per the clean-room note in docs/findmy-export/README.md. stek29's public
comments are quoted; his branches are not.

Index row added per rule 10.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@parawanderer
parawanderer merged commit 2a96eca into main Aug 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant