( 1 ) 문제 정보
Your friend has set up a platform where you can register and post a private note. Everything is based on an API. Before setting up the Front-End, he asked you to check that everything was secure.
친구가 등록하고 비공개 메모를 게시할 수 있는 플랫폼을 구축했습니다. 모든 기능은 API 기반입니다. 프런트엔드를 설정하기 전에 모든 것이 안전한지 확인해 달라고 부탁했습니다.
관련 리소스 : https://www.youtube.com/watch?v=RiKikKIibpk
( 2 ) 문제 요점
기초적인 BOLA 취약점 공격임.
( 3 ) BOLA (Broken Object Level Authorization)
1. 취약점 정의
BOLA 는 Broken Object Level Authorization 의 약자로 한글로는 '손상된 객체 수준 권한 부여' 임.
BOLA 취약점은 웹 어플리케이션의 접근 제어 메커니즘에 존재하는 결함으로 사용자가 IT 환경 내의 데이터베이스 레코드, 파일 또는 기타 리소스와 같은 "객체"에 접근하거나 조작할 수 있는 취약점임.
애플리케이션의 접근 제어 메커니즘이 제대로 작동하지 않으면, 권한이 없는 사용자가 접근 권한이 없는 객체에 대한 작업을 수행할 수 있음.
이 취약점은 OWASP 2023년 상위 10대 API 보안 위험 중 가장 큰 위협으로 간주되는 보안 취약점임.
2. 취약점 발생 원인
BOLA 취약점은 개발자가 사용자 입력을 적절하게 검증하거나 사용자가 객체에 접근하도록 허용하기 전에 권한을 확인하는 코드를 작성하지 못하는 등 안전하지 못한 코딩 관행으로 인해 발생하는 경우가 많음.
검증이 이전에 허용된 경우에도 마찬가지임.
BOLA 취약점은 일반적으로 다음을 포함한 승인 프로세스의 결함으로 인해 발생함.
- 사용자가 제공한 입력의 유효성 검사 실패
- 권한 확인의 잘못된 구성
- URI, 요청 헤더 또는 본문에서 쉽게 식별 가능하거나 열거된 리소스 ID 공개
- 개별 요청에 대한 권한 확인 실패
3. 취약점 영향
- 허가되지 않은 데이터 보기
- 민감함 정보 접근
- 관리 계정 해킹
- 금융 사기 및 신용 도용을 위해 데이터를 훔침
( 4 ) flag 찾기
1. 사이트 화면
Swagger 로 만든 사이트임.
Swagger 는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크임.
POST /api/signup <--- 새로운 사용자 생성
POST /api/login <--- 로그인
GET /api/user <--- 사용자 정보 검색
PUT /api/note <--- 사용자 메모 업데이트
2. 사용자 생성
필자의 username과 password 생성함.
3. 로그인
본인의 계정 정보를 입력함.
4. 사용자 ID 입력 후 사용자 정보 검색
user_id 필드에 사용자 ID를 입력함.
기본적으로 사용자 ID 1은 root 아니면 admin 일 것으로 추측되어 필자는 사용자 ID 를 2로 지정함.
5. 사용자 메모 업데이트
원하는 메모를 입력함.
6. /api/user/ 경로를 볼 수 있음.
Swagger 프로그램의 경로 템플릿은 URL 일부를 경로 매개변수로 표시할 수 있음.
API 서버는 /user/5 또는 /user/12 예와 같이 API 요청 시 경로 매개변수값에 제공해줘야 함.
링크 : https://swagger.io/docs/specification/v3_0/paths-and-operations/
필자의 사용자 ID 2를 /api/user/2 에 접근함.
root 아니면 admin에(사용자 ID 1 추정) flag 값이 있을거라 판단하여 /api/user/1 에 접근함.
flag 값 찾음.
참고 사이트 :
https://www.akamai.com/glossary/what-is-bola
https://swagger.io/docs/specification/v3_0/paths-and-operations/
댓글 없음:
댓글 쓰기