Broken Access Control on <Redacted-app> | Mass Private Message Exfiltration

Inspectiv Private program | API

Introduction

Redacted-app is a social platform that allows users to form groups for discussions. A key feature is "Private Groups," which are designed to be invite-only spaces hidden from the public.

While the frontend correctly restricts navigation to these groups for non-members, the backend API failed to enforce these access controls. This discrepancy allowed authenticated users to identify private groups and retrieve their message history without membership or an invitation.

Discovery: Identifying Private Group IDs

During the reconnaissance phase, I used the GAP (Get All Params) Burp Suite extension to analyze the application's JavaScript assets and API responses. This analysis highlighted the /api/v2/discovery/featured_groups api endpoint.

Although "featured" lists typically display public content, querying this endpoint returned metadata for groups explicitly marked with "visibility": "private".

Normally, a "featured" list implies public visibility. However, upon manually querying this endpoint, I noticed it returned a massive JSON object containing metadata for groups that were explicitly marked with "visibility":"private".

This was the first failure: ID Leaking. By exposing the UUIDs of private groups to the public


Unrestricted Enumeration of Private Channels

With a valid Private Group UUID (550e8400-e29b-41d4-a716-446655440000) in hand, the next logical step was to see if I could access its internal components.

A generic groups on this app is divided into "Channels" (e.g., General, Spoilers, Intros). I constructed a GET request to the channels endpoint, substituting the private group's ID.

Response:

The server returned a 200 OK status. This confirmed that while the UI might block a non-member from seeing these channels, the API had no such qualms. I now had the channel_uuid (c93f0962-d48e-4050-8b1a-21316d5b0350) required to dig deeper.


The final step was accessing the actual user content. I crafted a request to the messages endpoint using the IDs harvested in the previous steps.

This is the trust boundary that should have been impenetrable. A user who is not a member of a private group should never be able to read its messages.

Response:

The API returned the full chat history.


This vulnerability completely nullified the concept of privacy on the platform.

  • Mass Data Extraction: Because the Group IDs were leaked via a public endpoint, an attacker could script the entire process to scrape every private conversation on the platform.

  • PII Leakage: The message objects contained detailed user information, connecting real identities to private discussions.

  • Zero Interaction: The attack required no interaction from the victims. A silent observer could monitor private groups indefinitely.

Reference:

Last updated