CodeQL 文档

不受控制的进程操作

ID: cpp/uncontrolled-process-operation
Kind: path-problem
Security severity: 8.2
Severity: warning
Precision: medium
Tags:
   - security
   - external/cwe/cwe-114
Query suites:
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

代码将用户输入直接传递给 systemdlopenLoadLibrary 或其他一些进程或库例程。因此,用户可以导致执行任意代码。

建议

如果可能,请对要运行的命令或要加载的库使用硬编码的字符串字面量。不要将用户输入直接传递给进程或库函数,而是检查用户输入,然后从硬编码的字符串字面量中选择。

如果无法在编译时确定适用的库或命令,则添加代码以在使用用户输入字符串之前验证其安全性。

示例

int main(int argc, char** argv) {
  char *lib = argv[2];
  
  // BAD: the user can cause arbitrary code to be loaded
  void* handle = dlopen(lib, RTLD_LAZY);
  
  // GOOD: only hard-coded libraries can be loaded
  void* handle2;

  if (!strcmp(lib, "inmem")) {
    handle2 = dlopen("/usr/share/dbwrap/inmem", RTLD_LAZY);
  } else if (!strcmp(lib, "mysql")) {
    handle2 = dlopen("/usr/share/dbwrap/mysql", RTLD_LAZY);
  } else {
    die("Invalid library specified\n");
  }
}

参考

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