Webview Attacks
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
안드로이드 개발의 중요한 측면은 WebView의 올바른 처리입니다. 이 가이드는 WebView 사용과 관련된 위험을 완화하기 위한 주요 구성 및 보안 관행을 강조합니다.
기본적으로 WebView는 파일 접근을 허용합니다. 이 기능은 Android API 레벨 3(Cupcake 1.5)부터 사용할 수 있는 setAllowFileAccess()
메서드로 제어됩니다. android.permission.READ_EXTERNAL_STORAGE 권한이 있는 애플리케이션은 파일 URL 스킴(file://path/to/file
)을 사용하여 외부 저장소에서 파일을 읽을 수 있습니다.
Universal Access From File URLs: 이 사용 중단된 기능은 파일 URL에서 교차 출처 요청을 허용하여 잠재적인 XSS 공격으로 인한 상당한 보안 위험을 초래했습니다. 기본 설정은 Android Jelly Bean 및 이후 버전을 대상으로 하는 앱에 대해 비활성화(false
)되어 있습니다.
이 설정을 확인하려면 getAllowUniversalAccessFromFileURLs()
를 사용하십시오.
이 설정을 수정하려면 setAllowUniversalAccessFromFileURLs(boolean)
를 사용하십시오.
File Access From File URLs: 이 기능도 사용 중단되었으며, 다른 파일 스킴 URL에서 콘텐츠에 대한 접근을 제어했습니다. 유니버설 접근과 마찬가지로 기본값은 보안을 강화하기 위해 비활성화되어 있습니다.
확인하려면 getAllowFileAccessFromFileURLs()
를 사용하고 설정하려면 setAllowFileAccessFromFileURLs(boolean)
를 사용하십시오.
자산 및 리소스에 접근하면서 파일 시스템 접근을 비활성화하려면 setAllowFileAccess()
메서드를 사용합니다. Android R 이상에서는 기본 설정이 false
입니다.
getAllowFileAccess()
로 확인하십시오.
setAllowFileAccess(boolean)
로 활성화 또는 비활성화하십시오.
WebViewAssetLoader 클래스는 로컬 파일을 로드하기 위한 현대적인 접근 방식입니다. 이는 로컬 자산 및 리소스에 접근하기 위해 http(s) URL을 사용하며, 동일 출처 정책에 맞춰 CORS 관리를 용이하게 합니다.
이것은 웹뷰에서 임의의 URL을 로드하는 데 사용되는 일반적인 함수입니다:
물론, 잠재적인 공격자는 애플리케이션이 로드할 URL을 절대 제어할 수 없어야 합니다.
JavaScript: WebViews에서 기본적으로 비활성화되어 있으며, setJavaScriptEnabled()
를 통해 활성화할 수 있습니다. 적절한 안전 장치 없이 JavaScript를 활성화하면 보안 취약점이 발생할 수 있으므로 주의가 필요합니다.
Intent Scheme: WebViews는 intent
스킴을 처리할 수 있으며, 신중하게 관리하지 않으면 악용될 수 있습니다. 예를 들어, 노출된 WebView 매개변수 "support_url"이 XSS 공격을 실행하는 데 악용될 수 있는 취약점이 있었습니다.
adb를 사용한 악용 예시:
Android는 JavaScript가 WebView에서 네이티브 Android 앱 기능을 호출할 수 있도록 하는 기능을 제공합니다. 이는 addJavascriptInterface
메서드를 활용하여 JavaScript와 네이티브 Android 기능을 통합함으로써 이루어지며, 이를 _WebView JavaScript bridge_라고 합니다. 이 메서드는 WebView 내의 모든 페이지가 등록된 JavaScript Interface 객체에 접근할 수 있도록 하므로, 이러한 인터페이스를 통해 민감한 정보가 노출될 경우 보안 위험이 발생할 수 있으므로 주의가 필요합니다.
Android 4.2 이하 버전을 타겟으로 하는 앱은 극도의 주의가 필요합니다. 이는 악성 JavaScript를 통해 원격 코드 실행을 허용하는 취약점이 존재하기 때문입니다.
JavaScript 인터페이스는 네이티브 코드와 상호작용할 수 있으며, 클래스 메서드가 JavaScript에 노출되는 예시에서 볼 수 있습니다:
JavaScript Bridge는 WebView에 인터페이스를 추가하여 활성화됩니다:
JavaScript를 통한 잠재적 악용, 예를 들어 XSS 공격을 통해 노출된 Java 메서드를 호출할 수 있습니다:
위험을 완화하기 위해, JavaScript 브리지 사용을 APK와 함께 제공된 코드로 제한하고 원격 소스에서 JavaScript 로딩을 방지하십시오. 구형 장치의 경우 최소 API 수준을 17로 설정하십시오.
문서화된 방법을 통해 특정 페이로드를 실행하여 RCE를 달성할 수 있습니다. 그러나 @JavascriptInterface
주석은 무단 메서드 접근을 방지하여 공격 표면을 제한합니다.
원격 디버깅은 Chrome 개발자 도구를 사용하여 가능하며, WebView 콘텐츠 내에서 상호작용 및 임의의 JavaScript 실행을 가능하게 합니다.
원격 디버깅은 다음을 통해 애플리케이션 내 모든 WebView에 대해 활성화할 수 있습니다:
애플리케이션의 디버깅 가능 상태에 따라 디버깅을 조건부로 활성화하려면:
XMLHttpRequest를 사용하여 임의 파일의 추출을 시연합니다:
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)