O 적절한 검증절차를 거치지 않고 운영체제 명령어의 일부 또는 전부로 구성된 사용자 입력 값이 실행되어 권한 탈취 및 시스템에 대해 악영향이 발생할 수 있는 취약점
O 근거 자료
☞ 주요정보통신기반시설 기술적 취약점 분석 평가 상세 가이드 (p.659)
O 판단 기준
양호 | 임의의 명령어 입력에 대한 검증이 이루어지는 경우 |
취약 | 임의의 명령어 입력에 대해 명령이 실행되는 경우 |
O 점검 방법
- 웹 어플리케이션 인수 값에 시스템 명령어 전달 시 입력 값에 대한 검증 없이 운영체제 명령어가 실행되는지 확인
O 조치 방법
- 운영체제로부터 명령어를 직접적으로 호출하지 않도록 구현
- 외부 입력에 따라 명령어 생성 및 선택이 필요한 경우 명령어 생성에 필요한 값들을 미리 지정하여 외부 입력에 따라 선택 사용
- 불가피하게 필요할 경우 입력 값에 대한 필터링 처리
: 입력 값에 대한 "&", "|", ";", "`" 문자에 대한 필터링 처리
# 필터링 문자 설명
& | 윈도우 명령어 해석기에서 첫번째 명령이 성공했을 경우만 두번째 명령어 실행 |
| | 첫번째 명령어가 성공하는지에 상관없이 두번째 명령어 실행 |
` | 쉘 해석기가 명령어를 해석 중 역 작은따옴표(`)내 명령어 먼저 실행 |
O 시큐어 코딩(Secure Coding) 예시
# JAVA (에러 처리) ▶
.....
String idx = request.getParameter("idx");
String cmd = "";
// 특정 값에 따른 시스템 명령어 실행 로직
if (idx == "1") {
cmd = "시스템명령어1";
} else if (idx == "2") {
cmd = "시스템명령어2";
} else if (idx == "3") {
cmd = "시스템명령어3";
} else {
/* 에러처리 로직 */
}
Process process = null;
Runtime runtime = Runtime.getRuntime();
process = runtime.exec(cmd);
.....
# JAVA (특수문자 필터링) ▶
String date = request.getParameter("date");
String command = new String("cmd.exe /c backuplog.bat");
// 외부로부터 입력 받은 값을 필터링을 통해 우회문자를 제거하여 사용한다.
date = date.replaceAll("|","");
date = date.replaceAll(";","");
date = date.replaceAll("&","");
date = date.replaceAll(":","");
date = date.replaceAll(">","");
Runtime.getRuntime().exec(command + date);
# ASP (에러처리) ▶
// 특정 값에 따른 시스템 명령어 실행 로직
Select Case idx
Case 1:
cmd = "시스템 명령어1"
Case 2:
cmd = "시스템 명령어2"
Case Else:
/* 에러처리 로직 */
End Select
.....
# ASP (특수문자 필터링) ▶
.....
cmd = Request("cmd")
// 주요 특수문자 제거 로직
cmd = replace(cmd, "|", "")
cmd = replace(cmd, "&", "")
cmd = replace(cmd, ";", "")
.....
# PHP (에러처리) ▶
.....
$idx = $_GET["idx"];
// 특정 값에 따른 시스템 명령어 실행 로직
if ($idx == 1) {
cmd = "시스템 명령어1";
} else if($idx == 2) {
cmd = "시스템 명령어2";
} else if($idx == 3) {
cmd = "시스템 명령어3";
} else {
/* 에러처리 로직 */
}
.....
# PHP (특수문자 필터링) ▶
.....
$cmd = $_GET["cmd"];
// 주요 특수문자 제거 로직
$cmd = str_replace($cmd, ";", "");
$cmd = str_replace($cmd, "&", "");
$cmd = str_replace($cmd, "|", "");
.....
O 적절한 검증절차를 거치지 않고 운영체제 명령어의 일부 또는 전부로 구성된 사용자 입력 값이 실행되어 권한 탈취 및 시스템에 대해 악영향이 발생할 수 있는 취약점
O 근거 자료
☞ 주요정보통신기반시설 기술적 취약점 분석 평가 상세 가이드 (p.659)
O 판단 기준
O 점검 방법
- 웹 어플리케이션 인수 값에 시스템 명령어 전달 시 입력 값에 대한 검증 없이 운영체제 명령어가 실행되는지 확인
O 조치 방법
- 운영체제로부터 명령어를 직접적으로 호출하지 않도록 구현
- 외부 입력에 따라 명령어 생성 및 선택이 필요한 경우 명령어 생성에 필요한 값들을 미리 지정하여 외부 입력에 따라 선택 사용
- 불가피하게 필요할 경우 입력 값에 대한 필터링 처리
: 입력 값에 대한 "&", "|", ";", "`" 문자에 대한 필터링 처리
# 필터링 문자 설명
O 시큐어 코딩(Secure Coding) 예시
# JAVA (에러 처리) ▶
# JAVA (특수문자 필터링) ▶
# ASP (에러처리) ▶
# ASP (특수문자 필터링) ▶
# PHP (에러처리) ▶
# PHP (특수문자 필터링) ▶