- Status Closed
-
Assigned To
cbay - Private
Opened by freetb - 15.02.2024
Last edited by cbay - 16.02.2024
FS#31 - Broken Access Vulnerability via 'Impossible deletion' Endpoint Misconfiguration
Description
A vulnerability exists on the https://admin.alwaysdata.com/ permissions_delete endpoint which is intended for deleting sub-accounts' generated data or permissions. However due to unsecure design, it can also be used to remove critical permissions or access controls of the owner account, rendering the account useless.
Proof-of-Concept
1. Visit this URL: https://admin.alwaysdata.com/permissions/<owner-id>/delete/ (Replace owner-id with the the id of main account, that is, the one with 'impossible deletion')
2. This renders the account useless. But permissions can still be reinstated using the following request
POST /permissions/<account-id>/ HTTP/2 Host: admin.alwaysdata.com Cookie: csrftoken=nHI6Qy3zJu9uxxxqNvXRuZlTuvgLJwbBI5jg4XRa; django_language=en; sessionid=tdcg6j9im2g31ga9tk7 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate, br Referer: https://admin.alwaysdata.com/permissions/ Content-Type: application/x-www-form-urlencoded Content-Length: 314 Origin: https://admin.alwaysdata.com csrfmiddlewaretoken=U0CcqjIPBxxxxxxxxxxxx2zGI69d7GFBI5AKORMPsTJlk1SfgDJZ5t&csrfmiddlewaretoken=U0CcqjIPBxxxxxxxxxxxxxxxx7GFBI5AKORMPsTJlk1SfgDJZ5t&email=<EMAIL>&customer_account=on&customer_contact_billing=on&customer_full_accounts=on&customer_full_servers=on&account=<USERID>
Mitigation
Ensure that only authorized admin can access and modify owner permissions through the delete endpoint. This can be achieved by implementing authentication and authorization mechanisms.
Loading...
Available keyboard shortcuts
- Alt + ⇧ Shift + l Login Dialog / Logout
- Alt + ⇧ Shift + a Add new task
- Alt + ⇧ Shift + m My searches
- Alt + ⇧ Shift + t focus taskid search
Tasklist
- o open selected task
- j move cursor down
- k move cursor up
Task Details
- n Next task
- p Previous task
- Alt + ⇧ Shift + e ↵ Enter Edit this task
- Alt + ⇧ Shift + w watch task
- Alt + ⇧ Shift + y Close Task
Task Editing
- Alt + ⇧ Shift + s save task
POC video: https://file.io/offDGYvo1zko
I found a better way to run this poc. Instead of replaying requests, i just appended /delete and it worked the same way.
Hello,
Although we should probably prevent a client from being able to remove its own permissions even by forging a HTTP request, it doesn't pose any security threat as they can only do it on themselves.
Kind regards,
Cyril