계: Encapsulation

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

104 개 항목 찾음
취약점
Abstract
localStoragesessionStorage 사이의 값을 이동하면 모르는 사이에 민감한 정보가 노출될 수 있습니다.
Explanation
HTML5는 개발자가 프로그램 값을 유지할 수 있도록 localStoragesessionStorage 맵을 제공합니다. sessionStorage 맵은 페이지를 호출하기 위한 저장소를 제공하며 페이지 인스턴스 및 즉각적인 브라우저 세션 동안에만 지속됩니다. 그러나, localStorage 맵은 여러 페이지 인스턴스 및 브라우저 인스턴스에 대해 액세스할 수 있는 저장소를 제공합니다. 이 기능을 통해 응용 프로그램은 여러 브라우저 탭 또는 창에서 동일한 정보를 유지하고 활용할 수 있습니다.

예를 들어, 개발자는 사용자 원래의 검색 조건을 유지하는 동시에, 사용자가 여러 탭을 열어 숙박 시설을 비교할 수 있게 하는 여행 응용 프로그램에서 여러 브라우저 탭 또는 인스턴스를 활용하고자 할 수 있습니다. 기존의 HTTP 저장 시나리오에서 사용자는 한 탭에서 구매 및 의사 결정에 대한 위험이 있었으며(세션 또는 쿠키에 저장됨) 이 위험은 다른 탭에서의 구매를 방해했습니다.

여러 브라우저 탭에서 사용자 값을 활용할 수 있는 기능을 사용할 경우, 개발자는 sessionStorage 범위에서 localStorage 또는 그 반대로 민감한 정보를 이동시키지 않도록 주의해야 합니다.

예제: 다음 예제에서는 세션에 신용 카드 CCV 정보를 저장하여 구입 시 사이트에서 파일에 있는 카드로 요금을 청구하도록 사용자가 이미 허가했음을 나타냅니다. 브라우저 탭의 컨텍스트 내에서 구입할 때마다 신용 카드 승인이 필요합니다. CCV가 다시 입력되는 것을 방지하기 위해 정보가 sessionStorage 개체에 저장됩니다. 그러나, 개발자도 localStorage 개체 내에 정보를 저장합니다.


...
try {
sessionStorage.setItem("userCCV", currentCCV);
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Quota exceeded.');
}
}

...
...

var retrieveObject = sessionStorage.getItem("userCCV");
try {
localStorage.setItem("userCCV",retrieveObject);
} catch (e) {
if (e == QUOTA_EXCEEDED_ERR) {
alert('Quota exceeded.');
}
...

var userCCV = localStorage.getItem("userCCV");
...
}
...


CCV 정보를 localStorage 개체로 되돌려 놓으면, 이제 CCV 정보는 다른 브라우저 탭에서 이용할 수 있으며 브라우저의 새 호출 시에도 이용 가능합니다. 그러면 의도한 워크플로우에 대한 응용 프로그램 로직은 무시됩니다.
desc.dataflow.javascript.cross_session_contamination
Abstract
Visualforce 페이지 작업 메서드 또는 컨트롤러 생성자는 중요한 작업 수행 시 무단 요청으로부터 해당 작업을 보호하지 않습니다.
Explanation
CSRF(Cross-Site Request Forgery) 취약점은 다음 경우에 발생합니다.
1. 웹 응용 프로그램이 세션 쿠키를 사용합니다.
2. 응용 프로그램이 해당 요청이 사용자의 동의로 이루어졌는지 확인하지 않고 HTTP 요청에 대해 작업합니다.
기본적으로 Visualforce 페이지는 CSRF 방지 토큰 역할을 하는 숨겨진 양식 필드가 포함된 상태로 렌더링됩니다. 이러한 토큰은 페이지 내에서 전송되는 요청에 포함되며 서버는 해당 작업 메서드 또는 명령을 실행하기 전에 토큰의 유효성을 확인합니다. 그러나 페이지 작업 메서드와 사용자 지정 페이지 컨트롤러 생성자에는 이 기본 제공 방어 기능이 적용되지 않습니다. 이러한 메서드와 생성자는 페이지 로드 중에 CSRF 방지 토큰이 생성되기 전에 실행되기 때문입니다.
예제 1: 다음 Visualforce 페이지는 사용자 지정 컨트롤러 MyAccountActions 및 페이지 작업 메서드 pageAction()을 선언합니다. pageAction() 메서드는 페이지 URL 방문 시에 실행되며 서버는 CSRF 토큰 유무를 확인하지 않습니다.

