CWE-785: Use of Path Manipulation Function without Maximum-sized Buffer(使用路径操作函数而没有最大缓冲区限制)

 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:

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

SFP Secondary Cluster: Faulty String Expansion

说明

维护

该条目的大部分内容最初是CWE-249的一部分,由于几个原因,该条目被弃用。

维护

与大多数条目相比,这个条目的抽象级别要低得多,因为它是特定于函数的。它还与其他条目有明显的重叠,这些条目可能因透视图而异。例如,不正确的使用可能触发基于堆栈的溢出(CWE-121)或基于堆的溢出(CWE-122)。CWE团队尚未决定如何处理这些条目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值