계: Encapsulation

캡슐화는 강력한 경계를 그리는 것입니다. 웹 브라우저에서는 사용자의 모바일 코드가 다른 모바일 코드에 의해 오용되지 않도록 하는 것을 의미합니다. 서버에서는 검증된 데이터와 검증되지 않은 데이터, 한 사용자의 데이터와 다른 사용자의 데이터, 데이터 사용자가 볼 수 있는 데이터와 볼 수 없는 데이터 간의 차별화를 의미할 수 있습니다.

File Based Cross-Zone Scripting

Abstract
응용 프로그램의 컨텍스트 내에서 신뢰할 수 없는 스크립트를 실행할 수 있는 파일을 로드하는 것은 위험합니다.
Explanation
File Based Cross Zone Scripting은 다음 조건이 충족될 때 발생합니다.

1. 스크립트가 응용 프로그램 내에서 실행되도록 허용할 수 있는 파일이 로드됩니다.

2. 로드되는 스크립트의 출처가 실행 중인 응용 프로그램과 동일합니다.

이 두 조건이 모두 충족될 경우 특히 상대방이 정보가 응용 프로그램의 경계 내에서 오는 것인지에 따라 신뢰 여부를 결정할 경우, 일련의 공격이 가능해질 수 있습니다.

예제 1: 다음 코드는 Android WebView를 사용하여 로컬에서 파일을 로드합니다.

...
myWebView.loadUrl("file:///android_asset/www/index.html");
...
Example 1에서 Android WebView 렌더러는 “file://”로 시작하는 URL을 사용하여 loadUrl()로 로드되는 모든 것을 출처가 동일한 것으로 취급합니다.

공격자가 파일에서 로드될 때 File Based Cross-Zone Scripting 취약점을 활용하는 몇 가지 일반적인 방법이 있습니다.
- 파일에 스크립트를 삽입할 수 있는 공격자가 로컬 파일을 조작할 수 있습니다.
이 방법은 파일 권한, 파일의 위치 또는 파일이 저장되었다 로드될 수 있는(수정 가능 시간이 있을 수 있음) 경쟁 조건(race condition)에 따라 달라집니다.

- 파일이 외부 리소스로 호출될 수 있습니다.
로드된 파일이 외부 리소스에서 스크립트를 검색할 때 이 상황이 발생할 수 있습니다.

예제 2: 다음 코드는 실행해야 하는 JavaScript를 결정하기 위해 외부 소스를 찾습니다.

<script src="http://www.example.com/js/fancyWidget.js"></script>
Example 2에서는 결과 스크립트를 악의적 작업자가 수정하는 것이 가능한 안전하지 않은 프로토콜이 사용됩니다. 또는 컴퓨터를 공격자의 사이트로 경로 재지정하는 다른 공격이 수행될 수 있습니다.

- 로드된 파일에 Cross-Site Scripting 취약점이 포함될 수 있습니다.
로드되는 파일에 코드 삽입이 가능한 경우, 삽입된 코드는 응용 프로그램의 컨텍스트에서 실행될 수 있습니다. 꼭 JavaScript를 삽입하는 기능이 아니라 단순히 HTML을 삽입할 수만 있어도 변조(defacement) 또는 DOS(Denial of Service) 공격이 가능해질 수 있습니다.
References
[1] Erika Chin and David Wagner Bifocals: Analyzing WebView Vulnerabilities in Android Applications
desc.semantic.java.file_based_cross_zone_scripting
Abstract
응용 프로그램의 권한 있는 컨텍스트 내에서 신뢰할 수 없는 스크립트를 실행할 수 있는 로컬 파일을 로드하는 것은 위험합니다.
Explanation
다음 조건이 충족될 때 파일 기반 Cross-Zone Scripting이 발생합니다.

1. 응용 프로그램 내에서 스크립트 실행을 허용할 수 있는 파일이 로드됩니다.


