Veracode报错CWE-454: external initialization问题咨询(附C代码)
CWE-454: 外部初始化错误分析
你的代码触发CWE-454的核心原因是依赖未受控制的外部环境资源,且未对这些资源进行初始化或校验,具体到这段代码:
if (system("clear") == -1) { fprintf(stderr, "system() failed"); }
问题细节
system("clear")执行时,会通过系统的PATH环境变量查找clear命令的位置。如果攻击者篡改了PATH(比如在PATH最前面加入包含恶意clear程序的目录),你的程序会优先执行恶意代码而非合法的清屏命令。system函数本质是调用系统shell来解析执行命令,而shell的行为同样依赖一系列外部环境变量(如SHELL、PATH等),这些变量完全由运行环境控制,你的代码没有对其进行任何初始化或合法性校验,属于典型的"外部初始化不当"风险。
修复方案
- 使用绝对路径调用命令:直接指定
clear的绝对路径,绕过PATH查找,比如:
注意不同系统的if (system("/usr/bin/clear") == -1) { fprintf(stderr, "system() failed"); }clear路径可能不同,需根据目标环境调整。 - 避免依赖外部命令:改用终端原生的清屏方式,比如输出ANSI转义序列,完全不依赖外部程序:
printf("\033[H\033[J"); - 强制初始化可信环境:如果必须使用
system,先重置PATH为仅包含可信系统路径,再执行命令,示例:setenv("PATH", "/usr/bin:/bin", 1); if (system("clear") == -1) { fprintf(stderr, "system() failed"); }
内容的提问来源于stack exchange,提问作者user180574
相关产品推荐
相关产品推荐

