ID: 785 类型:变量 | 状态:未完成 |
描述
该软件调用一个函数来规范化路径或文件名,但它提供的输出缓冲区小于可能的最大大小,如path_max。
扩展描述
将大小不适当的输出缓冲区传递给路径操作函数可能导致缓冲区溢出。这些函数包括realPath()、readLink()、pathAppend()和其他。
相关视图
与“研究层面”视图(CWE-1000)相关
与“开发层面”视图(CWE-699)相关
Relevant to the view "Seven Pernicious Kingdoms" (CWE-700)
"研究概念" (CWE-1000)
Nature | Type | ID | Name |
ChildOf | 120 | 没有检查输入大小就复制缓冲区 | |
ChildOf | 676 | 使用危险函数 |
"开发概念" (CWE-699)
Nature | Type | ID | Name |
ChildOf | 20 | 输入验证不当 | |
ChildOf | 120 | 缓冲区溢出 |
"七大缺陷" (CWE-700)
Nature | Type | ID | Name |
ChildOf | 20 | 不当输入验证 |
引入模式
阶段 | 说明 |
实现 |
应用平台
语言
C (出现的可能性不确定)
C++ (出现的可能性不确定)
后果
范围 | 冲击 | 可能性 |
完整性 | 技术冲击: 修改内存; 执行未获授权的代码或命令; DoS: 崩溃、退出或重启 |
示例
例1
在此示例中,函数在当前目录中创建名为“output \<name>”的目录,并返回其名称的堆分配副本。
(问题代码)
Example Language: C
char *createOutputDirectory(char *name) {
char outputDirectoryName[128];
if (getCurrentDirectory(128, outputDirectoryName) == 0) {
return null;
}
if (!PathAppend(outputDirectoryName, "output")) {
return null;
}
if (!PathAppend(outputDirectoryName, name)) {
return null;
}
if (SHCreateDirectoryEx(NULL, outputDirectoryName, NULL) != ERROR_SUCCESS) {
return null;
}
return StrDup(outputDirectoryName);
}
对于当前目录和name参数的大多数值,此函数将正常工作。但是,如果name参数特别长,则对pathAppend()的第二个调用可能会溢出outputDirectoryName缓冲区,该缓冲区小于max_path字节。
应对措施
阶段: 实现 始终指定足够大的输出缓冲区,以处理路径操作函数可能产生的最大大小。 |
种属
关系 | 类型 | ID | 名称 |
属于 | 972 |
说明
维护
该条目的大部分内容最初是CWE-249的一部分,由于几个原因,该条目被弃用。
维护
与大多数条目相比,这个条目的抽象级别要低得多,因为它是特定于函数的。它还与其他条目有明显的重叠,这些条目可能因透视图而异。例如,不正确的使用可能触发基于堆栈的溢出(CWE-121)或基于堆的溢出(CWE-122)。CWE团队尚未决定如何处理这些条目。