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을 로드하는 데 사용되는 일반적인 함수입니다:
Ofc, 잠재적인 공격자는 애플리케이션이 로드할 URL을 절대 제어할 수 없어야 합니다.
JavaScript: WebViews에서 기본적으로 비활성화되어 있으며, setJavaScriptEnabled()
를 통해 활성화할 수 있습니다. 적절한 안전 장치 없이 JavaScript를 활성화하면 보안 취약점이 발생할 수 있으므로 주의가 필요합니다.
Intent 스킴: WebViews는 intent
스킴을 처리할 수 있으며, 신중하게 관리하지 않으면 악용될 수 있습니다. 예를 들어, 노출된 WebView 매개변수 "support_url"이 XSS 공격을 실행하는 데 악용될 수 있는 취약점이 있었습니다.
adb를 사용한 악용 예시:
안드로이드에서 제공하는 기능으로, JavaScript가 WebView에서 네이티브 안드로이드 앱 기능을 호출할 수 있게 합니다. 이는 addJavascriptInterface
메서드를 활용하여 JavaScript와 네이티브 안드로이드 기능을 통합하는 _WebView JavaScript bridge_를 통해 이루어집니다. 이 메서드는 WebView 내의 모든 페이지가 등록된 JavaScript Interface 객체에 접근할 수 있게 하므로, 민감한 정보가 이러한 인터페이스를 통해 노출될 경우 보안 위험이 발생할 수 있으므로 주의가 필요합니다.
안드로이드 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)