경고 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 );
}