Links
Token Leaked In Response
- Token Leaked in the
Resend-Tokenendpoint
Failure to invalidate token
- Invitation link doesn't expire
- Generate an invitation link and send it to your secondary account to join the team.
- Accept the invitation.
- Remove the secondary user from the team.
- Try to rejoin the organization using the same invitation link, and prepare to be amazed!
Second admin can deactive 2FA for first admin without password
- Admin need to put password to deactive 2FA
- Admin can invite another admin
- Second admin can deactive 2FA for first admin without password
IDOR in email parameter when sign up using invitation feature
- Admin invite user with specific email
- User open message in email to complete registertion
- After finish user intercept request before submit
- Change email at email parameter
- Email changed Successfully
API Misconfiguration Leads to PrevEsc
- Admin invite user
- User login
- In user login request there's parameter called role:"user"
- Use match & replace to changed it to role:"admin"
- Login with user, it's logout me directly
- But i see all informtion with burp via api endpoints
Signup without accept invitation
- Send invite to test@example.com
- Disregard Invite, directly signup.
- test@example.com becomes part of the organisation.
- Victim organisation dashboard still shows that test@example.com hasn’t accepted the invitation sent to email.
- But in real time test@example.com remains part of the organisation anonymously.
Logic Error Leads to Project Takeover
- User invite attacker to the project as member
- Attacker changes his name with bad chracters like html tags and %00 and other latina chars
- Victim tries to remove attacker from the team but he faces errors and the request doesn't occure
Injection
- XSS in first-name through invitaiton link
BAC
{% hint style="info" %} Methodology: just pass the jwt and cookie of the low leverage user to auth analyzer and it will repeat all admin requests with the lower privilege user {% endhint %}
- Member invite admin
- Viewer edit content
- Member invite member
- Member edit org settings
- Member can remove members
- Viewer can edit
- Member edit permissions
Sign_up without accepting the invitation the attacker join organization anonymously
Race Conditions
- Race Condition in invite user
- Race Condition in accepting invitation
Race Condition on Invitation Sending Request
{% embed url="https://medium.com/@amralaa66652/the-power-of-a-race-condition-d8f9be8ba71a" %}
Race Condition → Role Escalation (Viewer → Admin)
- Log in as an Admin account
- Go to the invite user flow and capture the
POST /api/brands/users/invite/request in Burp - Duplicate the request into 2 tabs in Burp Repeater
- Set
role: viewerin Request A - Set
role: adminin Request B - Select both tabs → send as single-packet concurrent requests (Burp's "Send group in parallel")
- Check the target email inbox — confirm 2 separate invite links arrived
- Accept the Viewer invite → verify account is locked as Viewer
- While still logged in, open the Admin invite link
- Confirm the account is now Admin despite role immutability
Bonus Variant — Ghost Admin (UI shows Viewer, backend is Admin)
- Repeat the race condition steps above to generate both invite links
- Accept the Admin invite first
- Then accept the Viewer invite
- Check UI → account appears as Viewer
- Perform an Admin-only action via API → confirm it succeeds
- Document the mismatch: UI = Viewer, backend = Admin
U+3164 Hangul Filler
Part 1 — Duplicate Invitation Bypass
- Log in as an Admin
- Invite
victim@target.comnormally — confirm it works - Intercept the second invite request in Burp
- In the
emailfield, append the Hangul Filler characterU+3164after the email →"victim@target.com ㅤ"(copy the char:ㅤ) - Send the request
- Confirm the response is
201 Createdinstead of a duplicate/already-invited error - Check that two separate invite emails arrived in the victim's inbox
Part 2 — Permanent Account Lockout (DoS)
- As Admin, send a poisoned invite with
victim@target.comㅤ(U+3164 appended) - From the victim's inbox, have the victim click the poisoned invite link and complete registration
- Confirm the account was created successfully and visually looks normal
- Now attempt to log in as the victim using
victim@target.com(clean, no invisible char) - Confirm authentication fails — backend can't find the clean email
- Check the admin dashboard — verify the malformed email looks identical to the real one (invisible char not visible)
- Document: victim is permanently locked out with no obvious way to self-recover
Quick tip for injecting U+3164 in Burp: switch the request to Hex view, find the end of the email value, and insert bytes E3 85 A4 (UTF-8 encoding of U+3164). Or just copy the character ㅤ directly into the raw request body.