Reddit · Report #2618486
IDOR lets a malicious user reveal the unpinned achievement badges of any Reddit user
How it was found
Summary:
Reddit launched a new feature in June 2024 changelog. It is about Achievement Badges being available in profile . As per its the access control a badge is supposed to be hidden to other users if the badge owner unpins it. However, this IDOR vulnerability lets a malicious user find all the hidden badges with the knowledge of username (which is public) and badge id (which is a simple 1-2 digit incremental number)
Impact:
Badges tell a lot about a Reddit user. That is the reason Reddit gave an option for user to hide them. This vulnerability is a threat to confidentiality of Reddit users. It can tell a malicious user about if the user joined more than a threshold number of communities, does this person have high (> 10%) upvote rating, does the person comment in same community in 20 days straight, does the person votes/post/comments in reddit for certain amount of days etc. Basically all the actions due to which an badge gets rewarded gets exposed.
Steps To Reproduce:
- Create a Reddit account.
- Go to any post of any user.
- Share it outside of Reddit by just creating a embedding of the post. Please use Share -> Embed feature.
{F3460176}
- Now go to your profile's achievement section and observe that the
New Sharebadge gets unlocked. - Click on that badge and unpin it. This makes it hidden from others.
{F3460179}
- Please read this support article which states that unpinning a badge will hide it from others.
{F3460182}
- Now create another account. Please try to create using mobile number due to some reasons.
- Login to the newly created account.
- Go to the first users achievement page. The way to do it is craft this URL and visit it in browser
https://www.reddit.com/user/<the-username-here>/achievements/. - Observe that the
New Sharebadge is hidden.
{F3460189}
- Now request the following url in same browser
https://share.redd.it/preview/user/<the-usename-here>/achievement/10?show-user-info=trueand observe that you get a response with an image meaning that the provided username hasNew Sharebadge.
{F3460193}
- Now change the
10in URL to11or9and observe that you get aNot foundmessage.
{F3460201} {F3460200}
- Thus, a
Not Foundresponse means that that particular user does not have that badge and aValid Imageresponse means that that user has that particular badge. - Using this technique we can enumerate the
Achievement Badgesof any arbitrary user of Reddit.
Additional Information:
- Confidentiality is set to HIGH because entire badge component and every badge is affected.
- Privileges required is set to NONE because anyone can register to Reddit as it is a public platform so it is equivalent to no authentication.
Impact
Badges tell a lot about a Reddit user. That is the reason Reddit gave an option for user to hide them. This vulnerability is a threat to confidentiality of Reddit users. It can tell a malicious user about if the user joined more than a threshold number of communities, does this person have high (> 10%) upvote rating, does the person comment in same community in 20 days straight, does the person votes/post/comments in reddit for certain amount of days etc. Basically all the actions due to which an badge gets rewarded gets exposed.