HOME
home
CV News
home

API Security Top 10(API1:2023 Broken Object Level Authorization)

DEV 속성
Security
날짜
2024/01/22

API1:2023 Broken Object Level Authorization

위협원/공격 경로
보안 취약점
영향
API 명세: 악용 용이함
확산성: 탐지 용이함
기술적 심각도: 특정 비지니스
공격자는 요청 내에서 전송되는 개체의 ID를 조작하여 손상된 개체 수준 권한 부여에 취약한 API end-points를 악용할 수 있습니다. 개체 ID는 순차 정수, UUID 또는 일반 문자열 중 무엇이든 될 수 있습니다. 데이터 유형에 관계없이 요청 대상(경로 또는 쿼리 문자열 매개변수), 요청 헤더 또는 요청 페이로드의 일부에서도 쉽게 식별할 수 있습니다.
이 문제는 API 기반 애플리케이션에서 매우 일반적입니다. 서버 구성 요소는 일반적으로 클라이언트의 상태를 완전히 추적하지 않고 대신 액세스할 개체를 결정하기 위해 클라이언트에서 전송되는 개체 ID와 같은 매개 변수에 더 많이 의존하기 때문입니다. 일반적으로 서버 응답은 요청이 성공했는지 여부를 이해하는 데 충분합니다.
다른 사용자의 개체에 대한 무단 액세스는 무단 당사자에게 데이터 공개, 데이터 손실 또는 데이터 조작을 초래할 수 있습니다. 특정 상황에서는 개체에 대한 무단 액세스로 인해 계정 전체가 탈취될 수도 있습니다.

취약한 API

Object Level 인증은 사용자가 액세스 권한이 있어야 하는 개체에만 액세스할 수 있는지 확인하기 위해 일반적으로 코드 수준에서 구현되는 액세스 제어 메커니즘입니다.
객체의 ID를 수신하고 객체에 대한 작업을 수행하는 모든 API end-points는 객체 수준 인증 확인을 구현해야 합니다. 검사에서는 로그인한 사용자에게 요청된 개체에 대해 요청된 작업을 수행할 수 있는 권한이 있는지 확인해야 합니다.
이 메커니즘의 실패는 일반적으로 모든 데이터의 무단 공개, 수정 또는 파괴로 이어집니다.
현재 세션의 사용자 ID(예: JWT 토큰에서 추출)를 취약한 ID 매개변수와 비교하는 것은 BOLA(Broken Object Level Authorization)를 해결하는 데 충분한 솔루션이 아닙니다. 이 접근 방식은 사례의 작은 하위 집합만 처리할 수 있습니다.
BOLA의 경우 사용자가 취약한 API end-points기능에 액세스할 수 있도록 설계되었습니다. ID를 조작하여 개체 수준에서 위반이 발생합니다. 공격자가 액세스 권한이 없어야 하는 API endpoint/function에 액세스하는 경우 이는 BOLA가 아닌 BFLA(Broken Function Level Authorization)의 경우입니다.

공격 시나리오

Scenario #1

온라인 상점을 위한 전자상거래 플랫폼은 호스트된 상점의 수익 차트가 포함된 목록 페이지를 제공합니다. 공격자는 브라우저 요청을 검사하여 해당 차트와 해당 패턴의 데이터 소스로 사용되는 API end-points를 식별할 수 있습니다. [/shops/{shopName}/revenue_data.json] 공격자는 다른 API end-points를 사용하여 호스팅된 모든 상점 이름 목록을 얻을 수 있습니다. 목록의 이름을 조작하는 간단한 스크립트를 사용하여{상점 이름}URL을 통해 공격자는 수천 개의 전자상거래 상점의 판매 데이터에 액세스할 수 있습니다.

Scenario #2

한 자동차 제조업체는 운전자의 휴대폰과 통신하기 위해 모바일 API를 통해 차량의 원격 제어를 활성화했습니다. API를 통해 운전자는 원격으로 엔진을 시동 및 정지하고 도어를 잠그거나 잠금 해제할 수 있습니다. 이 흐름의 일부로 사용자는 차량 식별 번호(VIN)를 API에 보냅니다. API는 VIN이 로그인한 사용자에게 속한 차량을 나타내는지 확인하지 못하며, 이로 인해 BOLA 취약점이 발생합니다. 공격자는 자신의 소유가 아닌 차량에 접근할 수 있습니다.

Scenario #3

온라인 문서 저장 서비스를 통해 사용자는 자신의 문서를 보고, 편집하고, 저장하고 삭제할 수 있습니다. 사용자의 문서가 삭제되면 문서 ID가 포함된 GraphQL 변형이 API로 전송됩니다.
POST /graphql { "operationName":"deleteReports", "variables":{ "reportKeys":["<DOCUMENT_ID>"] }, "query":"mutation deleteReports($siteId: ID!, $reportKeys: [String]!) { { deleteReports(reportKeys: $reportKeys) } }" }
JavaScript
복사
해당 ID의 문서는 별도의 권한 확인 없이 삭제되므로, 해당 사용자가 다른 사용자의 문서를 삭제할 수도 있습니다.

예방 방법

사용자 정책 및 계층 구조에 의존하는 적절한 인증 메커니즘을 구현합니다.
인증 메커니즘을 사용하여 로그인한 사용자가 데이터베이스의 레코드에 액세스하기 위해 클라이언트의 입력을 사용하는 모든 함수에서 레코드에 대해 요청된 작업을 수행할 수 있는 액세스 권한이 있는지 확인합니다.
레코드 ID의 GUID로 무작위적이고 예측할 수 없는 값을 사용하는 것이 좋습니다.
인증 메커니즘의 취약성을 평가하는 테스트를 작성하세요. 테스트를 실패하게 만드는 변경 사항을 배포하지 마세요.

References

OWASP

External