不受控制的进程操作¶
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
代码将用户输入直接传递给 system
、dlopen
、LoadLibrary
或其他一些进程或库例程。因此,用户可以导致执行任意代码。
建议¶
如果可能,请对要运行的命令或要加载的库使用硬编码的字符串字面量。不要将用户输入直接传递给进程或库函数,而是检查用户输入,然后从硬编码的字符串字面量中选择。
如果无法在编译时确定适用的库或命令,则添加代码以在使用用户输入字符串之前验证其安全性。
示例¶
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");
}
}
参考¶
常见弱点枚举:CWE-114。