계: Input Validation and Representation

입력 검증 및 표현 문제는 메타 문자, 대체 인코딩 및 숫자 표현 때문에 발생합니다. 보안 문제는 입력을 신뢰하기 때문에 발생합니다. 문제로는 "Buffer Overflows", "Cross-Site Scripting" 공격, "SQL Injection", 그 외 여러 가지가 있습니다.

Same-Origin Method Execution

Abstract
이 응용 프로그램은 사용자가 제어할 수 있는 매개 변수를 브라우저에서 실행할 JavaScript 콜백 함수로 적용하므로 공격자가 동일한 끝점의 도메인에 있는 모든 페이지에서 임의의 JavaScript 함수를 실행할 수 있게 됩니다.
Explanation
이 응용 프로그램은 공격자가 제어하는 매개 변수를 브라우저에서 실행할 JavaScript 함수의 이름으로 사용합니다. 공격자는 동일한 응용 프로그램의 도메인에 있는 대상 페이지를 프레이밍한 다음 취약한 페이지를 참조하여 대상 페이지에 임의의 JavaScript 함수를 실행하는 악성 사이트를 생성할 수 있습니다. 이 공격의 영향은 몇 가지 악용 제한이 있다는 점을 제외하고 Cross-Site Scripting의 영향과 유사합니다. 영숫자와 점 문자를 콜백 이름으로 사용할 수 있는 경우 공격자가 페이지의 요소를 참조하고 사용할 수 있게 됩니다.

예제 1: 다음 코드는 사용자가 콜백 함수 이름을 제어할 수 있는 JSONP 응답을 생성합니다.


@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
super("callback");
}
}
GET /api/latest.json?callback=myCallbackFunction 같은 요청의 경우 컨트롤러 메서드는 다음과 같은 응답을 생성합니다.


HTTP/1.1 200 Ok
Content-Type: application/json; charset=utf-8
Date: Tue, 12 Dec 2017 16:16:04 GMT
Server: nginx/1.12.1
Content-Length: 225
Connection: Close

myCallbackFunction({<json>})


공격자는 JavaScript Script 태그를 사용하여 JSONP 끝점에서 응답을 로드할 수 있으며 이 응답은 myCallbackFunction 함수의 실행으로 이어집니다. 공격자는 다른 콜백 이름을 사용하여 DOM을 탐색하고 상호 작용할 수 있습니다. 예를 들어 opener.document.body.someElemnt.firstChild.nextElementSibling.submit은 대상 페이지에서 폼을 찾고 제출하는 데 사용될 수 있습니다.
References
[1] Ben Hayak Same Origin Method Execution (SOME)
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[5] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[6] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection, Control Objective 5.4 - Authentication and Access Control
[7] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective 5.4 - Authentication and Access Control, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[8] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective 5.4 - Authentication and Access Control, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[9] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II
desc.semantic.java.same_origin_method_execution
Abstract
이 응용 프로그램은 사용자가 제어할 수 있는 매개 변수를 브라우저에서 실행할 JavaScript 콜백 함수로 적용하므로 공격자가 동일한 끝점의 도메인에 있는 모든 페이지에서 임의의 JavaScript 함수를 실행할 수 있게 됩니다.
Explanation
이 응용 프로그램은 공격자가 제어하는 매개 변수를 브라우저에서 실행할 JavaScript 함수의 이름으로 사용합니다. 공격자는 동일한 응용 프로그램의 도메인에 있는 대상 페이지를 프레이밍한 다음 취약한 페이지를 참조하여 대상 페이지에 임의의 JavaScript 함수를 실행하는 악성 사이트를 생성할 수 있습니다. 이 공격의 영향은 몇 가지 악용 제한이 있다는 점을 제외하고 Cross-Site Scripting의 영향과 유사합니다. 영숫자와 점 문자를 콜백 이름으로 사용할 수 있는 경우 공격자가 페이지의 요소를 참조하고 사용할 수 있게 됩니다.

예제 1: 다음 코드는 사용자가 콜백 함수 이름을 제어할 수 있는 JSONP 응답을 생성합니다.


def myJSONPService(callback: String) = Action {
val json = getJSONToBeReturned()
Ok(Jsonp(callback, json))
}
GET /api/latest.json?callback=myCallbackFunction 같은 요청의 경우 Example 1에 설명된 컨트롤러 메서드는 다음과 같은 응답을 생성합니다.


HTTP/1.1 200 Ok
Content-Type: application/json; charset=utf-8
Date: Tue, 12 Dec 2017 16:16:04 GMT
Server: nginx/1.12.1
Content-Length: 225
Connection: Close

myCallbackFunction({<json>})


공격자는 JavaScript Script 태그를 사용하여 JSONP 끝점에서 응답을 로드할 수 있으며 이 응답은 myCallbackFunction 함수의 실행으로 이어집니다. 공격자는 다른 콜백 이름을 사용하여 DOM을 탐색하고 상호 작용할 수 있습니다. 예를 들어 opener.document.body.someElemnt.firstChild.nextElementSibling.submit은 대상 페이지에서 폼을 찾고 제출하는 데 사용될 수 있습니다.
References
[1] Ben Hayak Same Origin Method Execution (SOME)
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[4] Standards Mapping - NIST Special Publication 800-53 Revision 5 SI-10 Information Input Validation
[5] Standards Mapping - OWASP Mobile 2024 M4 Insufficient Input/Output Validation
[6] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection, Control Objective 5.4 - Authentication and Access Control
[7] Standards Mapping - Payment Card Industry Software Security Framework 1.1 Control Objective 4.2 - Critical Asset Protection, Control Objective 5.4 - Authentication and Access Control, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation
[8] Standards Mapping - Payment Card Industry Software Security Framework 1.2 Control Objective 4.2 - Critical Asset Protection, Control Objective 5.4 - Authentication and Access Control, Control Objective B.3.1 - Terminal Software Attack Mitigation, Control Objective B.3.1.1 - Terminal Software Attack Mitigation, Control Objective C.3.2 - Web Software Attack Mitigation
[9] Standards Mapping - Security Technical Implementation Guide Version 5.3 APSC-DV-002530 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 6.1 APSC-DV-002530 CAT II
desc.dataflow.scala.same_origin_method_execution