계: Input Validation and Representation

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

Formula Injection

Abstract
공격자는 스프레드시트에 작성된 데이터를 제어할 수 있으므로, 특정 스프레드시트 프로세서에서 파일을 여는 사용자를 대상으로 공격할 수 있습니다.
Explanation
Apache OpenOffice Calc 및 Microsoft Office Excel과 같은 많이 사용하는 스프레드시트 프로세서는 강력한 수식 연산 기능을 지원하므로, 공격자가 스프레드시트를 제어하여 기본 시스템에서 임의 명령을 실행할 수 있게 하거나 스프레드시트의 민감한 정보를 누출할 수 있게 합니다.

예를 들어, 공격자가 CSV 필드의 일부로 다음 페이로드를 삽입할 수 있습니다. =cmd|'/C calc.exe'!Z0. 스프레드시트를 여는 사용자가 문서의 출처를 신뢰하는 경우, 스프레드시트 프로세서에서 제시하는 모든 보안 프롬프트를 수락하고 해당 시스템에서 페이로드(이 예제에서는 Windows 계산기를 열고 있음)가 실행될 수 있게 할 수 있습니다.

예제: 다음 예제는 정화되지 않은 사용자 제어 데이터로 CSV 응답을 생성하는 ASP.NET 컨트롤러를 보여줍니다.


public void Service()
{
string name = HttpContext.Request["name"];

string data = GenerateCSVFor(name);
HttpContext.Response.Clear();
HttpContext.Response.Buffer = true;
HttpContext.Response.AddHeader("content-disposition", "attachment;filename=file.csv");
HttpContext.Response.Charset = "";
HttpContext.Response.ContentType = "application/csv";
HttpContext.Response.Output.Write(tainted);
HttpContext.Response.Flush();
HttpContext.Response.End();
}
References
[1] Formula Injection Pentest Magazine
[2] Comma Separated Vulnerabilities Context
desc.dataflow.dotnet.formula_injection
Abstract
공격자는 스프레드시트에 작성된 데이터를 제어할 수 있으므로, 특정 스프레드시트 프로세서에서 파일을 여는 사용자를 대상으로 공격할 수 있습니다.
Explanation
Apache OpenOffice Calc 및 Microsoft Office Excel과 같은 많이 사용하는 스프레드시트 프로세서는 강력한 수식 연산 기능을 지원하므로, 공격자가 스프레드시트를 제어하여 기본 시스템에서 임의 명령을 실행할 수 있게 하거나 스프레드시트의 민감한 정보를 누출할 수 있게 합니다.

예를 들어, 공격자가 CSV 필드의 일부로 다음 페이로드를 삽입할 수 있습니다. =cmd|'/C calc.exe'!Z0. 스프레드시트를 여는 사용자가 문서의 출처를 신뢰하는 경우, 스프레드시트 프로세서에서 제시하는 모든 보안 프롬프트를 수락하고 해당 시스템에서 페이로드(이 예제에서는 Windows 계산기를 열고 있음)가 실행될 수 있게 할 수 있습니다.

예제: 다음 예제는 정화되지 않은 사용자 제어 데이터를 사용하여 csv 파일에 내용을 작성합니다.


func someHandler(w http.ResponseWriter, r *http.Request){
r.parseForm()
foo := r.FormValue("foo")
...
w := csv.NewWriter(file)
w.Write(foo)
}
References
[1] Formula Injection Pentest Magazine
[2] Comma Separated Vulnerabilities Context
desc.dataflow.golang.formula_injection
Abstract
공격자는 스프레드시트에 작성된 데이터를 제어할 수 있으므로, 특정 스프레드시트 프로세서에서 파일을 여는 사용자를 대상으로 공격할 수 있습니다.
Explanation
Apache OpenOffice Calc 및 Microsoft Office Excel과 같은 많이 사용하는 스프레드시트 프로세서는 강력한 수식 연산 기능을 지원하므로, 공격자가 스프레드시트를 제어하여 기본 시스템에서 임의 명령을 실행할 수 있게 하거나 스프레드시트의 민감한 정보를 누출할 수 있게 합니다.

예를 들어, 공격자가 CSV 필드의 일부로 다음 페이로드를 삽입할 수 있습니다. =cmd|'/C calc.exe'!Z0. 스프레드시트를 여는 사용자가 문서의 출처를 신뢰하는 경우, 스프레드시트 프로세서에서 제시하는 모든 보안 프롬프트를 수락하고 해당 시스템에서 페이로드(이 예제에서는 Windows 계산기를 열고 있음)가 실행될 수 있게 할 수 있습니다.

예제: 다음 예제는 정화되지 않은 사용자 제어 데이터로 CSV 응답을 생성하는 Spring 컨트롤러를 보여줍니다.


@RequestMapping(value = "/api/service.csv")
public ResponseEntity<String> service(@RequestParam("name") String name) {

HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.add("Content-Type", "application/csv; charset=utf-8");
responseHeaders.add("Content-Disposition", "attachment;filename=file.csv");

String data = generateCSVFor(name);

return new ResponseEntity<>(data, responseHeaders, HttpStatus.OK);
}
References
[1] Formula Injection Pentest Magazine
[2] Comma Separated Vulnerabilities Context
desc.dataflow.java.formula_injection
Abstract
공격자는 스프레드시트에 작성된 데이터를 제어할 수 있으므로, 특정 스프레드시트 프로세서에서 파일을 여는 사용자를 대상으로 공격할 수 있습니다.
Explanation
Apache OpenOffice Calc 및 Microsoft Office Excel과 같은 많이 사용하는 스프레드시트 프로세서는 강력한 수식 연산 기능을 지원하므로, 공격자가 스프레드시트를 제어하여 기본 시스템에서 임의 명령을 실행할 수 있게 하거나 스프레드시트의 민감한 정보를 누출할 수 있게 합니다.

예를 들어, 공격자가 CSV 필드의 일부로 다음 페이로드를 삽입할 수 있습니다. =cmd|'/C calc.exe'!Z0. 스프레드시트를 여는 사용자가 문서의 출처를 신뢰하는 경우, 스프레드시트 프로세서에서 제시하는 모든 보안 프롬프트를 수락하고 해당 시스템에서 페이로드(이 예제에서는 Windows 계산기를 열고 있음)가 실행될 수 있게 할 수 있습니다.

예제: 다음 예제는 정화되지 않은 사용자 제어 데이터로 CSV 응답을 생성하는 Spring 컨트롤러를 보여줍니다.


@RequestMapping(value = "/api/service.csv")
fun service(@RequestParam("name") name: String): ResponseEntity<String> {
val responseHeaders = HttpHeaders()
responseHeaders.add("Content-Type", "application/csv; charset=utf-8")
responseHeaders.add("Content-Disposition", "attachment;filename=file.csv")
val data: String = generateCSVFor(name)
return ResponseEntity(data, responseHeaders, HttpStatus.OK)
}
References
[1] Formula Injection Pentest Magazine
[2] Comma Separated Vulnerabilities Context
desc.dataflow.kotlin.formula_injection