Compartir a través de


Advertencia C6277

Nombre de aplicación NULL con una ruta de acceso sin composiciones en llamada a "function-name": da como resultado una vulnerabilidad de seguridad si la ruta de acceso contiene espacios.

Esta advertencia indica que el parámetro de nombre de aplicación es NULL y que puede haber espacios en el nombre de la ruta de acceso ejecutable.

Comentarios

A menos que el nombre del archivo ejecutable esté completo, es probable que haya un problema de seguridad. Un usuario malintencionado podría insertar un archivo ejecutable no autorizado con el mismo nombre anteriormente en la ruta de acceso. Para corregir esta advertencia, puede especificar el nombre de la aplicación en lugar de pasar null. Como alternativa, si pasa null para el nombre de la aplicación, use comillas alrededor de la ruta de acceso ejecutable.

Nombre del análisis de código: CREATEPROCESS_ESCAPE

Ejemplo

El código de ejemplo siguiente genera la advertencia C6277. La advertencia se debe al nombre de la aplicación NULL y al nombre de la ruta de acceso ejecutable que tiene un espacio. Debido a la forma en que la función analiza los espacios, existe el riesgo de que se pueda ejecutar un archivo ejecutable diferente. Para obtener más información, vea 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 );
}

Para corregir esta advertencia, use comillas en la ruta de acceso al archivo ejecutable, tal y como se muestra en el ejemplo siguiente:

#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 );
}