KOROMOON

착한 사마리아인이 되고 싶습니다.

9/20/2025

[Root Me] WEB-Server_API - Mass Assignment


( 1 ) 문제 정보



Your friend thanks you for your previous vulnerability report, and assures you that this time he has removed the possibility of accessing notes, and has even created an administration role!


친구가 이전에 취약점을 보고해 준 것에 감사를 표하고, 이번에는 메모에 접근할 수 있는 기능을 없앴고, 심지어 관리자 역할까지 만들어 놓았다고 확신합니다!


관련 리소스 : https://www.youtube.com/watch?v=RiKikKIibpk




( 2 ) 문제 요점


기초적인 API Mass Assignment 취약점 문제임.




( 3 ) API Mass Assignment



클라이언트 입력을 받아 적절한 필터링 없이 코드 변수나 내부 객체 속성에 바인딩하는 API 엔드포인트는 대량 할당(Mass Assignment) 취약점에 초대할 수 있음.

이로 인해 사용자는 의도치 않은 객체 속성을 변경하거나 덮어쓸 수 있음.

어플리케이션 로직과 API 설계에 따라 이러한 불법 입력은 클라이언트에서 API URL 경로, HTTP 헤더 또는 HTTP 본문 자체를 통해 다양한 형식(예: JavaScript Object Notation [JSON]) 으로 전송될 수 있음.

API 는 설계상 속성 이름과 함께 기본 구현을 노출하기 때문에 웹 어플리케이션보다 이 취약점이 더 취약함.


공격자는 이 치약점을 악용하여 객체 주입을 통해 객체 속성을 불법적으로 수정할 수 있음.

그 결과 데이터 변조, 보안 메커니즘 우회가 발생하고, 어떤 경우에는 권한 상승이 발생할 수 있음.


아래 시나리오는 공격자가 API 요청의 JSON 콘텐츠를 조작하여 사용자 개체에 더 많은 매개변수를 추가하여 권한을 확대함.


1. 공격자는 합법적인 API 요청을 보내 연락처 정보를 업데이트함.

2. 공격자는 API 요청의 JSON 사용자 개체에 user.admin, user.role 매개변수를 추가함.




( 4 ) flag 찾기


1. 사이트 화면

Swagger 로 만든 사이트임.

Swagger 는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크임.


POST /api/signup <--- 새로운 사용자 생성

POST /api/login <--- 로그인

GET /api/user <--- 사용자 정보 검색

PUT /api/note <--- 사용자 메모 업데이트

GET /api/flag <--- 비밀 flag 검색


2. 사용자 생성

필자의 username과 password 생성함.


3. 로그인

본인의 계정 정보를 입력함.


4. 사용자 정보 검색

요청할 경우 응답 status 변수값에서 guest 를 확인함.


5. 사용자 메모 업데이트

원하는 메모를 입력함.


6. guest 상태에서 flag 접근

admin 상태에서 접근해야 flag 값을 확인할 수 있음.


7. 프록시 툴(Burp Suite)로 각 엔트포인트에서 허용되는 HTTP 메소드를 확인함. 

OPTIONS /api/signup

OPTIONS /api/login

OPTIONS /api/user

OPTIONS /api/note

OPTIONS /api/flag


/api/user 엔드포인트에서 PUT 메소드가 활성화되어 있는 것을 발견함.


8. /api/user 엔드포인트에서 PUT 메소드를 이용하여 status 상태값을 guest -> admin 으로 변경함.

HTTP 메소드 변경 : GET -> PUT

헤더 추가 : Content-Type : application/json <--- 이 헤더는 전송된 데이터가 JSON 임을 알려서 서버가 JSON 콘텐츠를 수락하도록 하는데 사용됨.

데이터 추가 : 

{

"status":"admin"

}


서버로부터 status 상태값이 업데이트됨을 응답함.


9. admin 상태에서 flag 접근

flag 값을 확인함.




참고 사이트 : 

https://my.f5.com/manage/s/article/K51142652

https://owasp.org/API-Security/editions/2019/en/0xa6-mass-assignment/


댓글 없음:

댓글 쓰기