Slide 11 of 28
Part 2 · How It WorksSlide 11
Slide 11 · Real Incident: Excessive Data Exposure
Private accounts. Not-so-private data.
Peloton, 2021 — the API returned far more than the UI showed.
Real Incident · 2021
Peloton — Private Account Data Exposed via API

Peloton users could set their accounts to "private." The Peloton app respected this setting and hid personal details from other users. But the API did not.

Security researcher Jan Masters (Pen Test Partners) discovered that calling the Peloton API directly returned the full user profile object — including fields the privacy setting was supposed to restrict: age, gender, city, weight, birthday, and full workout statistics.

The privacy setting controlled what the frontend displayed. It did not control what the API returned. Any authenticated Peloton user could request any other user's profile endpoint and receive the complete unsanitized object.

4+ million users had their private data exposed. Peloton was notified in January 2021. Their first fix — adding authentication to the endpoint — didn't solve the property-level exposure. The full fix took over 90 days.

Lesson: Privacy settings must be enforced at the API layer, not just the UI layer. The data model must know which properties are private and enforce that on every response — not just when accessed through the official app.
The fix that wasn't

Peloton's initial response was to add authentication to the endpoint (fixing a BOLA issue). But authenticated users could still retrieve the full profile object of any other user, including all the "private" fields. Property-level access control was still missing.

← Back Now: mass assignment →