OWASP 카테고리: MASVS-CODE: 코드 품질
개요
public abstract Context createPackageContext (String packageName, int flags)
createPackageContext
메서드는 개발자가 자체 애플리케이션에서 다른 애플리케이션의 컨텍스트를 만들려는 경우에 사용됩니다.
예를 들어 개발자가 서드 파티 애플리케이션에서 리소스를 가져오거나 서드 파티 애플리케이션에서 메서드를 호출하려면 createPackageContext
를 사용합니다.
그러나 애플리케이션이 CONTEXT_IGNORE_SECURITY
및 CONTEXT_INCLUDE_CODE
플래그를 사용하여 createPackageContext
를 호출한 다음 getClassLoader()
를 호출하면 애플리케이션이 악성 애플리케이션의 코드 실행에 취약해질 수 있습니다. 예를 들어 공격자가 개발자가 사용자 기기에 있을 것으로 예상한 소유권 주장이 제기되지 않은 패키지 이름 (패키지 스쿼팅)을 명의 도용하면 이러한 상황이 발생할 수 있습니다.
애플리케이션이 이러한 종류의 공격에 취약해지려면 충족해야 하는 기준을 요약하면 다음과 같습니다.
취약한 앱:
CONTEXT_IGNORE_SECURITY
및CONTEXT_INCLUDE_CODE
를 사용하여createPackageContext
를 호출합니다.- 검색된 컨텍스트에서
getClassLoader()
를 호출합니다.
악성 앱:
- 취약한 앱이
createPackageContext
에 전달하는 패키지 이름을 주장할 수 있습니다. - android:appComponentFactory를 내보냅니다.
영향
애플리케이션에서 createPackageContext를 안전하지 않은 방식으로 사용하면 악성 애플리케이션이 취약한 애플리케이션의 컨텍스트에서 임의의 코드를 실행할 수 있습니다.
완화 조치
꼭 필요한 경우가 아니라면 CONTEXT_IGNORE_SECURITY
및 CONTEXT_INCLUDE_CODE
를 사용하여 createPackageContext
를 호출하지 마세요.
불가피한 경우 createPackageContext
를 실행하는 패키지의 ID를 확인하는 메커니즘을 구현해야 합니다 (예: 패키지 서명을 확인).