본문 바로가기

Hack The Box CBBH

CBBH - Web Attacks[Chaining IDOR Vulnerabilities]

이번 취약점은 IDOR Information Disclosure과 IDOR Insecure Function Calls를 이용해 Chaining Attack을 이용하려 한다.

일반적으로 API 엔드 포인트에 대한 GET 요청은 사용자의 세부 사항을 반환해야 하므로, 사용자의 세부 정보를 검색할 수 있는지 확인할 수 있다. 또한, 페이지 로드 후 동일한 API 엔드 포인트에 대한 GET 요청으로 사용자 세부 사항을 가져온다.

위 사진에서 HTTP 요청에서 보내는 유일한 데이터는 role=employee 쿠키이며, JWT 토큰과 같은 다른 사용자별 인증이 포함되어 있지 않다. 토큰이 존재하더라도, 백엔드 접근 제어 시스템이 이를 요청된 객체 세부 정보와 정확히 비교하지 않으면 여전히 다른 사용자의 정보를 검색할 수 있다.

Information Disclosure

다른 uid 로 GET 요청을 보내보려 한다.

그 결과, 다른 사용자의 세부 정보를 반환했으며, 해당 사용자의 UUID 및 역할을 포함하고 있음을 확인할 수 있다. 이는 IDOR Information Disclosure 취약점이 존재하는 것을 볼 수 있다.

{"uid":"2","uuid":"4a9bd19b3b8676199592a346051f950c","role":"employee","full_name":"Iona Franklyn","email":"i_franklyn@employees.htb","about":"It takes 20 years to build a reputation and few minutes of cyber-incident to ruin it."}

이렇게 이전에는 알 수 없었던 새로운 정보를 확인할 수 있었으며, uuid 값에 집중하려 한다. 이전 내용에서는 해당 값을 모르기 때문에 다른 사용자의 정보를 변경할 수 없었지만, 이제는 uuid를 이용해 다른 사용자의 정보를 수정할 수 있다.

Modifying Other Users' Details

이제 다른 사용자의 uuid 값을 확보했으므로, 해당 사용자의 세부 정보를 변경하기 위해 PUT

을 이용해 /profile/api.php/profile/2 엔드포인트로 보낼 수 있다.

이번에는 접근 제어 오류 메시지를 받지 않았고, 1이라는 Response 메시지를 받게 됐다. 이제 다시, GET 요청을 통해 해당 사용자의 정보가 업데이트 됐는지 확인해볼 수 있다.

uid 값이 2인 사용자의 데이터가 업데이트 된 것을 확인할 수 있다. 이제, 단순히 사용자의 정보를 수정하는 것뿐만 아니라, 이 취약점을 이용해 여러 가지 추가 공격을 수행할 수 있다.

잠재적으로 민감한 세부 사항을 볼 수 있는 것 뿐만 아니라, 다른 사용자의 세부 사항을 수정하는 기능을 통해 다른 여러 공격을 수행할 수 있다.

사용자의 이메일을 자신의 이메일로 변경한 후, 비밀번호 재설정 요청을 통해, 재설정 링크가 공격자의 이메일로 전송되며, 이 링크를 사용해 사용자의 계정을 완전히 탈취할 수 있다.

두 번째로는 사용자의 About 필드에 XSS 페이로드를 삽입해 사용자가 해당 필드를 포함한 페이지에 접근할 때 공격자가 원하는 스크립트가 실행될 수 있다. 이러한 공격을 통해 세션 탈취,관리자 계정 공격, 피싱 공격 등 다양한 공격을 수행할 수 있다.

Chaining Two IDOR Vulnerabilities

이제 IDOR Information Disclosure 취약점을 통해 다른 사용자의 정보를 열람할 수 있는 사실을 확인했다. 이제 모든 사용자를 열거해 관리자 역할을 가진 사용자를 찾아볼 수 있다.

uid 번 값이 10번인 사람의 rolestaff_admin 인 것을 확인할 수 있다. 이제 해당 계정을 변경하거나 소유하고 있는 계정을 관리자 계정으로 만들 수 있다.

PUT Method를 사용해 role 을 변경하고, 해당 Request를 보내면 역할을 staff_admin 으로 변경된 것을 확인할 수 있다.

여기서 이전에 POST Method를 사용해 사용자를 추가했는데, staff_admin 로 가능한지 확인해보려 한다.

이전과 같이 관리자만 가능하다는 오류 메시지는 확인할 수 없었다. 이제 GET을 통해 해당 사용자가 생성된 것을 확인해보면

성공적으로 uid 값 33 사용자가 생성된 것을 볼 수 있다.

이번 IDOR Information Disclosure Vulnerability에서 얻은 정보를 IDOR Insecure Function Calls을 API 엔드포인트 공격과 결합해서 다양한 접근 제어 시스템을 우회하면서 다른 사용자의 세부 사항을 수정하고 추가 및 삭제할 수 있었다. 많은 경우에, IDOR 취약점을 통해 유출되는 정보는 IDOR 또는 XSS와 같은 다른 공격에 활용될 수 있으며, 보다 정교한 공격으로 이어지거나 기존 보안 메커니즘을 우회할 수 있다.