2. 로드된 스크립트는 실행 중인 응용 프로그램과 출처가 동일한 것처럼 보입니다(file://).

이 두 조건이 모두 충족될 경우, 특히 상대방이 정보가 응용 프로그램의 경계 내에서 오는 것인지에 따라 신뢰 여부를 결정할 경우, 일련의 공격이 가능해질 수 있습니다.

예제 1: 다음 코드는 UIWebView.loadRequest(_:) 메서드를 사용하여 로컬 파일을 로드합니다.

...
NSURL *url = [[NSBundle mainBundle] URLForResource: filename withExtension:extension];
[webView loadRequest:[[NSURLRequest alloc] initWithURL:url]];
...
Example 1에서, WebView 엔진은 file://로 시작하는 URL을 사용하여 UIWebView.loadRequest(_:)를 통해 로드되는 모든 것을 권한 있는 로컬 파일 출처에 있는 것으로 취급합니다.

파일에서 로드할 때 공격자가 파일 기반 Cross-Zone Scripting 취약점을 활용하는 몇 가지 일반적인 방법이 있습니다.

- 로컬 파일이 공격자에 의해 제어될 수 있습니다. 예를 들어, 공격자가 파일을 피해자에게 보내고 이 피해자가 이 파일을 취약한 응용 프로그램(예: 클라우드 저장소 응용 프로그램)에 저장할 수 있습니다.
- 파일에 스크립트를 삽입할 수 있는 공격자에 의해 로컬 파일이 조작될 수 있습니다. 이 방법은 파일 권한, 파일의 위치 또는 파일이 저장되었다 로드될 수 있는(수정 가능 시간이 있을 수 있음) 경쟁 조건(race condition)에 따라 달라집니다.
- 파일이 외부 리소스로 호출될 수 있습니다. 로드된 파일이 외부 리소스에서 스크립트를 검색할 때 이 상황이 발생할 수 있습니다.
- 로드된 파일에 Cross-Site Scripting 취약점이 포함될 수 있습니다. 로드되고 있는 파일에 삽입된 코드가 포함된 경우, 이 코드는 응용 프로그램의 컨텍스트에서 실행될 수 있습니다. 삽입된 코드가 JavaScript 코드여야 할 필요는 없으며, 삽입된 HTML은 변조 또는 denial of service 공격을 활성화할 수도 있습니다.

공격자가 제어하는 파일이 file:// URL을 통해 로컬에 로드된 경우, 동일 출처 정책(Same Origin Policy)은 이 파일의 스크립트가 동일 출처의 다른 파일에 액세스할 수 있도록 허용하므로 공격자가 민감한 정보가 포함된 로컬 파일에 액세스할 수 있습니다.
References
[1] Same-origin policy for file: URIs Mozilla
[2] Old Habits Die Hard: Cross-Zone Scripting in Dropbox & Google Drive Mobile Apps IBM
[3] loadHTMLString(_:baseURL:) API documentation Apple
[4] loadRequest(_:) API documentation Apple
desc.dataflow.objc.file_based_cross_zone_scripting
Abstract
응용 프로그램의 권한 있는 컨텍스트 내에서 신뢰할 수 없는 스크립트를 실행할 수 있는 로컬 파일을 로드하는 것은 위험합니다.
Explanation
다음 조건이 충족될 때 파일 기반 Cross-Zone Scripting이 발생합니다.

1. 응용 프로그램 내에서 스크립트 실행을 허용할 수 있는 파일이 로드됩니다.


2. 로드된 스크립트는 실행 중인 응용 프로그램과 출처가 동일한 것처럼 보입니다(file://).

이 두 조건이 모두 충족될 경우, 특히 상대방이 정보가 응용 프로그램의 경계 내에서 오는 것인지에 따라 신뢰 여부를 결정할 경우, 일련의 공격이 가능해질 수 있습니다.

예제 1: 다음 코드는 UIWebView.loadRequest(_:) 메서드를 사용하여 로컬 파일을 로드합니다.

...
let url = Bundle.main.url(forResource: filename, withExtension: extension)
self.webView!.load(URLRequest(url:url!))
...
Example 1에서, WebView 엔진은 file://로 시작하는 URL을 사용하여 UIWebView.loadRequest(_:)를 통해 로드되는 모든 것을 권한 있는 로컬 파일 출처에 있는 것으로 취급합니다.

파일에서 로드할 때 공격자가 파일 기반 Cross-Zone Scripting 취약점을 활용하는 몇 가지 일반적인 방법이 있습니다.

- 로컬 파일이 공격자에 의해 제어될 수 있습니다. 예를 들어, 공격자가 파일을 피해자에게 보내고 이 피해자가 이 파일을 취약한 응용 프로그램(예: 클라우드 저장소 응용 프로그램)에 저장할 수 있습니다.
- 파일에 스크립트를 삽입할 수 있는 공격자에 의해 로컬 파일이 조작될 수 있습니다. 이 방법은 파일 권한, 파일의 위치 또는 파일이 저장되었다 로드될 수 있는(수정 가능 시간이 있을 수 있음) 경쟁 조건(race condition)에 따라 달라집니다.
- 파일이 외부 리소스로 호출될 수 있습니다. 로드된 파일이 외부 리소스에서 스크립트를 검색할 때 이 상황이 발생할 수 있습니다.
- 로드된 파일에 Cross-Site Scripting 취약점이 포함될 수 있습니다. 로드되고 있는 파일에 삽입된 코드가 포함된 경우, 이 코드는 응용 프로그램의 컨텍스트에서 실행될 수 있습니다. 삽입된 코드가 JavaScript 코드여야 할 필요는 없으며, 삽입된 HTML은 변조 또는 denial of service 공격을 활성화할 수도 있습니다.

공격자가 제어하는 파일이 file:// URL을 통해 로컬에 로드된 경우, 동일 출처 정책(Same Origin Policy)은 이 파일의 스크립트가 동일 출처의 다른 파일에 액세스할 수 있도록 허용하므로 공격자가 민감한 정보가 포함된 로컬 파일에 액세스할 수 있습니다.
References
[1] Same-origin policy for file: URIs Mozilla
[2] Old Habits Die Hard: Cross-Zone Scripting in Dropbox & Google Drive Mobile Apps IBM
[3] loadHTMLString(_:baseURL:) API documentation Apple
[4] loadRequest(_:) API documentation Apple
desc.dataflow.swift.file_based_cross_zone_scripting