CWE-124: Buffer Underwrite ('Buffer Underflow') (缓冲区下界之下写入)
ID: 124 类型:基础 |
状态:未完成 |
描述
软件使用在缓冲区起始内存地址之前的位置索引或指针进行相应位置的写入操作。
扩展描述
这通常发生在指针或其索引递减到缓冲区起始位置之前的位置、指针算术在有效内存位置开始之前的位置或使用负索引时。
关联视图
与“研究层面”视图(CWE-1000)相关
与“开发层面”视图(CWE-699)相关
引入模式
阶段 |
说明 |
架构与设计 |
|
实现 |
应用平台
语言
C (出现的可能性不确定)
C++ (出现的可能性不确定)
后果
范围 |
冲击 |
可能性 |
完整性 |
技术冲击: 修改内存; DoS: 崩溃、退出或重启 越界的内存访问很可能导致相关内存的损坏,或者指令的损坏,可能导致崩溃。 |
|
完整性 |
技术冲击: 执行未获授权的代码或命令; 修改内存; 越过保护机制; 其它 如果可以有效地控制损坏的内存,则可以执行任意代码。如果损坏的内存是数据而不是指令,系统将继续在发生不恰当变化的情况下运行,可能违反了隐式或显式策略。结果将仅限于受影响数据的使用方式,例如用于指定用户是否具有特殊权限的相邻内存位置。 |
|
访问控制 |
技术冲击: 越过保护机制; 其它 当结果是任意代码执行时,这通常可以用来破坏任何其他安全服务。 |
被利用的可能性:
中等
示例
例1
在下面的C/C++示例中,使用实用函数来修剪字符串中的尾随空白。函数将输入字符串复制到本地字符串,并使用while语句通过向后移动字符串并用NUL字符覆盖空白来删除后面的空白。
(问题代码)
Example Language: C
char* trimTrailingWhitespace(char *strMessage, int length) {
char *retMessage;
char *message = malloc(sizeof(char)*(length+1));
// copy input string to a temporary string
char message[length+1];
int index;
for (index = 0; index < length; index++) {
message[index] = strMessage[index];
}
message[index] = '\0';
// trim trailing whitespace
int len = index-1;
while (isspace(message[len])) {
message[len] = '\0';
len--;
}
// return string without trailing whitespace
retMessage = message;
return retMessage;
}
但是,如果输入字符串全部是空白,则此函数可能会导致缓冲区下界之下写入。在某些系统上,while语句将向后移过字符串的开头,并对本地缓冲区边界之外的地址调用isspace()函数。
例2
下面是一个代码示例,如果find()返回一个负值以指示在srcbuf中找不到ch,则可能导致缓冲区下界之下写入。:
(问题代码)
Example Language: C
int main() {
...
strncpy(destBuf, &srcBuf[find(srcBuf, ch)], 1024);
...
}
如果srcBuf的索引失去了用户控制,这将会是一个随意的“任意写入”情形。
应对措施
需求规范:可以选择使用不易受这些问题影响的语言。 |
阶段: 实现 应对用作索引或指针算术的所有计算值执行健全性检查。 |
种属
关系 |
类型 |
ID |
名称 |
属于 |
|
970 |
SFP Secondary Cluster: Faulty Buffer Access |
说明
关联弱点
这可能是由几个错误导致的,包括错误的偏移量或在缓冲区开始之前递减的数组索引(请参阅CWE-129)。
研究空白
人们对缓冲区溢出非常关注,但是“下溢”有时存在于几乎没有溢出的产品中,因此很可能这种变体缺乏研究。
CWE-124: Buffer Underwrite ('Buffer Underflow') (缓冲区下界之下写入)相关推荐
- 【Netty】NIO 简介 ( NIO 模型 | NIO 三大组件 | 选择器 Selector | 通道 Channel | 缓冲区 Buffer | NIO 组件分配 | 缓冲区示例 )
文章目录 I . NIO 模型 II . NIO 三大组件交互流程 III . NIO 缓冲区 IV . NIO 与 BIO 对比 V . NIO 线程分配 VI . 缓冲区 ( Buffer ) 示 ...
- Ring Buffer (circular Buffer)环形缓冲区简介
https://blog.csdn.net/langeldep/article/details/8888582 关于环形缓冲区的知识,请看这里 http://en.wikipedia.org/wiki ...
- NodeJS文档之Buffer(1)-Buffer的简介
Buffer 在ECMAScript 2015(ES6)中引入TypedArray之前,JavaScript中没有读取或操作二进制数据流的机制. Buffer类作为Node.js标准API的一部分被引 ...
- freertos学习02-队列 stream buffer message buffer
1.freertos数据传递简介 在freertos中,各个模块都是独立的任务,那么任务之间怎么进行大量的数据通信呢?在V10版本给出了三种方法. 队列queue,发送固定长度的数据串 stream ...
- (SEED-Lab)Buffer Overflow Vulnerability Lab缓冲区溢出实验
(SEED-Lab)Buffer Overflow Vulnerability Lab 欢迎大家访问我的GitHub博客 https://lunan0320.cn 文章目录 一.实验目的 二.实验步骤 ...
- PCIe扫盲——弹性缓存(Elastic Buffer/ CTC Buffer)
转http://blog.chinaaet.com/justlxy/p/5100057990 前面在介绍PCIe物理层逻辑子层的文章中,有提到过弹性缓存(Elastic Buffer,又称为CTC B ...
- protocol buffer java_Protocol Buffer Java实例
大家要先下载protobuffer,在这里: 注意,需要下载两个,一个是complier,另外一个是source code (我下载的是2.5的版本); 讲complier对应的 protoc.exe ...
- CSS 单位及其需要注意的地方
CSS 单位及其需要注意的地方 px(Pixel):绝对长度单位,绝对像素值,它取决于显示器的分辨率.一旦分辨率确定,设置为 px 的尺寸就成为固定尺寸,不会自动缩放.(1px = 1/96 英寸) ...
- buffer java nio_Java NIO深入理解Buffer(缓冲区)
前言 Github:https://github.com/yihonglei/java-all Project:java-nio 一 Buffer概述 Java NIO中的Buffer用于和NIO通道 ...
最新文章
- spring-boot2
- 防止接口数据出问题,前端假数据调试
- ccot 目标跟踪全称_Siamese:CVPR 2019 接收论文作者为你解读视频跟踪领域 | CVPR 2019...
- mysql建表用的什么语句_mysql建表常用sql语句个人经验分享
- HDU多校7 - 6853 Jogging(bfs+结论)
- C++11新特性,利用std::chrono精简传统获取系统时间的方法
- WinUI 3 Preview 3 发布了,再一次试试它的性能
- 算法面试中单链表专题
- android input 点击事件失效,React Native:TextInput元素上的onContentSizeChange事件在Android上不起作用...
- rpm linux gcc安装目录,Linux环境下通过rpm安装gcc的顺序
- python 删除满足条件的行
- 无密码退出、卸载趋势防毒墙网络版
- tp1900芯片对比7621a_MT7621A和MT7620A两个芯片各有什么特点?
- requests.session()的用法
- azure kinect 深度相机原理
- 杭电ACMSteps中Chapter One——Section 3中所有ac代码及解析
- snapchat为什么_什么是Snapchat?
- TIA博途WINCC中英文切换的项目中摄氏度符号无法正常显示的解决办法
- namenode启动报错:There appears to be a gap in the edit log. We expected txid 1, but got txid 16
- Raspberry Pi 4 树莓派4 支持操作系统