cwe - 785:使用操纵路径的函数没有Maximum-sized缓冲区
描述
产品规范路径或文件名调用一个函数,但它提供了一个输出缓冲区,小于最大可能的大小,如PATH_MAX。
扩展描述
传递一个inadequately-sized输出缓冲区路径操作函数会导致缓冲区溢出。这些功能包括realpath(),指向(),PathAppend(),等等。
的关系
背景细节
Windows提供了大量的实用功能,操作缓冲区包含文件名。在大多数情况下,返回的结果是在作为输入缓冲区传递。(通常是文件名修改。)大多数功能需要至少MAX_PATH缓冲区字节长度,但是你应该单独检查每个函数的文档。如果缓冲不够大存储操作的结果,会发生缓冲区溢出。
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
完整性 保密 可用性
|
技术的影响:修改内存;执行未经授权的代码或命令;DoS:崩溃,退出或重新启动
|
|
示范例子
示例1
在本例中,函数创建一个名为“产出\ <名称>”的目录在当前目录中,并返回一个基于堆的副本的名称。
char * createOutputDirectory (char *名称){
char outputDirectoryName [128]; 如果(getCurrentDirectory(128年,outputDirectoryName) = = 0) {
返回null; } 如果(!PathAppend (outputDirectoryName,“输出”)){
返回null; } 如果(!PathAppend (outputDirectoryName、名称)){ } 如果(SHCreateDirectoryEx (outputDirectoryName空,空)! = ERROR_SUCCESS) { } 返回第6行的outputDirectoryName);
}
对于大多数的值当前目录名称参数,该函数将正常工作。然而,如果名称参数特别长,第二个调用PathAppend()可能会溢出outputDirectoryName缓冲区,而小于MAX_PATH字节。
潜在的缓解措施
实施阶段:
总是指定输出缓冲区足够大来处理路径操作函数的最大大小可能的结果。 |
影响资源
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
笔记
维护
这个条目是比大多数条目的抽象级别要低得多,因为它是函数专用。它也有明显的重叠与其他条目,可以随视角。例如,不正确的使用可能引发基于堆栈溢出( cwe - 121)或基于堆溢出( cwe - 122)。CWE团队还没有决定如何处理这些条目。
分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
7有害的王国 |
|
|
经常滥用:文件系统 |
软件故障模式 |
SFP9 |
|
错误的字符串扩张 |
引用
|