Fitbit Aria Wi-Fi Scale Status: beta | |
---|---|
![]() | |
Beschreibung | Reverse engineering the Fitbit Aria WLAN scale protocol |
Autor: | architekt, krisha |
PayPal | ![]() |
The scale offered by Fitbit measures weight and body fat. The data is then submitted to their website and can be further analysed. It is possible to use one scale for multiple users including different accounts on Fitbit's website. The scale identifies the users by their weight and maybe their body fat.
We want to create our own service to analyse the data ourselves. With that we're able to bypass existing limits and to extend the functionality. We may be able to allow more users and to identify the users in a better way. Additionally the data is not send to a public website vie unencrypted transmission anymore. One main interest is also the reverse-engineering of the protocol and maybe more...
0 4 8 C +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ | Ident 1 | Battery | MAC Address of scale | Firmware> | fixed (2) | in percent | 00 1D C9 XX XX XX | e.g. > +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ > version | unknown | Timestamp | Number of measure-| Ident > > 28 | fixed (33) | Sync; Unix | ments (here 1) | fixed > +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ > | Elec. impedance | Weight in g | Timestamp Meas- | User > > (2) | 0 for guests | | urement; Unix | 0 for > +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ > ID | Displayed body | Covariance | Body fat 2 | > guests | fat, per mil | as float | | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+
0 4 8 +----+----+----+----+----+----+----+----+----+----+ | Timestamp |Unit|Stat| Number of users | | | | us | | +----+----+----+----+----+----+----+----+----+----+
0 4 8 C +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ | User ID | Always zero > | | (maybe reserved) > +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ > | Name of user, only first three bytes used, rest > > | > +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ > is filled with spaces | Tolerance min | Tolerance max | > | | | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ | Age in years |Gen | Height in | Some weight | Body Fat > | |der | millimeters | or 0 | > +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ > | Covariance (?) | Some other | Timestamp | > | 1040128544 or 0 | weight | | +----+----+----+----+----+----+----+----+----+----+----+----+----+
0 4 8 +----+----+----+----+----+----+----+----+ | Padding, always zero | | | +----+----+----+----+----+----+----+----+
/* to be crafted */
During our analysis we found some vulnerabilities. We contacted fitbit via mail, twitter and phone, but we never got an acknowledgement nor an answer - even after calling the german represantive of fitbit, who forwarded our research to the management. Since some time past since that and hopefully they fixed the issues here are our theoretical attacks.
It's quite easy to change the values of a local user. If you have access to the local network you can sniff the packets send to the fitbit servers (tcpdump, ethereal). As soon as you have the sniffed data, you can just resent the packet with custom weight and fat measurements. It might be that fitibit limits the number of measures and that the weight of a target needs to be within some limits/average values (e.g. no one will increase weight by 5kg in some hours only).
We did not test it, but probably it's possible to increase the weight for all fitbit users worldwide. The scale authenticates with the server using the MAC (which just increments). Additionally there is a user ID with some bits. These can be tested by bruteforce but might take some time. The fitbit server also replies to guests (value 0) and gives out the complete userlist with the user ID in response. If you now take the user ID and create custom requests you should be able to submit new weights for all fitbit users - worldwide :)