<apex:page controller="MyAccountActions" action="{!pageAction}">
...
</apex:page>
public class MyAccountActions {
...
public void pageAction() {
Map<String,String> reqParams = ApexPages.currentPage().getParameters();
if (params.containsKey('id')) {
Id id = reqParams.get('id');
Account acct = [SELECT Id,Name FROM Account WHERE Id = :id];
delete acct;
}
}
...
}

공격자는 다음과 같은 코드를 포함하는 악성 웹 사이트를 설정할 수도 있습니다.

<img src="http://my-org.my.salesforce.com/apex/mypage?id=YellowSubmarine" height=1 width=1/>

예를 들어 Visualforce 페이지의 관리자가 사이트에서 세션을 활성화한 상태에서 악성 페이지를 방문하는 경우 무의식적으로 공격자를 위한 계정을 삭제하게 됩니다.
References
[1] Salesforce Security Tips for Apex and Visualforce Development - Cross-Site Request Forgery (CSRF)
[2] A. Klein Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics
desc.structural.apex.csrf
Abstract
상태 변경 HTTP 요청에는 공격자의 무단 요청을 막기 위한 사용자 특정 기밀이 포함되어 있어야 합니다.
Explanation
CSRF(Cross-Site Request Forgery) 취약점은 다음 경우에 발생합니다.
1. 웹 응용 프로그램이 세션 쿠키를 사용합니다.
2. 응용 프로그램이 해당 요청이 사용자의 동의로 이루어졌는지 확인하지 않고 HTTP 요청에 대해 작업합니다.

예제 1: 다음 예에서 웹 응용 프로그램을 통해 관리자는 새 계정을 만들 수 있습니다.


RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "/new_user");
body = addToPost(body, new_username);
body = addToPost(body, new_passwd);
rb.sendRequest(body, new NewAccountCallback(callback));


공격자는 다음과 같은 코드를 포함하는 악성 웹 사이트를 설정할 수도 있습니다.


RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "http://www.example.com/new_user");
body = addToPost(body, "attacker";
body = addToPost(body, "haha");
rb.sendRequest(body, new NewAccountCallback(callback));


예를 들어 example.com의 관리자가 사이트에서 세션을 활성화한 상태에서 악성 페이지를 방문하는 경우 무의식적으로 공격자를 위한 계정을 만들게 됩니다. 이것이 CSRF 공격입니다. 이 공격이 가능한 이유는 응용 프로그램에 해당 요청의 출처를 확인할 방법이 없기 때문입니다. 모든 요청은 사용자가 선택한 적법한 작업이거나 공격자가 설정한 허위 작업일 가능성이 있습니다. 공격자는 허위 요청이 생성하는 웹 페이지를 보지 못하므로 이 공격 기법은 응용 프로그램의 상태를 변경하는 요청의 경우에만 유용합니다.

하지만 세션 ID를 쿠키가 아닌 URL에서 전달하는 응용 프로그램은 공격자가 세션 ID에 액세스하여 허위 요청의 일부로 포함시킬 방법이 없으므로 CSRF 이슈가 발생하지 않습니다.

일부 프레임워크에는 응용 프로그램을 보호하기 위해 CSRF Nonce가 자동으로 포함됩니다. 이 기능을 비활성화하면 응용 프로그램이 위험에 노출될 수 있습니다.

예제 2: 이 Spring Security로 보호된 응용 프로그램은 CSRF 보호를 명시적으로 비활성화합니다.


<http auto-config="true">
...
<csrf disabled="true"/>
</http>
References
[1] A. Klein Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics
[2] OWASP OWASP Top 10
[3] OWASP Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet
desc.config.java.csrf
Abstract
HTTP 요청에는 공격자의 무단 요청을 막기 위한 사용자 특정 기밀이 포함되어 있어야 합니다.
Explanation
CSRF(cross-site request forgery) 취약점은 다음 경우에 발생합니다.
1. 웹 응용 프로그램이 세션 쿠키를 사용합니다.

2. 응용 프로그램이 해당 요청이 사용자의 동의 하에 이루어졌는지 확인하지 않고 HTTP 요청에 대해 작업합니다.



nonce는 재생 공격을 방지하기 위해 메시지와 함께 전송되는 암호화된 임의의 값입니다. 요청에 출처를 증명하는 nonce가 포함되어 있지 않으면 요청을 처리하는 코드가 CSRF 공격에 취약합니다(응용 프로그램 상태를 변경하지 않는 한). 즉, 세션 쿠키를 사용하는 웹 응용 프로그램은 공격자가 사용자를 속여 가짜 요청을 제출하지 못하도록 특별한 예방 조치를 취해야 합니다. 관리자가 다음과 같이 새 계정을 만들 수 있는 웹 응용 프로그램이 있다고 가정해 보십시오.



var req = new XMLHttpRequest();
req.open("POST", "/new_user", true);
body = addToPost(body, new_username);
body = addToPost(body, new_passwd);
req.send(body);


공격자는 다음과 같은 코드를 포함하는 악성 웹 사이트를 설정할 수도 있습니다.


var req = new XMLHttpRequest();
req.open("POST", "http://www.example.com/new_user", true);
body = addToPost(body, "attacker");
body = addToPost(body, "haha");
req.send(body);


예를 들어 example.com의 관리자가 사이트에서 세션을 활성화한 상태에서 악성 페이지를 방문하는 경우 무의식적으로 공격자를 위한 계정을 만들게 됩니다. 이것이 CSRF 공격입니다. 이는 응용 프로그램이 해당 요청의 출처를 확인하는 방법을 가지고 있지 않기 때문입니다. 모든 요청은 사용자가 선택한 적법한 작업이거나 공격자가 설정한 허위 작업일 가능성이 있습니다. 공격자는 허위 요청이 생성하는 웹 페이지를 보지 못하므로 이 공격 기법은 응용 프로그램의 상태를 변경하는 요청의 경우에만 유용합니다.

하지만 세션 ID를 쿠키가 아닌 URL에서 전달하는 응용 프로그램은 공격자가 세션 ID에 액세스하여 허위 요청의 일부로 포함시킬 방법이 없으므로 CSRF 문제가 발생하지 않습니다.
CSRF는 2007 OWASP Top 10 목록에서 제 5위입니다.
References
[1] A. Klein Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics
[2] OWASP 2007 OWASP Top 10
desc.structural.javascript.csrf
Abstract
Django 응용 프로그램에서는 CSRF 미들웨어 보호가 활성화되지 않습니다.
Explanation
CSRF(cross-site request forgery) 취약점은 다음 경우에 발생합니다.
1. 웹 응용 프로그램이 세션 쿠키를 사용합니다.

2. 응용 프로그램이 해당 요청이 사용자의 동의 하에 이루어졌는지 확인하지 않고 HTTP 요청에 대해 작업합니다.

Nonce는 재전송 공격을 막기 위해 메시지와 함께 전송된 암호화 무작위 값입니다. 요청에 출처를 증명하는 정보가 포함되어 있지 않은 경우, 해당 요청을 처리하는 코드는 CSRF 공격에 취약합니다(응용 프로그램의 상태를 변경하지 않는 경우 제외). 이는 공격자가 사용자로 하여금 허위 요청을 제출하도록 속이지 못하게 하려면 세션 쿠키를 사용하는 웹 응용 프로그램이 특별한 예방 조치를 취해야 한다는 의미입니다. 관리자가 다음과 같은 폼을 제출하여 새로운 계정을 생성하도록 허용하는 웹 응용 프로그램을 상상해 보십시오.


<form method="POST" action="/new_user" >
Name of new user: <input type="text" name="username">
Password for new user: <input type="password" name="user_passwd">
<input type="submit" name="action" value="Create User">
</form>


공격자는 다음과 같이 웹 사이트를 설정할 수도 있습니다.


<form method="POST" action="http://www.example.com/new_user">
<input type="hidden" name="username" value="hacker">
<input type="hidden" name="user_passwd" value="hacked">
</form>
<script>
document.usr_form.submit();
</script>


예를 들어 example.com의 관리자가 사이트에서 세션을 활성화한 상태에서 악성 페이지를 방문하는 경우 무의식적으로 공격자를 위한 계정을 만들게 됩니다. 이것이 CSRF 공격입니다. 이는 응용 프로그램이 해당 요청의 출처를 확인하는 방법을 가지고 있지 않기 때문입니다. 모든 요청은 사용자가 선택한 적법한 작업이거나 공격자가 설정한 허위 작업일 가능성이 있습니다. 공격자는 허위 요청이 생성하는 웹 페이지를 보지 못하므로 이 공격 기법은 응용 프로그램의 상태를 변경하는 요청의 경우에만 유용합니다.

하지만 세션 ID를 쿠키가 아닌 URL에서 전달하는 응용 프로그램은 공격자가 세션 ID에 접근하여 허위 요청의 일부로 포함시킬 방법이 없으므로 CSRF 문제가 발생하지 않습니다.
References
[1] A. Klein Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics
desc.structural.python.cross_site_request_forgery_django_settings
Abstract
HTTP 요청에는 공격자의 무단 요청을 막기 위한 사용자 특정 기밀이 포함되어 있어야 합니다.
Explanation
CSRF(Cross-Site Request Forgery) 취약점은 다음 경우에 발생합니다.
1. 웹 응용 프로그램이 세션 쿠키를 사용합니다.

2. 응용 프로그램이 해당 요청이 사용자의 동의로 이루어졌는지 확인하지 않고 HTTP 요청에 대해 작업합니다.

Nonce는 재전송 공격을 막기 위해 메시지와 함께 전송된 암호화 무작위 값입니다. 요청에 출처를 증명하는 정보가 포함되어 있지 않은 경우, 해당 요청을 처리하는 코드는 CSRF 공격에 취약합니다(응용 프로그램의 상태를 변경하지 않는 경우 제외). 이는 공격자가 사용자로 하여금 허위 요청을 제출하도록 속이지 못하게 하려면 세션 쿠키를 사용하는 웹 응용 프로그램이 특별한 예방 조치를 취해야 한다는 의미입니다. 관리자가 다음과 같이 새로운 계정을 생성하도록 허용하는 웹 응용 프로그램을 상상해 보십시오.

기본적으로 Play Framework는 CSRF 차단을 추가하지만 전역으로 비활성화되거나 특정 경로에 대해 비활성화될 수 있습니다.

예제: 다음 경로 정의는 buyItem 컨트롤러 메서드에 대한 CSRF 차단을 비활성홥니다.

+ nocsrf
POST /buyItem controllers.ShopController.buyItem


사용자가 shop.com의 활성 세션에 있는 동안 악성 페이지를 방문하게 되면 의도치 않게 공격자의 물품을 구입하게 됩니다. 이것이 CSRF 공격입니다. 이 공격이 가능한 이유는 응용 프로그램에 해당 요청의 출처를 확인할 방법이 없기 때문입니다. 모든 요청은 사용자가 선택한 적법한 작업이거나 공격자가 설정한 허위 작업일 가능성이 있습니다. 공격자는 허위 요청이 생성하는 웹 페이지를 보지 못하므로 이 공격 기법은 응용 프로그램의 상태를 변경하는 요청의 경우에만 유용합니다.

하지만 세션 ID를 쿠키가 아닌 URL에서 전달하는 응용 프로그램은 공격자가 세션 ID에 액세스하여 허위 요청의 일부로 포함시킬 방법이 없으므로 CSRF 문제가 발생하지 않습니다.
References
[1] A. Klein Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics
[2] OWASP Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet
desc.semantic.scala.cross_site_request_forgery
Abstract
폼 게시에는 공격자의 무단 요청을 막기 위한 사용자 특정 기밀이 포함되어 있어야 합니다.
Explanation
CSRF(cross-site request forgery) 취약점은 다음 경우에 발생합니다.
1. 웹 응용 프로그램이 세션 쿠키를 사용합니다.

2. 응용 프로그램이 해당 요청이 사용자의 동의 하에 이루어졌는지 확인하지 않고 HTTP 요청에 대해 작업합니다.



Nonce는 재전송 공격을 막기 위해 메시지와 함께 전송된 암호화 무작위 값입니다. 요청에 출처를 증명하는 정보가 포함되어 있지 않은 경우, 해당 요청을 처리하는 코드는 CSRF 공격에 취약합니다(응용 프로그램의 상태를 변경하지 않는 경우 제외). 이는 공격자가 사용자로 하여금 허위 요청을 제출하도록 속이지 못하게 하려면 세션 쿠키를 사용하는 웹 응용 프로그램이 특별한 예방 조치를 취해야 한다는 의미입니다. 관리자가 다음과 같은 폼을 제출하여 새로운 계정을 생성하도록 허용하는 웹 응용 프로그램을 상상해 보십시오.


<form method="POST" action="/new_user" >
Name of new user: <input type="text" name="username">
Password for new user: <input type="password" name="user_passwd">
<input type="submit" name="action" value="Create User">
</form>


공격자는 다음과 같이 웹 사이트를 설정할 수도 있습니다.


<form method="POST" action="http://www.example.com/new_user">
<input type="hidden" name="username" value="hacker">
<input type="hidden" name="user_passwd" value="hacked">
</form>
<script>
document.usr_form.submit();
</script>


예를 들어 example.com의 관리자가 사이트에서 세션을 활성화한 상태에서 악성 페이지를 방문하는 경우 무의식적으로 공격자를 위한 계정을 만들게 됩니다. 이것이 CSRF 공격입니다. 이는 응용 프로그램이 해당 요청의 출처를 확인하는 방법을 가지고 있지 않기 때문입니다. 모든 요청은 사용자가 선택한 적법한 작업이거나 공격자가 설정한 허위 작업일 가능성이 있습니다. 공격자는 허위 요청이 생성하는 웹 페이지를 보지 못하므로 이 공격 기법은 응용 프로그램의 상태를 변경하는 요청의 경우에만 유용합니다.

하지만 세션 ID를 쿠키가 아닌 URL에서 전달하는 응용 프로그램은 공격자가 세션 ID에 접근하여 허위 요청의 일부로 포함시킬 방법이 없으므로 CSRF 문제가 발생하지 않습니다.

CSRF는 2007 OWASP Top 10 목록에서 제 5위입니다.
References
[1] A. Klein Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics
[2] OWASP 2007 OWASP Top 10
desc.content.html.csrf
Abstract
noopen으로 설정되는 X-Download-Options 헤더를 비활성화하면 다운로드된 HTML 페이지가 이를 제공하는 사이트의 보안 컨텍스트에서 실행됩니다.
Explanation
사이트가 사용자에 대한 다운로드를 제공할 수 있어야 하는 경우 이를 여는 옵션은 브라우저에서 실행되는 모든 제공된 파일이 사이트와 동일한 보안 컨텍스트에서 현재 브라우저에서 열릴 수 있음을 의미합니다.
공격자가 다운로드되는 파일을 조작할 수 있는 경우 브라우저에서 Cross-Site Scripting 공격 역할로 실행되는 HTML 또는 스크립트를 삽입할 수 있어 현재 세션에서 정보를 훔치거나 조작할 수 있습니다.

예제 1: 다음 예제에서는 브라우저에서 실행되는 제공된 다운로드에 대한 보호를 명시적으로 비활성화합니다.


var express = require('express');
var app = express();
var helmet = require('helmet');

app.use(helmet({
ieNoOpen: false
}));
...
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 5
[2] Standards Mapping - CIS Microsoft Azure Foundations Benchmark complete
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 1
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark integrity
[6] Standards Mapping - CIS Kubernetes Benchmark complete
[7] Standards Mapping - Common Weakness Enumeration CWE ID 79, CWE ID 80
[8] Standards Mapping - Common Weakness Enumeration Top 25 2019 [2] CWE ID 079
[9] Standards Mapping - Common Weakness Enumeration Top 25 2020 [1] CWE ID 079
[10] Standards Mapping - Common Weakness Enumeration Top 25 2021 [2] CWE ID 079
[11] Standards Mapping - Common Weakness Enumeration Top 25 2022 [2] CWE ID 079
[12] Standards Mapping - Common Weakness Enumeration Top 25 2023 [2] CWE ID 079
[13] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[14] Standards Mapping - FIPS200 SI
[15] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[16] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[17] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[18] Standards Mapping - OWASP Top 10 2004 A4 Cross Site Scripting
[19] Standards Mapping - OWASP Top 10 2007 A1 Cross Site Scripting (XSS)
[20] Standards Mapping - OWASP Top 10 2010 A2 Cross-Site Scripting (XSS)
[21] Standards Mapping - OWASP Top 10 2013 A3 Cross-Site Scripting (XSS)
[22] Standards Mapping - OWASP Top 10 2017 A7 Cross-Site Scripting (XSS)
[23] Standards Mapping - OWASP Top 10 2021 A03 Injection
[24] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.3 Output Encoding and Injection Prevention Requirements (L1 L2 L3), 5.3.6 Output Encoding and Injection Prevention Requirements (L1 L2 L3)
[25] Standards Mapping - OWASP Mobile 2014 M7 Client Side Injection
[26] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[27] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[28] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.1
[29] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.7
[30] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.7
[31] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[32] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.7
[33] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[34] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[35] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[36] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection
[37] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection
[38] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 079
[39] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 079
[40] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 079
[41] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3580 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3580 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3580 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3580 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3580 CAT I
[46] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3580 CAT I
[47] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3580 CAT I
[48] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[49] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[50] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[51] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[52] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[53] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[54] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[55] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[56] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[57] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[58] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[59] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[60] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[61] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[62] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Scripting (WASC-08)
[63] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Scripting
desc.dataflow.javascript.cross_site_scripting_untrusted_html_downloads
Abstract
서버가 도메인 간 요청을 허용하면서 요청의 출처를 확인하지 못해 공격자는 이러한 도메인 간 요청을 사용하여 양방향 WebSocket 연결을 하이재킹(hijacking)할 수 있습니다.
Explanation
Cross-Site WebSocket 하이재킹(hijacking)은 사용자가 속아서 악성 사이트를 방문할 때 이 사이트에서 합법적인 백엔드 서버와의 WebSocket 연결이 설정되면서 발생합니다. 서버에 WebSocket 프로토콜의 업그레이드를 요청할 때 사용되는 초기 HTTP 요청이 일반 HTTP 요청이기 때문에 브라우저가 세션 쿠키를 포함하여 대상 도메인에 바인딩된 모든 쿠키를 전송합니다. 서버가 Origin 헤더를 확인하지 못하면 모든 악성 사이트가 사용자를 가장하여 사용자 모르게 양방향 WebSocket 연결을 설정할 수 있게 됩니다.
References
[1] Christian Schneider Cross-Site WebSocket Hijacking
desc.semantic.dotnet.cross_site_websocket_hijacking
Abstract
서버가 도메인 간 요청을 허용하면서 요청의 출처를 확인하지 못하면 공격자는 이러한 도메인 간 요청을 사용하여 양방향 WebSocket 연결을 하이재킹할 수 있습니다.
Explanation
Cross-Site WebSocket 하이재킹(hijacking)은 사용자가 속아서 악성 사이트를 방문할 때 이 사이트에서 합법적인 백엔드 서버와의 WebSocket 연결이 설정되면서 발생합니다. 서버에 WebSocket 프로토콜의 업그레이드를 요청할 때 사용되는 초기 HTTP 요청이 일반 HTTP 요청이기 때문에 브라우저가 세션 쿠키를 포함하여 대상 도메인에 바인딩된 모든 쿠키를 전송합니다. 서버가 Origin 헤더를 확인하지 못하면 모든 악성 사이트가 사용자를 가장하여 사용자 모르게 양방향 WebSocket 연결을 설정할 수 있게 됩니다.
References
[1] Christian Schneider Cross-Site WebSocket Hijacking
desc.semantic.java.cross_site_websocket_hijacking
Abstract
응용 프로그램은 거부 목록을 사용하여 폼을 통해 노출되는 속성을 제어합니다. 개발자는 새 속성을 추가할 때 거부 목록을 업데이트하는 것을 잊어버릴 수 있을 뿐 아니라 민감한 필드를 실수로 공격자에게 노출할 수도 있습니다.
Explanation
응용 프로그램은 exclude 거부 목록을 사용합니다. 이는 관리하기가 어려울 뿐 아니라 오류에도 취약합니다. 개발자가 폼이나 폼을 백업하는 Model에 새 필드를 추가하는 상황에서 exclude 필터를 업데이트하는 것을 잊어버리는 경우 공격자에게 민감한 필드를 노출할 수도 있습니다. 공격자는 악의적인 데이터를 제외되지 않는 필드로 전송하고 바인딩할 수 있습니다.

예제 1: 다음 폼은 일부 User 속성을 노출하지만 사용자 id에 대한 거부 목록을 검사합니다.


from myapp.models import User
...
class UserForm(ModelForm):
class Meta:
model = User
exclude = ['id']
...
User 모델은 새 role 속성으로 업데이트되었지만 연결된 UserForm은 업데이트되지 않은 경우 폼에서 role 속성이 노출됩니다.
References
[1] Django Foundation Creating forms from models
[2] Standards Mapping - CIS Azure Kubernetes Service Benchmark 3
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 2
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[6] Standards Mapping - General Data Protection Regulation (GDPR) Indirect Access to Sensitive Data
[7] Standards Mapping - OWASP API 2023 API3 Broken Object Property Level Authorization
[8] Standards Mapping - OWASP Mobile 2024 M8 Security Misconfiguration
desc.structural.python.django_bad_practices_attributes_in_deny_list
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
Abstract
프로그램은 지나치게 허용적인 도메인 간 정책을 정의합니다.
Explanation
기본적으로, 동일한 도메인에서 나오는 경우에만 두 개의 SWF 응용 프로그램이 서로의 데이터에 접근할 수 있는지 확인하는 동일 출처 정책(Same Origin Policy)이 Flash 응용 프로그램에 적용됩니다. Adobe Flash를 사용하면 개발자는 프로그래밍 방식으로 또는 crossdomain.xml 구성 파일의 적절한 설정을 통해 정책을 수정할 수 있습니다. 그러나, 지나치게 허용적인 도메인 간 정책을 사용하면 악성 응용 프로그램이 부적절한 방법으로 피해자 응용 프로그램과 통신하여 스푸핑, 데이터 도난, 릴레이 및 기타 공격으로 이어질 수 있기 때문에 설정 변경 시 주의해야 합니다.

예제 1: 발췌한 다음 내용은 응용 프로그램과 통신이 허용되는 도메인을 프로그래밍 방식으로 지정하는 와일드카드 사용 예입니다.


flash.system.Security.allowDomain("*");
*allowDomain()에 대한 인수로 사용하는 것은 응용 프로그램의 데이터가 임의의 도메인에서 다른 SWF 응용 프로그램으로 접근할 수 있음을 나타냅니다.
References
[1] Peleus Uhley Creating more secure SWF web applications
[2] Matt Wood and Prajakta Jagdale Auditing Adobe Flash through Static Analysis
[3] Standards Mapping - CIS Azure Kubernetes Service Benchmark 2
[4] Standards Mapping - CIS Microsoft Azure Foundations Benchmark partial
[5] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[6] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 1
[7] Standards Mapping - CIS Google Kubernetes Engine Benchmark integrity
[8] Standards Mapping - Common Weakness Enumeration CWE ID 942
[9] Standards Mapping - Common Weakness Enumeration Top 25 2023 [24] CWE ID 863
[10] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001368, CCI-001414
[11] Standards Mapping - General Data Protection Regulation (GDPR) Access Violation
[12] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[13] Standards Mapping - NIST Special Publication 800-53 Revision 5 AC-4 Information Flow Enforcement
[14] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[15] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[16] Standards Mapping - OWASP Top 10 2021 A05 Security Misconfiguration
[17] Standards Mapping - OWASP Application Security Verification Standard 4.0 14.4.6 HTTP Security Headers Requirements (L1 L2 L3), 14.5.3 Validate HTTP Request Header Requirements (L1 L2 L3)
[18] Standards Mapping - OWASP Mobile 2014 M5 Poor Authorization and Authentication
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 4.0 Requirement 6.2.4
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[26] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 5.4 - Authentication and Access Control
[27] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 5.4 - Authentication and Access Control, Control Objective C.2.3 - Web Software Access Controls
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.11 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 5.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 5.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[42] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
desc.semantic.actionscript.flash_misconfiguration_overly_permissive_cross_domain_policy