경고 C6277
'function-name'을 호출할 때 따옴 지정되지 않은 경로가 있는 NULL 애플리케이션 이름: 경로에 공백이 포함된 경우 보안 취약성이 발생합니다.
이 경고는 애플리케이션 이름 매개 변수가 null이고 실행 파일 경로 이름에 공백이 있을 수 있음을 나타냅니다.
실행 파일 이름이 정규화되지 않는 한 보안 문제가 발생할 수 있습니다. 악의적인 사용자는 경로 앞부분에서 동일한 이름의 악성 실행 파일을 삽입할 수 있습니다. 이 경고를 수정하려면 null을 전달하는 대신 애플리케이션 이름을 지정할 수 있습니다. 또는 애플리케이션 이름에 null을 전달하는 경우 실행 경로 주위에 따옴표를 사용합니다.
코드 분석 이름: CREATEPROCESS_ESCAPE
다음 샘플 코드는 경고 C6277을 생성합니다. 이 경고는 NULL 애플리케이션 이름과 실행 파일 경로 이름에 공백이 있기 때문에 발생합니다. 함수가 공백을 구문 분석하는 방법 때문에 다른 실행 파일을 실행할 수 있는 위험이 있습니다. 자세한 내용은 CreateProcessA
를 참조하세요.
#include <windows.h>
#include <stdio.h>
void f_defective()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcessA( NULL,
"C:\\Program Files\\MyApp",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
이 경고를 해결하려면 다음 예제에 표시된 것처럼 실행 파일 경로에 따옴표를 사용하세요.
#include <windows.h>
#include <stdio.h>
void f ()
{
STARTUPINFOA si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof( si ) );
si.cb = sizeof( si );
ZeroMemory( &pi, sizeof( pi ) );
if( !CreateProcessA( NULL,
"\"C:\\Program Files\\MyApp.exe\"",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi ) )
{
puts( "CreateProcess failed." );
return;
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}