CodeQL 文档

在调用 CreateProcess 时,使用未加引号的路径指定 NULL 应用程序名称

ID: cpp/unsafe-create-process-call
Kind: problem
Security severity: 7.8
Severity: error
Precision: medium
Tags:
   - security
   - external/cwe/cwe-428
Query suites:
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

单击以查看 CodeQL 仓库中的查询

此查询表明存在对 CreateProcess* 函数族中某个函数的调用,这会引入安全漏洞。

建议

不要对 CreateProcess* 函数的 lpApplicationName 参数使用 NULL

如果对 lpApplicationName 传递 NULL,请在 lpCommandLine 中对可执行文件路径使用引号。

示例

在以下示例中,CreateProcessW 被调用,其中 lpApplicationNameNULL,而 lpCommandLine 代表应用程序路径的值未加引号,并且包含空格。

如果攻击者可以访问文件系统,他们可以通过创建诸如 C:\Program.exe 之类的文件来提升权限,该文件将被执行,而不是预期的应用程序。

STARTUPINFOW si;
PROCESS_INFORMATION pi;

// ... 

CreateProcessW(                           // BUG
    NULL,                                 // lpApplicationName
    (LPWSTR)L"C:\\Program Files\\MyApp",  // lpCommandLine
    NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

// ...

要解决此问题,请为 lpApplicationName 指定有效的字符串,或为 lpCommandLine 加引号。例如

(LPWSTR)L"\"C:\\Program Files\\MyApp\"", // lpCommandLine

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私