A Tale of Confusing IDOR đ¤


Background:
Hi!! I have been bug hunting and researching web & mobile application for a while now. I used to mainly target private program either on Hackerone or Synack, but recently Iâd decided to make a switch to public programs because -
- They pay waaayyy more than private programs.
- Itâs more challenging to come across a bug since the same application is tested at least a million times.
- It helps me to make content about the bugs I come across so that I can give something back to the community.
Description:
TikTok Business allows its users to create âAdvertiser Accountsâ. The user can then edit, manage roles of other users or delete that particular advertiser account as per their needs. The deleting functionality was surprisingly available to the âAnalystâ role (lower privileged) user as well. All that the lower privileged user had to do was to click on the âClose Accountâ button and the advertiser account would be closed even though this functionality was only available to the admin of the advertiser account. I much later realised that this is an IDOR since no prior authorisation was needed since the same HTTP request could be replayed with the different value of the âaccount_id"
parameter and that would close some other userâs advertiser account.
Vulnerable HTTP Request:
POST /api/v2/bm/account/close/?org_id=XXX HTTP/2
Host: http://business.tiktok.com/
Cookie: REDACTED
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://business.tiktok.com/manage/account?org_id=7073111030880108545
Content-Type: application/json;charset=utf-8
X-Csrftoken: REDACTED
Content-Length: 67
Origin: https://business.tiktok.com
Dnt: 1
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
{"account_id":"YYY","org_id":"XXX"}
Steps to Reproduce:
- Go to https://business.tiktok.com/ and log in to your account.
- Go to âAdvertiser accountsâ section and click on any of the available advertiser accounts.
- Click on the âCloseâ button.
- Intercept the vulnerable HTTP request using Burp Suite.
- Change the value of the
âaccount_id"
parameter to other userâs advertiser account ID. - Forward the request. The response will display a confirmation message.
- The other userâs advertiser account will then be closed.
Timeline:
-
10th March - Bug reported to TikTok
-
15th March - Mentioned that itâs an IDOR instead of Privilege Escalation.
-
15th March to 14th April - Had to help Hackeroneâs triager since for some reason the âCloseâ button wasnât available on their end.
-
15th April - Triaged đ
-
19th April - Severity reduced from 6.5 to 5.3 since the value of the
âaccount_idâ
parameter is a 19 digit non-incremental value đ -
25th April - Resolved
-
27th April - Bounty awarded đ°
-
3rd May - Requested for disclosure
-
17th May - Report disclosed on Hackerone
Handles:
You can reach-out to me on any of these platforms -
- Twitter - https://twitter.com/naaash
- LinkedIn - https://www.linkedin.com/in/avinashsudheer
- Instagram - https://www.instagram.com/not.naash/