CWE观点:解决的弱点SEI CERT Perl编码标准
下面的图显示了树状之间的关系在不同级别的抽象上存在的弱点。在最高的层次上,类别和支柱存在弱点。类别(不是技术上的缺点)是特殊CWE条目用于集团弱点,共享一个共同的特点。柱子是描述的弱点在最抽象的时尚。下面这些顶级条目的弱点是不同程度的抽象。类仍然非常抽象,通常独立于任何特定的语言或技术。基础水平的弱点是用来提供一个更具体的类型的弱点。变量是一个弱点,在很低的水平的细节,描述通常局限于一个特定的语言或技术。链是一系列的缺点,必须可以连续产生可利用的漏洞。而复合的缺点是一组必须同时在场,以产生一个可利用的漏洞。
显示详细信息:
1178 -解决的弱点SEI CERT Perl编码标准
类别——CWE条目包含一组其他条目,共享一个共同的特点。01 SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS)- (1179)
1178年
(解决的弱点SEI CERT Perl编码标准)>1179年
01 (SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS))
弱点这类相关的规则和建议输入验证和数据的卫生处理(IDS)部分SEI CERT Perl编码标准。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。不当限制限制目录的路径名(“路径遍历”)(22)
1178年
(解决的弱点SEI CERT Perl编码标准)>1179年
01 (SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS))>22
(不当限制限制目录的路径名(路径遍历))
产品使用外部输入来构造一个路径名,目的是为了辨别一个文件或目录,坐落在父目录的限制,但是产品不正确路径名中的中和特殊元素可以导致路径名来解决限制目录以外的位置。目录遍历路径遍历
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。使用外部控制的格式字符串- (134)
1178年
(解决的弱点SEI CERT Perl编码标准)>1179年
01 (SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS))>134年
(使用外部控制的格式字符串)
产品使用一个函数,它接受一个格式字符串作为参数,但格式字符串来自外部源。
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。不当的验证数组索引- (129)
1178年
(解决的弱点SEI CERT Perl编码标准)>1179年
01 (SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS))>129年
(不正确验证数组索引)
产品使用不受信任的输入在计算或使用数组索引,但是产品不验证或不正确验证索引,确保索引引用数组中的一个有效位置。禁止入内的数组索引index-out-of-range数组索引下溢
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。内存分配过多的大小值- (789)
1178年
(解决的弱点SEI CERT Perl编码标准)>1179年
01 (SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS))>789年
(内存分配与过度大小值)
基于一个不可信的产品分配内存,大尺寸值,但这并不能保证尺寸在预期范围内,允许任意数量的内存分配。堆栈疲惫
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。不当的编码或逃避的输出- (116)
1178年
(解决的弱点SEI CERT Perl编码标准)>1179年
01 (SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS))>116年
(不正确的编码或转义输出)
产品准备一个结构化的信息沟通与另一个组件,但编码或逃避的数据丢失或错误地完成。因此,是不会保留消息的预期结构。输出卫生处理输出验证输出编码
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。不当中和一个命令中使用的特殊元素(“命令注入”)- (77)
1178年
(解决的弱点SEI CERT Perl编码标准)>1179年
01 (SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS))>77年
(不当中和特殊元素中使用一个命令(“命令注入”))
产品结构的全部或部分命令使用externally-influenced输入从一个上游组件,但这并不中和或错误地中和特殊元素时可以修改预定的命令发送到下游组件。
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。不当中和指令的动态评估代码(Eval注入)- (95)
1178年
(解决的弱点SEI CERT Perl编码标准)>1179年
01 (SEI CERT Perl编码标准,指导方针。输入验证和数据卫生处理(IDS))>95年
(不正确的指令在动态评估代码中和(Eval注入))
产品从一个上游组件接收输入,但它不会消除或中和代码语法错误使用前输入在一个动态的评价(如打电话。“eval”)。
类别——CWE条目包含一组其他条目,共享一个共同的特点。02 SEI CERT Perl编码标准,指导方针。声明和初始化(DCL)- (1180)
1178年
(解决的弱点SEI CERT Perl编码标准)>1180年
02 (SEI CERT Perl编码标准,指导方针。声明和初始化(DCL))
弱点这类相关的规则和建议的声明和初始化(DCL)部分SEI CERT Perl编码标准。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。函数调用与指定参数不正确- (628)
1178年
(解决的弱点SEI CERT Perl编码标准)>1180年
02 (SEI CERT Perl编码标准,指导方针。声明和初始化(DCL))>628年
(函数调用错误指定参数)
产品调用一个函数,程序,或常规参数不正确地指定,导致always-incorrect行为和合成的弱点。
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。失踪的初始化一个变量- (456)
1178年
(解决的弱点SEI CERT Perl编码标准)>1180年
02 (SEI CERT Perl编码标准,指导方针。声明和初始化(DCL))>456年
(没有初始化的变量)
产品不关键变量进行初始化,导致执行环境使用意想不到的价值。
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。使用未初始化的变量- (457)
1178年
(解决的弱点SEI CERT Perl编码标准)>1180年
02 (SEI CERT Perl编码标准,指导方针。声明和初始化(DCL))>457年
(使用未初始化的变量)
代码使用一个变量没有初始化,导致不可预知的或意想不到的结果。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。使用过时的功能- (477)
1178年
(解决的弱点SEI CERT Perl编码标准)>1180年
02 (SEI CERT Perl编码标准,指导方针。声明和初始化(DCL))>477年
(使用过时的函数)
代码使用过时或陈旧的函数,这意味着没有得到积极检查或维护的代码。
类别——CWE条目包含一组其他条目,共享一个共同的特点。03 SEI CERT Perl编码标准,指导方针。表达式(EXP)- (1181)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))
弱点这类相关的规则和建议的表达式(EXP)部分SEI CERT Perl编码标准。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。意想不到的状态代码或返回值- (394)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>394年
(意想不到的状态代码或返回值)
产品不正确检查当函数或操作函数返回一个值,是合法的,但不是所期望的产品。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。运算符优先级逻辑错误- (783)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>783年
(运算符优先级逻辑错误)
产品使用一个表达式的运算符优先级导致使用错误的逻辑。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。使用过时的功能- (477)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>477年
(使用过时的函数)
代码使用过时或陈旧的函数,这意味着没有得到积极检查或维护的代码。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。未捕获异常- (248)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>248年
(异常)
从一个函数抛出异常,但这并不是她的老公知道。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。未经检查的错误条件- (391)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>391年
(未检测错误条件)
(计划在弃用。看到维修笔记和考虑cwe - 252, cwe - 248,或cwe - 1069。]我gnoring exceptions and other error conditions may allow an attacker to induce unexpected behavior unnoticed.
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。清理不当抛出异常- (460)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>460年
(清理不当抛出例外)
产品不清理它的状态或不正确清理其状态时将抛出一个异常,导致意想不到的状态或控制流。
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。不正确的控制流范围- (705)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>705年
(不正确的控制流范围)
产品不正常控制流返回到正确的位置后,完成了一个任务或发现一个不寻常的条件。
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。不适当的检查异常或异常情况- (754)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>754年
(不正确检查异常或异常情况)
产品不检查或不正确检查异常或异常情况不会经常发生在日常操作的产品。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。不返回值- (252)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>252年
(不返回值)
产品不会检查方法或函数返回值,可以防止检测意想不到的状态和条件。
链——一个复合元素是一个序列的两个或两个以上的独立的缺点,可以在软件中紧密联系在一起。一个弱点,X,可以直接创建所必需的条件导致另一个弱点,Y,进入一个脆弱的状态。,当这一切发生的时候,CWE指X作为“主”Y, Y是“合成”X连锁可能涉及两个以上缺点,在某些情况下,他们可能有一个树状结构。检查返回值为NULL指针- (690)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>690年
(不返回值为NULL指针)
产品后不检查错误调用函数可以返回一个空指针如果函数失败,导致合成NULL指针。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。函数调用与指定参数不正确- (628)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>628年
(函数调用错误指定参数)
产品调用一个函数,程序,或常规参数不正确地指定,导致always-incorrect行为和合成的弱点。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。返回一个可变对象,一个不受信任的调用者- (375)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>375年
(返回一个可变对象,一个不受信任的调用方)
发送似乎与可变数据的返回值可能会导致调用函数被修改或删除的数据。
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。使用错误的操作符的字符串比较- (597)
1178年
(解决的弱点SEI CERT Perl编码标准)>1181年
03 (SEI CERT Perl编码标准,指导方针。表达式(EXP))>597年
(使用错误的操作符字符串比较)
产品使用错误的操作符比较字符串时,比如使用“= =”当.equals()方法应该使用。
类别——CWE条目包含一组其他条目,共享一个共同的特点。04 SEI CERT Perl编码标准,指导方针。整数(INT)- (1182)
1178年
(解决的弱点SEI CERT Perl编码标准)>1182年
04 (SEI CERT Perl编码标准,指导方针。整数(INT))
弱点这类相关的规则和建议的整数(INT)部分SEI CERT Perl编码标准。
类别——CWE条目包含一组其他条目,共享一个共同的特点。数字错误- (189)
1178年
(解决的弱点SEI CERT Perl编码标准)>1182年
04 (SEI CERT Perl编码标准,指导方针。整数(INT))>189年
(数字错误)
这一类的弱点有关不当或转换的数字计算。
类别——CWE条目包含一组其他条目,共享一个共同的特点。05年SEI CERT Perl编码标准,指导方针。字符串(STR)- (1183)
1178年
(解决的弱点SEI CERT Perl编码标准)>1183年
05 (SEI CERT Perl编码标准,指导方针。字符串(STR))
弱点这类相关的规则和建议的字符串(STR)部分SEI CERT Perl编码标准。
类别——CWE条目包含一组其他条目,共享一个共同的特点。06 SEI CERT Perl编码标准,指导方针。面向对象编程(OOP)- (1184)
1178年
(解决的弱点SEI CERT Perl编码标准)>1184年
06 (SEI CERT Perl编码标准,指导方针。面向对象编程(OOP))
弱点这类相关的规则和建议的面向对象编程(OOP)部分SEI CERT Perl编码标准。
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。访问私有变量通过公共方法至关重要- (767)
1178年
(解决的弱点SEI CERT Perl编码标准)>1184年
06 (SEI CERT Perl编码标准,指导方针。面向对象编程(OOP))>767年
(通过公共方法访问重要的私有变量)
产品定义了一个公共方法,读取或修改一个私有变量。
类别——CWE条目包含一组其他条目,共享一个共同的特点。07年SEI CERT Perl编码标准,指导方针。文件输入和输出(FIO)- (1185)
1178年
(解决的弱点SEI CERT Perl编码标准)>1185年
07 (SEI CERT Perl编码标准,指导方针。文件输入和输出(FIO))
弱点这类相关的规则和建议在文件的输入和输出(FIO)部分SEI CERT Perl编码标准。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。不当链接之前决议文件访问(“链接后”)(59)
1178年
(解决的弱点SEI CERT Perl编码标准)>1185年
07 (SEI CERT Perl编码标准,指导方针。文件输入和输出(FIO))>59
(不正确的链接之前决议文件访问(“链接后”))
产品基于文件名试图访问一个文件,但它不适当阻止,文件名标识一个链接或快捷方式,解决了一个意想不到的资源。不安全的临时文件拉链滑
类别——CWE条目包含一组其他条目,共享一个共同的特点。SEI CERT Perl编码标准——50的指导方针。杂项(MSC)- (1186)
1178年
(解决的弱点SEI CERT Perl编码标准)>1186年
50 (SEI CERT Perl编码标准,指导方针。杂项(MSC))
弱点这类相关的规则和建议的杂项(MSC)部分SEI CERT Perl编码标准。
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。死代码- (561)
1178年
(解决的弱点SEI CERT Perl编码标准)>1186年
50 (SEI CERT Perl编码标准,指导方针。杂项(MSC))>561年
(死代码)
产品包含死代码,无法执行。
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。赋值变量而不使用- (563)
1178年
(解决的弱点SEI CERT Perl编码标准)>1186年
50 (SEI CERT Perl编码标准,指导方针。杂项(MSC))>563年
(任务变量没有使用)
变量的值被分配,但不会使用,使它一个死去的商店。未使用的变量
视图组件cwe - 767:访问私有变量通过公共方法至关重要
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 c++患病率(待定) c#患病率(待定) Java患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的示例声明一个关键变量是私有的,然后允许变量被修改公共方法。
(坏的代码)
例如语言:c++
私人:浮动价格;
公众:void changePrice(浮动newPrice) {
价格= newPrice; }示例2 下面的例子可以用来实现一个用户论坛,一个用户(UID)可以在多个概要文件之间切换(PID)。
(坏的代码)
例如语言:Java
公共类客户{
私人int UID; }公共int PID; 私人字符串的用户名; 公共端(字符串的用户名){
PID = getDefaultProfileID (); }UID = mapUserNametoUID(用户名); 这一点。用户名=用户名; 公共空间setPID (int ID) {
UID = ID; }程序员实现setPID修改PID变量的意图,但由于一个错字。意外的关键变量指定UID。如果程序允许将概要文件id在1到10之间,但1意味着用户的UID是视为一个管理员,然后用户可以获得管理权限的这个错误。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 563:赋值变量而不使用
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 561:死代码
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 第二个if语句的条件无法满足。它要求非空的变量,而在年代唯一的路径可以被指定一个非空值有一个返回语句。
(坏的代码)
例如语言:c++
字符串s =零;
如果(b) {
s =“是”; }返回; 如果(s ! = null) {
死(); }示例2 下面的类,两个私有方法调用,但是由于没有一个从其他地方调用,它们都是死代码。
(坏的代码)
例如语言:Java
公开课DoubleDead {
私人空间doTweedledee () { }
doTweedledumb (); }私人空间doTweedledumb () {
doTweedledee (); }公共静态void main (String [] args) {
system . out。println(“运行DoubleDead”); }(在本例中它是一件好事,方法都死了:调用任何一种会导致无限循环)。 示例3 字段命名胶不是用于下面的类。类的作者不小心把引号字段名称,将其转换成一个字符串常数。
(坏的代码)
例如语言:Java
公开课死{
字符串胶;
公共字符串getGlue () {
返回“胶水”; }
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 628:函数调用与指定参数不正确
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的PHP方法鉴定了一个特定的用户名/密码组合但叫做参数在相反的顺序。
(坏的代码)
例如语言:PHP
功能验证(用户名、密码)美元{
/ /验证用户 … 验证($ _POST['密码'],$ _POST['用户名']); 示例2 这个Perl代码打算记录用户是否认证成功与否,并退出,如果用户无法进行身份验证。然而,当它调用ReportAuth(),第三个参数是指定为0,而不是1,所以它不会退出。
(坏的代码)
例如语言:Perl
子ReportAuth {
我的(用户名,因此,美元致命的美元)= @ _; }PrintLog(“身份验证:用户名= % s,结果= % d”,用户名美元,美元的结果); 如果(($结果不“成功”)& & $致命){
死”失败! \ n”; }子PrivilegedFunc {
结果= CheckAuth美元($用户名); }ReportAuth(用户名,因此,美元0); DoReallyImportantStuff (); 示例3 下面的Java片段,accessGranted()方法不小心被称为静态ADMIN_ROLES数组而不是用户角色。
(坏的代码)
例如语言:Java
私有静态最终String [] ADMIN_ROLES =…;
公共布尔空白accessGranted(字符串资源,字符串用户){
String [] userRoles = getUserRoles(用户); }返回accessGranted(资源、ADMIN_ROLES); 私人布尔空白accessGranted(字符串资源,String [] userRoles) { / /根据用户角色授予或拒绝访问 …
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 754:不当检查不寻常或异常情况
视图定制的信息:
程序员可能会假定某些事件或条件永远不会发生或不需要担心,如低内存条件下,由于缺乏资源限制权限,或行为不端的客户或组件。然而,攻击者可能故意引发这些不寻常的条件,因此违反了程序员的假设,可能引入不稳定,不正确的行为,或一个漏洞。 注意,这个条目不仅仅是关于使用异常和异常处理,检查和处理机制的不寻常或意外情况。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 考虑下面的代码段:
(坏的代码)
例如语言:C
char buf [10], cp_buf [10];
fgets (buf 10 stdin); strcpy (cp_buf buf); 程序员预计,当fgets()返回,但将包含一个以null结尾的字符串长度为9的或更少。但如果发生I / O错误,fgets()不会null-terminate缓冲区。此外,如果到达文件的末尾读取任何字符之前,fgets()返回而无需编写任何缓冲区。在这两种情况下,fgets()信号,发生了一些不寻常的东西通过返回NULL,但是在这段代码中,警告不会被注意到。缺乏一个空终结者buf会导致缓冲区溢出在随后调用strcpy ()。 示例2 下面的代码不检查内存分配成功之前使用malloc()返回的指针。
(坏的代码)
例如语言:C
buf = (char *) malloc (req_size);
strncpy (buf转送,req_size); 这个编码错误的传统防御是:“如果我的程序运行的内存,它就会失败。不管我是否处理错误的或者仅仅是允许程序死一个段错误当试图废弃空指针”。This argument ignores three important considerations:
示例3 下面的示例文件读入一个字节数组。
(坏的代码)
例如语言:c#
char[]中byteArray = new char [1024];
(IEnumerator i = users.GetEnumerator ();i.MoveNext (); i.Current ()) {
字符串的用户名=(字符串)i.Current (); }字符串pFileName = PFILE_ROOT + " +用户名; StreamReader sr = new StreamReader (pFileName); sr.Read(中byteArray, 0, 1024); / /总是1 k字节的文件 sr.Close (); processPFile(用户名、中byteArray);
(坏的代码)
例如语言:Java
FileInputStream fis;
byte[]中byteArray =新字节[1024]; 迭代器(i = users.iterator ();i.hasNext ();) {
字符串的用户名=(字符串)i.next ();
字符串pFileName = PFILE_ROOT + " +用户名; FileInputStream fis = new FileInputStream (pFileName); fis.read(中byteArray);/ /文件总是1 k字节 fis.close (); processPFile(用户名、中byteArray); 代码遍历一组用户,阅读一个私人数据文件为每个用户。程序员总是假设文件1 kb大小,因此忽略了阅读()的返回值。如果攻击者可以创建一个小文件,程序将回收的其余部分之前的数据用户和治疗它,好像它属于攻击者。 示例4 下面的代码并没有检查getParameter()返回的字符串为空在调用成员函数之前compareTo(),可能导致零废弃。
(坏的代码)
例如语言:Java
字符串itemName = request.getParameter (ITEM_NAME);
如果(itemName.compareTo (IMPORTANT_ITEM) = = 0) {
… }… 下面的代码不检查返回的字符串是否在调用成员函数之前项目属性为空=(),可能导致零废弃。
(坏的代码)
例如语言:Java
字符串itemName = request.Item (ITEM_NAME);
如果(itemName.Equals (IMPORTANT_ITEM)) {
… }… 传统的防御这个编码错误的方法是:“我知道请求的值将总是存在,因为....如果它不存在,程序不能执行所需的行为所以不管我处理错误的或者仅仅是允许程序死非关联化一个null值。”But attackers are skilled at finding unexpected paths through programs, particularly when exceptions are involved. 示例5 下面的代码显示了一个系统属性设置为null,后来引用时的程序员错误地假定它将总是被定义。
(坏的代码)
例如语言:Java
System.clearProperty (“os.name”);
… 字符串操作系统= System.getProperty (“os.name”); 如果(os)。equalsIgnoreCase (Windows 95)) system . out。println(“不支持”); 传统的防御这个编码错误的方法是:“我知道请求的值将总是存在,因为....如果它不存在,程序不能执行所需的行为所以不管我处理错误的或者仅仅是允许程序死非关联化一个null值。”But attackers are skilled at finding unexpected paths through programs, particularly when exceptions are involved. 例子6 下面的VB。NETcode does not check to make sure that it has read 50 bytes from myfile.txt. This can cause DoDangerousOperation() to operate on an unexpected value.
(坏的代码)
例如语言:c#
昏暗的MyFile MyFile新文件流”。txt”, FileMode。Open, FileAccess.Read, FileShare.Read)
暗MyArray(50)字节 MyFile。Read(MyArray, 0, 50) DoDangerousOperation (MyArray (20)) 在。net,它并不少见为程序员误解读()和相关方法,许多系统的一部分。IO类。流和读者类并不认为这是不寻常的或特殊如果只有少量的数据可用。这些类只需添加少量的数据返回的缓冲区,并将返回值设置为读取的字节数或字符。没有保证返回的数据量等于请求的数据量。 例7 这个例子将IP地址从一个用户,验证它是完整的,然后查找主机名和拷贝到缓冲区。
(坏的代码)
例如语言:C
空白host_lookup (char * user_supplied_addr) {
struct hostent *惠普;
in_addr_t * addr; char主机名[64]; in_addr_t inet_addr (const char * cp); / *程序确保user_supplied_addr是正确的格式转换* / validate_addr_form (user_supplied_addr); addr = inet_addr (user_supplied_addr); 惠普= gethostbyaddr (addr, sizeof (struct in_addr) AF_INET); strcpy(主机名、hp - > h_name); 如果攻击者提供了一个地址,似乎是格式良好的,但是地址不解决一个主机名,然后调用gethostbyaddr()将返回NULL。由于代码从gethostbyaddr不会检查返回值(cwe - 252),一个空指针(cwe - 476)将发生在调用strcpy ()。 注意,这段代码也容易受到缓冲区溢出(cwe - 119)。 示例8 在接下来的C / c++示例方法outputStringToFile打开本地文件系统中的一个文件和输出一个字符串到文件。输入参数输出和文件名包含字符串输出到文件和文件的名称。
(坏的代码)
例如语言:c++
int outputStringToFile (char *输出,char *文件名){
openFileToWrite(文件名); writeToFile(输出); closeFile(文件名); 然而,这段代码并不openFileToWrite检查返回值的方法,writeToFile closeFile验证文件正常开启和关闭,字符串被成功写入文件。这些方法的返回值应该被检查来确定检测的方法是成功的,并允许错误或意想不到的条件如以下示例。
(好的代码)
例如语言:c++
int outputStringToFile (char *输出,char *文件名){
int后=成功;
int isOpen = openFileToWrite(文件名); 如果(isOpen = =失败){
printf("无法打开文件% s”,文件名); }后=失败; 其他{
int isWrite = writeToFile(输出);
如果(isWrite = =失败){
printf("无法写入文件% s ",文件名); }后=失败; int isClose = closeFile(文件名); 如果(isClose = =失败)
后=失败;
返回后; 例9 在以下Java示例方法readFromFile使用FileReader对象读取一个文件的内容。创建FileReader对象readFile使用File对象,使用setInputFile readFile对象初始化方法。setInputFile方法在调用readFromFile之前应该被称为方法。
(坏的代码)
例如语言:Java
私人文件readFile =零;
公共空间setInputFile(字符串inputFile) { / /创建readFile文件对象从字符串包含文件的名字 公共空间readFromFile () {
尝试{
读者= new FileReader (readFile);
/ /读取输入文件 然而,readFromFile方法不会检查readFile对象为空,即没有被初始化,在创建FileReader对象和阅读之前从输入文件。readFromFile方法应该验证readFile对象是否为空,输出一个错误消息并引发一个异常如果readFile对象为空,如以下代码。
(好的代码)
例如语言:Java
私人文件readFile =零;
公共空间setInputFile(字符串inputFile) { / /创建readFile文件对象从字符串包含文件的名字 公共空间readFromFile () {
尝试{
如果(readFile = = null) {
System.err。println(“输入文件没有设置,叫setInputFile方法之前调用openInputFile”); }抛出NullPointerException; 读者= new FileReader (readFile); / /读取输入文件 捕获(NullPointerException ex) {…}
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系
有时,当返回值可以用来显示一个错误,一个未经检查的返回值是一个code-layer失踪的实例应用程序层检查异常情况。然而,返回值并不总是需要通知异常情况。例如,过期的资源,以引用的方式传递值,修改数据,异步套接字等可能表明没有使用返回值的异常情况。
cwe - 460:清理不当抛出异常
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关观点“软件开发”(cwe - 699)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C患病率(待定) c++患病率(待定) Java患病率(待定) c#患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的例子显示出,需求不足。
(坏的代码)
例如语言:Java
公共类foo {
公共静态最终void main (String参数[]){
布尔returnValue; returnValue = doStuff (); 公共静态最终布尔doStuff () { 布尔threadLock; 布尔真值= true; 尝试{ 而( / /检查一些条件 ){ threadLock = true;/ /做的一些东西真值 threadLock = false; 捕获(异常e) { System.err。println(“你做坏事”); 如果()返回真值; 返回真值; 在这种情况下,您可能会让一个线程锁不小心。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 116:不适当的编码或逃避的输出
视图定制的信息:
不当编码或逃避可以让攻击者修改命令发送到另一个组件,插入恶意命令。 大多数产品都遵循一个特定的组件之间的通信协议,它使用结构化的消息,比如查询或命令。这些结构化的消息可以包含原始数据穿插元数据和控制信息。例如,“GET /索引。html HTTP / 1.1”是一个结构化的消息包含一个命令(“获得”)和一个参数(“/ index . html”)和元数据使用的是哪一种协议版本(“HTTP / 1.1”)。 如果一个应用程序使用attacker-supplied输入构造结构化的消息不正确编码或逃避,那么攻击者可以插入特殊字符,将导致数据被视为控制信息或元数据。因此,组件接收输出执行错误的操作,或者错误地解读数据。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的(通常是普遍的) 技术 数据库服务器(通常是普遍的) Web服务器(通常是普遍的)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这段代码显示提交的电子邮件地址作为一种形式的一部分。
(坏的代码)
例如语言:JSP
< %字符串邮件= request.getParameter(“电子邮件”);% >
… 电子邮件地址:< % = % >邮件 从形式读取参数值反射回客户端浏览器没有被编码输出之前,允许各种XSS攻击(cwe - 79)。 示例2 考虑一个聊天应用程序的前端web应用程序与后端服务器通信。后端遗留代码,不执行身份验证或授权,所以前端必须实现它。聊天协议支持两个命令,说,禁令,尽管只有管理员可以使用禁止命令。每个参数都必须由一个空格隔开。原始输入url编码。指定的消息传递协议允许将多个命令在同一行如果是由“|”分隔字符。 首先让我们看看后台命令处理程序代码
(坏的代码)
例如语言:Perl
(inputString = readLineFromFileHandle美元serverFH);
#生成一个字符串数组用“|”分隔字符。 @commands =分裂(/ \ | / inputString美元); foreach cmd美元(@commands) { #独立的运营商参数基于单个空格 (运营商,args美元)=分裂(/ / cmd美元2); (args = UrlDecode美元args); 如果($符eq“禁令”){
ExecuteBan (args); }elsif(运营商eq”说“美元){
ExecuteSay (args); }前端web应用程序接收到命令,编码发送到服务器,执行授权检查,并将命令发送到服务器。
(坏的代码)
例如语言:Perl
$ inputString = GetUntrustedArgument(“命令”);
(cmd, argstr美元)=分裂(/ \ s + / inputString美元,2); #删除多余的空格和CRLF变化的空间 $ argstr = ~ s / \ s + / / gs; $ argstr = UrlEncode ($ argstr); 如果(($ cmd eq“禁令”)& & (!IsAdministrator(用户名)美元)){
死”的错误:你不是管理。\ n”; }#与文件服务器使用文件句柄 $ fh = GetServerFileHandle (myserver); 印刷美元跳频“cmd argstr美元\ n”; 很明显,而协议和后端允许多个命令发送一个请求,前端只打算发一个命令。然而,UrlEncode函数可能会离开“|”字符完好无损。如果攻击者提供了:
(攻击代码)
世界|禁止user12问好
然后前端将看到这是一个“说”的命令,和美元argstr看起来像“hello world user12 |禁令”。由于命令是“说”,检查“禁令”命令将失败,和前端后端将url编码的命令:
(结果)
% 20世界问好| % 20 user12的禁令
然而,后端将把这些当作两个独立的命令:
(结果)
世界问好
禁止user12 不过,请注意,如果前端正确编码的“|”“% 7 c”,后端将只处理一个命令。 示例3 这个例子需要用户输入,通过它通过一个编码方案,然后创建一个用户指定的目录。
(坏的代码)
例如语言:Perl
子GetUntrustedInput {
返回($ ARGV [0]); }子编码{
我的(str)美元= @ _; }$ str = ~ s / \ & / \, / gs; $str =~ s/\"/\"/gs; str = ~ s / \ '美元/事情就让它\,/ gs; $str =~ s/\\</gs; $str =~ s/\>/\>/gs; 返回(str); 子doit {
我的美元uname =编码(GetUntrustedInput(“用户名”)); }打印”< b >欢迎,美元uname ! < / b > < p > \ n”; 系统(“cd /home/$ uname;/bin/ls - l”); 程序员编码的尝试危险的人物,然而denylist编码是不完整的(cwe - 184),攻击者仍然可以通过一个分号,导致与指挥系统注入(cwe - 77)。 此外,编码与命令执行例程用于不当。攻击者甚至不需要插入自己的分号。攻击者可以利用编码程序提供分号分隔的命令。如果攻击者提供一个字符串的形式:
(攻击代码)
“pwd
然后程序将编码撇号和插入分号,哪些功能作为命令分隔符时传递给系统功能。这允许攻击者完成命令注入。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系
这个弱点是主要缺点与注入(cwe - 74)由于注入的固有性质涉及违反了结构化的消息。
的关系 cwe - 116和CWE-20有着密切的关联,因为根据结构化信息的本质,正确输入验证可以间接地阻止特殊字符改变结构化信息的意义。例如,通过确认数字ID字段应该只包含0 - 9的字符,程序员有效地防止注入攻击。 然而,输入验证并不总是足够的,特别是当严格的数据类型必须支持较少,如自由格式的文本。考虑一个SQL注入场景,在该场景中,一个姓是插入一个查询。“O ' reilly”这个名字可能会通过验证步骤,因为它是一种常见的姓氏在英语语言。但是,它不能直接插入到数据库,因为它包含了““撇号的角色,这将需要转义或中和。在这种情况下,剥离撇号可能减少SQL注入的风险,但是它会产生不正确的行为,因为错误的名字将被记录下来。 术语
使用“编码”和“逃避”条件差别很大。例如,在一些编程语言中,术语交替使用,而其他语言为不同的任务提供api,使用这两个术语。这种重叠使用扩展到了网络,如“逃脱”JavaScript函数,其目的是说明编码。编码和逃避的概念早在Web几十年。鉴于这种情况下,很难CWE采取一致的词汇,不会被误解的一些选区。
理论
这是一个数据/指令边界误差数据的边界不够执行之前发送到不同的控制范围。
研究的差距
虽然许多漏洞发布相关输出编码不足,有这样一个强调输入验证作为一个保护机制,描述的根本原因很少。CVE内,重点主要是理解SQL注入和跨站点脚本编制等问题。很可能这个弱点经常发生在自定义协议支持多种编码,未必可检测与自动化技术。
CWE-22:不当限制限制目录的路径名(“路径遍历”)
视图定制的信息:
许多文件操作的目的是发生在一个受限制的目录。通过使用特殊的元素,如“. .”和“/”分隔符,攻击者可以逃避限制以外的位置来访问系统上的其他文件或目录。最常见的一种特殊的元素是“. ./”序列,这在大多数现代操作系统都被解释为父目录的当前位置。这被称为相对路径遍历。路径遍历还包括使用绝对路径名,如“/ usr /地方/ bin”,这也可能是有用的在获得意想不到的文件。这被称为绝对路径遍历。 在许多编程语言,注入一个null字节(0或NUL)可能允许攻击者截断生成的文件名扩大攻击范围。例如,产品可能会增加”。txt”任何路径,从而限制了攻击者文本文件,但是零注入可能有效地去除这种限制。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的代码可以为社交网络应用程序的每个用户的配置信息存储在一个单独的文件中。所有文件都存储在一个目录中。
(坏的代码)
例如语言:Perl
dataPath公司美元= " /用户/ cwe /配置文件”;
我的$ username =参数(“用户”); 我的profilePath = dataPath公司美元。“/”。美元的用户名; 开放(我跳频美元," < ",$ profilePath) | | ExitError(“配置文件读取错误:$ profilePath”); 打印“< ul > \ n”; 而(< $ fh >) {
打印”<李> $ _ < /李> \ n”; }打印”< / ul > \ n”; 而程序员打算访问文件,如“/用户/ cwe / profiles /爱丽丝”或“/用户/ cwe / profiles / bob”,没有验证传入的用户参数。攻击者可以提供一个字符串,例如:
(攻击代码)
. . / . . / . . / etc / passwd
程序将生成一个配置文件路径名是这样的:
(结果)
/用户/ cwe / profiles / . . / . . / . . / etc / passwd
文件打开时,操作系统解决了”。/”在路径规范化和访问这个文件:
(结果)
/ etc / passwd
因此,攻击者可以读取整个密码的文本文件。 注意,这段代码还包含一个错误消息信息泄漏cwe - 209)如果用户参数不会产生一个存在的文件:提供完整的路径名。由于缺乏检索输出编码的文件,也可能是一个跨站点脚本问题(cwe - 79)如果概要文件包含任何HTML,但是其他代码需要检查。 示例2 在下面的示例中,一个字典文件的路径从一个系统属性读取并用来初始化一个文件对象。
(坏的代码)
例如语言:Java
字符串文件名= System.getProperty (“com.domain.application.dictionaryFile”);
文件dictionaryFile =新文件(文件名); 然而,道路并不确认或修改,以防止它包含相对或绝对路径序列之前创建File对象。这允许任何人可以控制系统属性来确定使用什么文件。理想情况下,路径应相对于解决一些应用程序或用户的主目录。 示例3 下面的代码将不受信任的输入,并使用一个正则表达式来过滤”. .从输入/”。然后将这个结果/home/user/目录并试图读取文件最后生成的路径。
(坏的代码)
例如语言:Perl
我的用户名=美元GetUntrustedInput ();
用户名= ~ s / \美元。\ \ / / /; 我的$ filename =“/ home / user /”。美元的用户名; ReadAndSendFile ($ filename); 自正则表达式没有/ g全球匹配修饰符,它只删除第一个实例“. ./“遇到。所以一个输入值,例如:
(攻击代码)
. . / . . / . . / etc / passwd
将第一个“. ./“剥夺,导致:
(结果)
. . / . . / etc / passwd
这个值然后连接/home/user/目录:
(结果)
/home/user/../../etc/passwd
导致检索/ etc / passwd文件一旦操作系统解决了. .在路径名/序列。这导致相对路径遍历(CWE-23)。 示例4 下面的代码尝试验证给定输入路径通过检查它对一个allowlist一旦删除给定的文件进行验证。在这个特定的例子中,被认为是有效的路径字符串开头“safe_dir /”。
(坏的代码)
例如语言:Java
字符串路径= getInputPath ();
如果(path.startsWith (" / safe_dir / ")) {
文件f =新文件(路径); }f.delete () 攻击者可以提供这样的一个输入:
(攻击代码)
/ safe_dir / . . / important.dat
软件假设路径是有效的,因为它始于“safe_path /”序列,但“. ./”将导致程序删除重要的序列。dat文件的父目录 示例5 下面的代码演示了无限制上传文件的Java servlet和路径遍历的脆弱性。HTML表单的动作属性是上传文件将请求发送给Java servlet。
(好的代码)
例如语言:HTML
<形式action = " FileUploadServlet " method = " post " enctype = "多部分/格式" >
选择一个文件上传: < input type = " file " name = "文件名" / > < br / > < input type = " submit " name =“提交”value = " submit " / > > < /形式 当提交的Java servlet的doPost方法将接收请求,从Http请求中提取文件的名称标题,读取文件内容从请求和输出文件到本地上传目录。
(坏的代码)
例如语言:Java
公开课FileUploadServlet扩展HttpServlet {
…
保护无效doPost (HttpServletRequest请求,HttpServletResponse响应)抛出ServletException IOException {
response.setContentType (" text / html ");
PrintWriter = response.getWriter (); 字符串contentType = request.getContentType (); / /边界头的起始位置 int印第安纳= contentType.indexOf(“边界= "); 字符串边界= contentType.substring(印第安纳州+ 9); 字符串多义线=新的字符串(); 字符串uploadLocation =新的字符串(UPLOAD_DIRECTORY_STRING);/ /恒定值 / /验证内容类型是多部分表单数据 如果(contentType ! = null & & contentType.indexOf(“多部分/格式”)! = 1){
/ /从Http报头中提取文件名
BufferedReader br = new BufferedReader(新InputStreamReader (request.getInputStream ())); … 多段线= br.readLine (); 字符串文件名= pLine.substring (pLine.lastIndexOf (“\ \”), pLine.lastIndexOf (" \ ")); … / /输出文件到本地上传目录 尝试{
BufferedWriter bw = new BufferedWriter(新FileWriter (uploadLocation +文件名,真的));
(字符串行;(= br.readLine行())!)=零;{
如果(line.indexOf(边界)= = 1){ }/ / for循环的结束
bw.write(线); }bw.newLine (); bw.flush (); bw.close (); }捕捉(IOException特异){…} / /输出成功上传响应的HTML页面 / /输出成功上传响应的HTML页面 其他的 {…}
…
这段代码不执行检查上传文件的类型(cwe - 434)。这可能允许攻击者上传任何可执行文件或其他文件与恶意代码。 此外,BufferedWriter对象的创建主题相对路径遍历(CWE-23)。由于代码不提供检查文件名的头,攻击者可以使用“. ./“序列写文件之外的目的目录。根据执行环境中,攻击者可以指定任意文件编写,导致各种各样的后果,从代码执行,XSS (cwe - 79),或者系统崩溃。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系
路径名等价可以被看作是一种规范化的错误。
的关系
一些路径名等价问题并不直接相关目录遍历,而用于绕过安全相关的检查文件/目录是否可以被攻击者访问(例如一个落后于“/”文件名可以绕过末尾不要指望/访问规则,导致服务器提供文件时,通常不会)。
术语 像其他弱点,术语通常是基于使用的操作类型,而不是潜在的弱点。有些人使用“目录遍历”只指注入“. .”和相同的序列,它的具体含义是遍历目录。 其他变体,如“绝对路径”和“驱动器”的影响* *目录遍历,但有些人可能不叫它,因为它不涉及“. .”或等价的。 研究的差距 不完整的诊断或报告的漏洞可以让它很难知道哪些变量影响。例如,研究人员可能会说,“. .\“是脆弱的,但不是测试”。/”,也可能是脆弱的。 目录分隔符的任意组合(“/”、“\”,等等)和数字的“。”(e.g. "....") can produce unique variants; for example, the "//../" variant is not listed (CVE-2004-0325). See this entry's children and lower-level descendants.
CWE-59:不当链接之前决议文件访问(“链接后”)
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定) 操作系统 类:窗户(有时流行) Unix类:(通常是普遍的)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
理论 链接以下漏洞多因素漏洞(MFV)。他们是多个元素的组合:文件或目录的权限,文件名可预测性,竞态条件,在某些情况下,一个设计限制,没有执行原子文件创建操作的机制。 一些潜在的因素是竞争条件、权限和可预测性。
cwe - 95:不当中和指令的动态评估代码(Eval注入)
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 Java患病率(待定) JavaScript患病率(待定) Python患病率(待定) Perl患病率(待定) PHP患病率(待定) Ruby患病率(待定) 类:解释患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 edit-config。pl:这CGI脚本用于修改配置文件中的设置。
(坏的代码)
例如语言:Perl
使用CGI qw(:标准);
子config_file_add_key {
我的(关键帧,美元,美元arg) = @ _;
#代码添加一个字段/文件的关键就在这里 子config_file_set_key {
我的(关键帧,美元,美元arg) = @ _;
#代码设置特定文件的关键就在这里 子config_file_delete_key {
我的(关键帧,美元,美元arg) = @ _;
#代码从一个特定的文件删除键就在这里 子handleConfigAction {
我的(帧,行动美元)= @ _;
我美元关键=参数(关键); 我$ val =参数(“val”); #这是高效的代码,特别是如果你必须调用 #任何几十种不同的功能之一! 我的代码=美元”config_file_ action_key美元(美元\帧美元\键,美元\ val);”; 美元eval(代码); $ configfile =“/ home / cwe / config.txt”; 打印头; 如果(定义(参数('行动'))){
handleConfigAction (configfile美元,参数('行动')); }其他{
打印”指定的任何行动! \ n”; }脚本打算采取行动的参数和调用多种功能的基于该参数的值——config_file_add_key (), config_file_set_key(),或config_file_delete_key ()。它可以单独设置一个条件来调用每个函数,但eval()是一个强大的方法使用更少的代码做同样的事情,尤其是当涉及大量的函数或变量。不幸的是,在这种情况下,攻击者可以提供其他值在操作参数,如:
(攻击代码)
中(“,”、“);系统(“/ bin / ls”);
这将产生以下字符串handleConfigAction ():
(结果)
config_file_add_key (”、“,”);系统(“/ bin / ls”);
可以添加任意Perl代码后,攻击者已经“关闭”建设的原始的函数调用,为了防止解析错误造成恶意eval()失败之前攻击者的有效载荷被激活。这个特定的操作系统()调用会失败后,因为“_key(\ $帧\键,美元\ $ val)”部分的字符串会导致一个错误,但这是无关紧要的攻击,因为负载已经激活。 示例2 这个简单的脚本要求用户提供一个数字列表作为输入,并将它们添加在一起。
(坏的代码)
例如语言:Python
def main ():
和= 0 main ()数量= eval(输入("输入一个空格分隔的数字列表:")) num的数字:
=和+ num求和 打印(f”之和{数字}={和}")eval()函数可以将用户提供的列表,并将它转换成一个Python列表对象,因此允许程序员使用列表理解方法来处理数据。但是,如果代码提供给eval()函数,它将执行代码。例如,恶意用户可以提供以下字符串:
(攻击代码)
__import__(“子流程”)。getoutput (rm - r *)
这将删除当前目录中的所有文件。由于这个原因,不建议使用eval()不可信的输入。 来完成这个不使用eval()是应用整数转换输入在一个try /除了块。如果用户提供的输入不是数字,这将提高ValueError。通过避免eval(),没有机会执行输入字符串的代码。
(好的代码)
例如语言:Python
def main ():
和= 0 main ()数量=输入(输入一个空格分隔的数字列表:)。分割(" ") 试一试:
num的数字: 除了ValueError:
=和+ num求和 打印(f”之和{数字}={和}")
print(“错误:无效输入”)
另一种选择是使用ast.literal_eval()函数从Python的ast模块。这个函数只考虑Python文字作为有效数据类型和不会执行任何代码中包含用户输入。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 77:不当中和一个命令中使用的特殊元素(“命令注入”)
视图定制的信息:
命令注入漏洞通常发生在:
1。数据进入应用程序从一个不可信的来源。
2。数据是一个字符串的一部分,作为应用程序命令的执行。
3所示。通过执行命令,应用程序为攻击者提供了特权或能力,否则攻击者不会有。
许多协议和产品有自己的自定义命令语言。虽然OS或shell命令字符串经常发现和有针对性,开发人员可能没有意识到,这些其他命令语言也可能容易受到攻击。 包装程序命令注入是一种常见的问题。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关视图”架构概念”(cwe - 1008)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 以下简单的程序接受文件名作为命令行参数并显示文件的内容给用户。程序安装setuid root,因为它的目的是作为一个学习工具,允许系统管理员培训检查特权系统文件没有给他们修改他们的能力或破坏系统。
(坏的代码)
例如语言:C
int主要(int命令行参数个数,char * * argv) {
char cmd [CMD_MAX] = " / usr / bin /猫”; }strcat (cmd, argv [1]); 系统(cmd); 因为根特权的程序运行,调用系统()也使用root特权执行。如果用户指定了一个标准的文件名,调用是否按预期运行。然而,如果攻击者通过一个字符串的形式”;rm射频/”,然后调用系统()失败执行猫由于缺乏论据,然后犁递归删除根分区的内容。 注意,如果argv[1]是一个很长的参数,那么这个问题可能还受到缓冲区溢出(cwe - 120)。 示例2 下面的代码是一个管理web应用程序允许用户启动一个Oracle数据库的备份使用批处理文件包装rman实用程序,然后运行清理。蝙蝠脚本删除一些临时文件。脚本rmanDB。蝙蝠接受一个命令行参数,它指定什么类型的备份执行。因为限制访问数据库,应用程序运行备份作为特权用户。
(坏的代码)
例如语言:Java
…
字符串btype = request.getParameter (“backuptype”); 字符串cmd =新的字符串(“cmd。exe / K \”
c: \ \ util \ \ rmanDB。蝙蝠”
+ btype + “c: \ \你\ \ cleanup.bat \“”) System.Runtime.getRuntime () .exec (cmd); … 这里的问题是,这个项目不做任何验证backuptype参数读取用户。通常Runtime.exec()函数不会执行多个命令,但在这种情况下,程序第一次运行cmd。exe壳为了运行多个命令用一个叫Runtime.exec ()。一旦调用shell,它将愉快地执行多个指令通过两个&号分开。如果攻击者通过一个字符串的形式”& del c: \ \ dbms \ \ *。*", then the application will execute this command along with the others specified by the program. Because of the nature of the application, it runs with the privileges necessary to interact with the database, which means whatever command the attacker injects will run with those privileges as well. 示例3 下面的代码从系统实用程序使用系统属性APPHOME确定安装的目录,然后执行一个初始化脚本基于指定的目录的相对路径。
(坏的代码)
例如语言:Java
…
字符串回家= System.getProperty (“APPHOME”); 字符串cmd = + INITCMD回家; java.lang.Runtime.getRuntime () .exec (cmd); … 上面的代码允许攻击者执行任意命令的高架特权应用程序通过修改系统属性APPHOME指向一个包含恶意INITCMD版本不同的道路。因为程序不验证值读取环境,如果攻击者可以控制APPHOME系统属性的值,然后他们可以愚弄应用程序运行恶意代码和系统的控制。 示例4 下面的代码是一个包装的UNIX命令猫将文件的内容打印到标准输出。这也是注射:
(坏的代码)
例如语言:C
# include < stdio . h >
# include < unistd.h > int主要(int命令行参数个数,char * * argv) { 猫char[] = "猫"; char *命令; size_t commandLength; commandLength = strlen (cat) + strlen (argv [1]) + 1; 命令= (char *) malloc (commandLength); strncpy(指挥、猫、commandLength); strncat(命令、argv [1] (commandLength - strlen (cat))); 系统(命令); 返回(0); 正常使用,输出就是文件的内容要求:
(信息)
美元。/ catWrapper Story.txt
当我们离开我们的英雄…… 然而,如果我们添加一个分号,这条线的结束另一个命令,该命令执行catWrapper没有抱怨:
(攻击代码)
美元。/ catWrapper Story.txt;ls
当我们离开我们的英雄…… Story.txt SensitiveFile.txt PrivateData.db a.o ut * 如果catWrapper设置高特权级别比标准的用户,可以执行任意命令与更高的特权。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
映射 使用映射:Allowed-with-Review (CWE ID可以用来映射到实际的漏洞在有限的情况下需要仔细审查)。 理由是:cwe - 77时通常使用操作系统命令注入(cwe - 78)的目的是(ref - 1287]。 评论:如果弱点涉及到命令语言除了操作系统shell调用,然后cwe - 77可以使用。 术语 “命令注入”词对不同的人有着不同的意义。对一些人来说,它指的是任何类型的攻击,可以允许攻击者执行命令自己的选择,无论如何插入这些命令。因此命令注入可以合成从另一个弱点。这种用法还包括病例的功能允许用户指定一个完整的命令,然后执行;CWE之内,这种情况可能是更好的被视为授权问题(因为攻击者不能指定任意命令。) 另一个常见的用法,包括cwe - 77及其后裔,包括分隔符注入情况下,攻击者的命令被构造。
cwe - 129:不当的验证数组索引
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C(通常是普遍的) c++(通常是普遍的) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 在下面的代码片段中,一个不可信的整数值是用来引用一个对象数组。
(坏的代码)
例如语言:Java
公共字符串getValue (int指数){
返回数组(指数); }如果索引数组的范围之外,这可能会导致一个ArrayIndexOutOfBounds异常了。 示例2 下面的例子将用户提供的价值分配一个对象数组,然后作用于数组中。
(坏的代码)
例如语言:Java
私人空间buildList (int untrustedListSize) {
如果(0 > untrustedListSize) { }
死亡(“负价值提供列表的大小,死邪恶的黑客!”); }小部件[]=新的小部件列表(untrustedListSize); [0]=新的小部件列表(); 这个例子中试图建立一个从用户指定的值列表,甚至检查以确保提供一个非负价值。然而,如果提供的是一个0值,代码将建立一个数组大小为0,然后尝试一个新的小部件存储在第一个位置,导致抛出一个异常。 示例3 在以下代码,方法检索一个值在一个特定的数组索引数组位置作为输入参数的方法
(坏的代码)
例如语言:C
int getValueFromArray (int *数组,int len, int指数){
int值; / /检查数组下标小于最大 / /数组的长度 如果(指数< len) {
/ /获取值的指定索引数组
值=数组(指数); / /如果数组索引无效则输出错误消息 / /并返回值指示错误 其他{
printf(“价值:% d \ n”,阵列(指数)); }值= 1; 返回值; 然而,这种方法只验证给定的数组下标小于数组的最大长度但不检查的最小值(cwe - 839)。这将允许一个负值被接受作为输入数组索引,这将导致一个界外读(cwe - 125),并可能允许访问敏感的记忆。输入数组索引应该检查来验证在最大和最小范围内所需的阵列(cwe - 129)。在这个例子中if语句应该修改为包括一个最小范围检查,如下所示。
(好的代码)
例如语言:C
… / /检查数组索引内是正确的 / /数组的值的范围 如果(指数> = 0 & &指数< len) { … 示例4 下面的示例检索消息的大小对于一个pop3邮件服务器。消息大小从套接字检索返回的缓冲区数量和消息大小的消息,消息数量(num)和大小(尺寸)提取缓冲和消息大小被放置到一个数组中使用数组索引的消息数量。
(坏的代码)
例如语言:C
/ *获取所有消息的大小* / int getsize (int袜子,int, int *大小){
…
字符缓冲区(BUFFER_SIZE); int好; int num、大小; / /读取从套接字和值添加到数组大小 ((好= gen_recv(袜子,但,sizeof (buf))) = = 0) {
/ /继续从套接字读取到缓冲区只包含“。”
如果(DOTLINE (buf))
打破; else if (sscanf (buf,“% d % d”, num,大小)= = 2)
大小(num - 1) =大小;
…
在这个例子中,消息数量从缓冲区可以检索的值超出了允许范围的数组索引,可能是一个负数。没有适当的验证值用于数组索引数组溢出可能发生和可能导致未经授权的访问内存地址和系统崩溃。数组索引的值应进行验证,以确保它是在容许范围内数组的索引如以下代码。
(好的代码)
例如语言:C
/ *获取所有消息的大小* / int getsize (int袜子,int, int *大小){
…
字符缓冲区(BUFFER_SIZE); int好; int num、大小; / /读取从套接字和值添加到数组大小 ((好= gen_recv(袜子,但,sizeof (buf))) = = 0) { / /继续从套接字读取到缓冲区只包含“。” 如果(DOTLINE (buf))
打破;
else if (sscanf (buf,“% d % d”, num,大小)= = 2){
如果(num > 0 & & num < = (unsigned)计数)
大小(num - 1) =大小;
其他的 / *警告可能试图引发缓冲区溢出* / 报告(stderr,“警告:忽略虚假数据服务器返回的消息大小。\ n”);
…
示例5 在下面的示例中,该方法displayProductSummary叫做从Web服务servlet来检索产品摘要信息显示给用户。servlet得到产品的整数值从用户数量并将其传递到displayProductSummary方法。displayProductSummary方法将产品编号的整数值传递给getProductSummary方法获得的产品目录包含项目总结使用整数的数组对象价值的产品编号的数组索引。
(坏的代码)
例如语言:Java
/ /方法从servlet调用来获取产品信息 公共字符串displayProductSummary (int指数){
字符串productSummary =新的字符串(" ");
尝试{
字符串productSummary = getProductSummary(指数);
}捕捉(例外的前女友){…} 返回productSummary; 公共字符串getProductSummary (int指数){
返回产品(指数); }在本例中使用的整数值作为提供的数组索引,用户可以在容许范围的指标为数组提供意想不到的结果或可能导致应用程序失败。使用的整数值数组索引应该进行验证,以确保它是在容许范围内数组的索引如以下代码。
(好的代码)
例如语言:Java
/ /方法从servlet调用来获取产品信息 公共字符串displayProductSummary (int指数){
字符串productSummary =新的字符串(" ");
尝试{
字符串productSummary = getProductSummary(指数);
}捕捉(例外的前女友){…} 返回productSummary; 公共字符串getProductSummary (int指数){
字符串productSummary = " ";
如果((指数> = 0)& &(指数< MAX_PRODUCTS)) {
productSummary =产品(指数); }其他{
System.err。println(“索引越界”); }把新IndexOutOfBoundsException (); 返回productSummary; 另一个在Java中是使用的一个ArrayList等集合对象,将自动生成一个异常如果试图访问数组索引越界。
(好的代码)
例如语言:Java
ArrayList productArray = new ArrayList (MAX_PRODUCTS);
… 尝试{
productSummary =(字符串)productArray.get(指数); }捕捉(IndexOutOfBoundsException ex) {…}例子6 下面的示例用户要求一个偏移量到一个数组中选择一个项目。
(坏的代码)
例如语言:C
int主要(int命令行参数个数,char * * argv) {
char *项目[]={“船”、“车”、“卡车”,“训练”}; }int指数= GetUntrustedOffset (); printf(“你选择% s \ n”,项目[索引1]); 程序员允许用户指定的元素列表中选择,但是攻击者可以提供一个界外偏移,导致缓冲区上(cwe - 126)。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系
这个弱点可以先于控制内存分配(cwe - 789在语言使用时自动扩展数组索引大于数组的大小,如JavaScript。
理论
不当验证数组索引可能会直接导致的always-incorrect行为“使用界外访问数组的索引。”
cwe - 705:不正确的控制流范围
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 789:内存分配过多的大小值
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C患病率(待定) c++患病率(待定) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 考虑下面的代码,它接受一个不可信的价值大小和分配一个缓冲区包含给定大小的一个字符串。
(坏的代码)
例如语言:C
无符号整数大小= GetUntrustedInt ();
/ *忽略整数溢出(cwe - 190)对于本例* / unsigned int totBytes =大小* sizeof (char); char *字符串= (char *) malloc (totBytes); InitializeString(字符串); 假设攻击者提供了一个大小的价值:
12345678
这将导致分配305419896字节(超过291字节)的字符串。 示例2 考虑下面的代码,它接受一个不可信的大小值,并使用作为一个HashMap的初始容量大小。
(坏的代码)
例如语言:Java
无符号整数大小= GetUntrustedInt ();
HashMap列表= new HashMap(大小); HashMap构造函数将验证初始容量并不是消极的,然而没有检查来验证是否提供了足够的内存。如果攻击者提供了一个足够大的值,这个应用程序将遇到一个OutOfMemoryError。 示例3 这段代码执行堆栈分配基于长度的计算。
(坏的代码)
例如语言:C
int = 5, b = 6; }size_t len = a - b; 字符缓冲区(len);/ /只是炸毁堆栈 a和b是声明为int签署以来,“a - b”减法给消极的结果(1)。然而,由于len宣布为无符号,len投到一个非常大的正数(在32位系统上- 4294967295)。因此,缓冲缓冲区(len)声明使用一个非常大的大小分配在堆栈上,很有可能超过整个计算机的内存空间。 失误通常不会那么明显。计算将很复杂或由于攻击者的输入达到负值。 示例4 这个例子显示了一个典型的试图解析一个字符串和一个错误的假设造成的区别函数调用者和函数的行动。
(坏的代码)
例如语言:C
int proc_msg (char * s, int msg_len)
{
/ /注意空间的字符串-假设所有字符串有序言与空间
}int pre_len =运算符(“序言:”); char buf [pre_len - msg_len]; …如果我们得到这个做处理 char * s =“序言:消息\ n”; char * sl = strchr(年代,“:”);/ /字符数到‘:’(不包括空间) int jnklen = sl = =零?0:sl - s;/ /如果未定义的指针,用零长度 int ret_val = proc_msg (“s”, jnklen);/ /违反序言长度的假设,最终得到负值,吹出栈 缓冲区的长度是1,导致吹出栈。冒号后面的空格字符中包含的函数计算,但不是在调用者的计算。不幸的是,这通常不那么明显但存在于一个钝角一系列的计算。 示例5 使用下面的代码获取一个不可信的数字作为数组的索引信息。
(坏的代码)
例如语言:Perl
我的$ num = GetUntrustedNumber ();
我@messages = (); 美元的消息(num美元)=“Hello World”; 该指数是无效的(cwe - 129),所以有可能对攻击者修改一个元素在@messages不是目的。如果使用索引大于当前数组的大小,Perl解释器自动扩展数组,这样大索引工作。 如果$ num是一个较大的值,如2147483648(1 < < 31),然后分配美元消息(num美元)将试图创建一个非常大的数组,最终产生一个错误消息,例如: 在阵列扩展的内存 这将导致内存耗尽问题Perl程序退出,可能拒绝服务。此外,缺乏记忆也可以防止许多其他程序成功地在系统中运行。 例子6 这个例子显示了一个典型的试图解析一个字符串和一个错误的假设造成的区别函数调用者和函数的行动。缓冲区的长度是1导致吹出栈。冒号后面的空格字符中包含的函数计算,但不是在调用者的计算。不幸的是,这通常不那么明显但存在于一个钝角一系列的计算。
(坏的代码)
例如语言:C
int proc_msg (char * s, int msg_len)
{
int pre_len =运算符(“序言:”);/ /注意空间的字符串-假设所有字符串有序言与空间
char buf [pre_len - msg_len];
…并设置状态做处理吗
返回状态; }char * s =“序言:消息\ n”; char * sl = strchr(年代,“:”);/ /字符数到‘:’(不包括空间) int jnklen = sl = =零?0:sl - s;/ /如果未定义的指针,用零长度 int ret_val = proc_msg (“s”, jnklen);/ /违反序言长度的假设,最终得到负值,吹出栈
(好的代码)
例如语言:C
int proc_msg (char * s, int msg_len)
{
int pre_len =运算符(“序言:”);/ /注意空间的字符串-假设所有字符串有序言与空间
如果(pre_len < = msg_len){/ /日志错误;返回error_code;}
char buf [pre_len - msg_len];
…并设置状态做处理吗
返回状态; }char * s =“序言:消息\ n”; char * sl = strchr(年代,“:”);/ /字符数到‘:’(不包括空间) int jnklen = sl = =零?0:sl - s;/ /如果未定义的指针,用零长度 int ret_val = proc_msg (“s”, jnklen);/ /违反序言长度的假设,最终得到负值,吹出栈
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系
这个弱点可以与整数溢出(密切相关cwe - 190)。整数溢出攻击会专注于提供一个非常大的数字触发一个溢出导致比预期的更少的内存分配。通过提供一个较大的值,不触发一个整数溢出,攻击者仍然可以导致过多的内存分配。
适用的平台 不受控制的内存分配是可能的在许多语言中,如动态数组分配在perl或初始大小参数在Java集合。然而,语言,像C和c++程序员有更直接的权力控制内存管理会更敏感。
cwe - 456:失踪的初始化一个变量
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这个函数尝试从一个用户提供的字符串中提取两个数字。
(坏的代码)
例如语言:C
空白parse_data (char * untrusted_input) {
int m, n,错误;
错误= sscanf (untrusted_input,“% d: % d”, a&m, n); 如果(EOF = =错误){
死亡(“没有指定整数值。死邪恶的黑客! \ n”); }/ *进行假设n和m正确初始化* / 这段代码试图提取两个整数值格式,用户提供的输入。然而,如果攻击者提供一个输入的形式:
(攻击代码)
123:
那么只有m变量将被初始化。随后使用n可能导致使用未初始化的变量(cwe - 457)。 示例2 在这里,未初始化字段在Java类中使用seldom-called方法,这将导致抛出NullPointerException。
(坏的代码)
例如语言:Java
私人用户用户;
公共空间someMethod () { / /做一些有趣的事情。 … / /抛出肺水肿如果用户没有正确初始化。 字符串的用户名= user.getName (); 示例3 这段代码首先对用户进行身份验证,然后允许删除命令如果用户是管理员。
(坏的代码)
例如语言:PHP
如果(验证(用户名、密码)美元& & setAdmin(用户名)美元){
美元isAdmin = true; }/…… 如果(isAdmin美元){
deleteUser ($ userToDelete); }$ isAdmin变量设置为true如果用户是管理员,但未初始化。如果启用了PHP的register_globals特性,攻击者可以设置未初始化的变量$ isAdmin任意值,在这种情况下isAdmin美元获得管理员权限设置为true。 示例4 在以下Java代码BankManager类使用用户变量类的用户,允许授权用户执行银行经理的任务。内的用户变量初始化方法setUser检索用户从用户数据库。然后,验证用户身份,授权的用户通过authenticateUser方法。
(坏的代码)
例如语言:Java
公开课BankManager {
/ /用户允许执行银行经理的任务 私人用户用户=零; 私人布尔isUserAuthentic = false; / /为BankManager类构造函数 公共BankManager () {
… }/ /从数据库中检索用户的用户 公共用户getUserFromUserDatabase(字符串的用户名){
… }/ /使用用户名设置用户变量 公共空间setUser(字符串的用户名){
这一点。用户= getUserFromUserDatabase(用户名); }/ /验证用户 公共布尔authenticateUser(用户名的字符串,字符串密码){
如果(username.equals (user.getUsername ()) & & password.equals (user.getPassword ())) { }
isUserAuthentic = true; }返回isUserAuthentic; / /执行银行经理任务的方法 … 但是,如果方法setUser之前不叫authenticateUser用户变量不会被初始化,将导致一个NullPointerException。代码应该验证用户变量被初始化之前使用,如以下代码。
(好的代码)
例如语言:Java
公开课BankManager {
/ /用户允许执行银行经理的任务 私人用户用户=零; 私人布尔isUserAuthentic = false; / /为BankManager类构造函数 公共BankManager(字符串的用户名){
用户= getUserFromUserDatabase(用户名); }/ /从数据库中检索用户的用户 公共用户getUserFromUserDatabase(字符串的用户名){…} / /验证用户 公共布尔authenticateUser(用户名的字符串,字符串密码){
如果(用户= = null) {
system . out。println(“无法找到用户”+用户名); }其他{
如果(password.equals (user.getPassword ())) { }
isUserAuthentic = true; }返回isUserAuthentic; / /执行银行经理任务的方法 … 示例5 这个例子将在一个未知的条件下,当我离开test_string err_val是相同的值,因为test_string不是初始化(cwe - 456)。根据这个代码段出现(如在一个函数体),test_string可能是随机的,如果是存储在堆或堆栈。如果中声明的变量是静态内存,它可能是零个或NULL。编译器优化这个地址的不可预知性。
(坏的代码)
例如语言:C
char * test_string;
如果(我! = err_val) {
test_string =“Hello World !”; }printf (" % s ", test_string); 当printf (), test_string可能是一个意想不到的地址,所以printf可能打印垃圾字符串(cwe - 457)。 修复这段代码中,有一些方法来确保已正确设置test_string一旦它到达printf ()。 一个解决方案是集test_string前可以接受默认的条件:
(好的代码)
例如语言:C
char * test_string =初“完成”;
如果(我! = err_val) {
test_string =“Hello World !”; }printf (" % s ", test_string); 另一个解决方案是确保每个分支的条件,包括默认的/ else分支,可以确保test_string设置:
(好的代码)
例如语言:C
char * test_string;
如果(我! = err_val) {
test_string =“Hello World !”; }其他{
test_string = "做另一边!”; }printf (" % s ", test_string);
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系
这个弱点的一个主要因素是一个数字合成的弱点,尤其是在web应用程序允许全局变量的初始化(比如PHP)和库,可以直接要求。
研究的差距
很有可能大量合成的弱点已经失踪的初始化主要因素,但研究人员报告通常不提供这种级别的细节。
CWE类别:数字错误
映射 使用映射:禁止(CWE ID不能用来映射到现实世界的漏洞)。 理由是:该条目是一个类别。使用类别映射一直是积极鼓励实践至少自2019年以来。类别是非正式组织分组CWE的弱点,帮助导航和浏览用户,但他们不是自己的弱点(ref - 1287]。这个CWE ID可能已经广泛使用,因为NIST的用法在NVD从2008年到2016年cwe - 635看来,更新的cwe - 10032016年视图)。 评论:大多数number-handling问题可能是后人根据错误的计算(cwe - 682)或不正确的数值类型之间的转换(cwe - 681)。
cwe - 783:运算符优先级逻辑错误
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C(很少普遍) c++(很少普遍) 类:不是特定于语言的(很少普遍)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 在接下来的例子中,方法validateUser调用另一个方法来验证用户的用户名和密码并返回一个成功或失败的代码。
(坏的代码)
例如语言:C
#定义失败0
#定义成功1 … int validateUser (char *用户名,char *密码){ int isUser =失败; / /调用方法进行身份验证的用户名和密码 / /如果认证失败,返回失败否则返回成功 如果(isUser = AuthenticateUser(用户名、密码)= =失败){
返回isUser; }其他{
isUser =成功; }返回isUser; 然而,用户名和密码进行身份验证的方法就是在一个if语句和不正确的运算符优先级逻辑。因为比较运算符“= =”的优先级高于赋值运算符“=”,比较运算符将被评估,如果方法返回失败的比较就会是真的,返回变量设置为true,成功将返回。这个操作符优先级逻辑错误可以很容易地解决的正确使用括号内的表达式if语句,如下所示。
(好的代码)
例如语言:C
…
如果((isUser = AuthenticateUser(用户名、密码))= =失败){ … 示例2 在本例中,该方法计算投资回报率的会计/财务应用程序。计算投资回报率减去初始投资成本的当前值,然后除以初始投资成本。
(坏的代码)
例如语言:Java
公共双calculateReturnOnInvestment(双currentValue,双initialInvestment) {
双returnROI = 0.0; / /计算投资回报 returnROI = currentValue - initialInvestment / initialInvestment; 返回returnROI; 然而,投资回报率的计算不会产生正确的结果,因为不正确的运算符优先级逻辑方程。把操作符的优先级高于-操作符,因此方程将初始投资成本除以初始投资成本只会从当前值减去1。这算符优先解决逻辑错误的正确使用括号内的方程,如下所示。
(好的代码)
例如语言:Java
…
returnROI = (currentValue - initialInvestment) / initialInvestment; … 注意,initialInvestment变量在这个例子应该验证,以确保它是大于零,以避免潜在的除以零错误(cwe - 369)。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 375:返回一个可变对象,一个不受信任的调用者
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C患病率(待定) c++患病率(待定) Java患病率(待定) c#患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这类都有一个私人的患者,但是提供了一种方法去看名单:
(坏的代码)
例如语言:Java
公共类临床试验{
私人PatientClass [] patientList = new PatientClass [50]; }公共getPatients (…) {
返回patientList; }虽然这段代码只意味着让病人的阅读列表,该getPatients()方法返回一个引用类的原始患者列表,而不是引用列表的一个副本。任何该方法的调用者可以任意修改病人的内容列表,尽管它是一个类的私有成员。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
CWE类别:SEI CERT Perl编码标准- 01指导方针。输入验证和数据卫生处理(IDS)
CWE类别:02 SEI CERT Perl编码标准,指导方针。声明和初始化(DCL)
CWE类别:03 SEI CERT Perl编码标准,指导方针。表达式(EXP)
CWE类别:SEI CERT Perl编码标准- 04指导方针。整数(INT)
CWE类别:05 SEI CERT Perl编码标准,指导方针。字符串(STR)
CWE类别:06 SEI CERT Perl编码标准,指导方针。面向对象编程(OOP)
CWE类别:SEI CERT Perl编码标准——07年指导方针。文件输入和输出(FIO)
CWE类别:SEI CERT Perl编码标准——50的指导方针。杂项(MSC)
cwe - 248:未捕获异常
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 c++患病率(待定) Java患病率(待定) c#患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的例子试图解决一个主机名。
(坏的代码)
例如语言:Java
保护无效doPost (HttpServletRequest点播,HttpServletResponse res)抛出IOException {
字符串ip = req.getRemoteAddr (); }InetAddress addr = InetAddress.getByName (ip); … 出去了。println (“hello”+ addr.getHostName ()); 一个DNS查找失败将导致Servlet抛出一个异常。 示例2 _alloca()函数在堆栈上分配内存。如果一个分配请求可用堆空间太大,_alloca()抛出一个异常。如果异常没有被抓住了,程序会崩溃,可能使拒绝服务攻击。_alloca()已被弃用的微软Visual Studio 2005 (R)。但取而代之的是更安全的_alloca_s ()。 示例3 EnterCriticalSection()可以引发一个异常,可能导致程序崩溃。根据之前的操作系统Windows 2000, EnterCriticalSection()函数在低内存的情况下可以引发一个异常。如果异常没有被抓住了,程序会崩溃,可能使拒绝服务攻击。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 391:未经检查的错误条件
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
相关视图”架构概念”(cwe - 1008)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的代码摘录从doExchange忽略rarely-thrown异常()。
(坏的代码)
例如语言:Java
尝试{
doExchange (); }抓住(RareException e) { / /这可能永远不会发生 如果RareException被抛出,程序将继续执行,好像没有什么不寻常的发生。程序记录没有证据表明特殊情况,可能令人沮丧的任何后试图解释程序的行为。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
其他 当一个程序员忽略了一个异常,他们隐式状态下操作的两个假设:
维护
该条目将弃用;它有多个CWE分析师广泛的解释。目前结合信息从三种不同的分类,但每个分类是谈论一个稍微不同的问题。CWE分析师可能映射到该条目基于这些问题中的任何一个。7 pk“空Catch块”,有一个协会除了空块(cwe - 1069);在这种情况下,异常进行了检查,但不处理。在千鸟有“无节制的返回值”cwe - 252,但与“空Catch块”甚至没有检查的问题,“未经检查的错误条件”意味着缺少检查。对于扣子,“异常”(cwe - 248)与不正确的错误传播- CWE 3.2和更早的发现,至少。还有其他的错误处理和检查有关的问题。
cwe - 252:不返回值
视图定制的信息:
两个常见的程序员的假设是“这个函数调用不能失败”和“没关系”如果这个函数调用失败。如果攻击者可以强制函数失败或预计不会返回一个值,那么后续的程序逻辑可能导致脆弱,因为产品不是程序员假定。例如,如果程序调用一个函数放弃特权,但不检查返回代码以确保特权被成功了,那么程序将继续运行更高的特权。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 考虑下面的代码段:
(坏的代码)
例如语言:C
char buf [10], cp_buf [10];
fgets (buf 10 stdin); strcpy (cp_buf buf); 程序员预计,当fgets()返回,但将包含一个以null结尾的字符串长度为9的或更少。但如果发生I / O错误,fgets()不会null-terminate缓冲区。此外,如果到达文件的末尾读取任何字符之前,fgets()返回而无需编写任何缓冲区。在这两种情况下,fgets()信号,发生了一些不寻常的东西通过返回NULL,但是在这段代码中,警告不会被注意到。缺乏一个空终结者buf会导致缓冲区溢出在随后调用strcpy ()。 示例2 在下面的示例中,可以要求memcpy比假定移动更大的内存段:
(坏的代码)
例如语言:C
int returnChunkSize (void *) {
/ *如果块信息有效,返回可用内存的大小, *,返回1表示一个错误 * / … int main () {
… }memcpy (destBuf srcBuf (returnChunkSize (destBuf) 1)); … 如果returnChunkSize()碰巧遇到一个错误将返回1。注意,返回值不是之前检查memcpy操作(cwe - 2521),所以可以作为尺寸参数传递给memcpy () (cwe - 805)。因为memcpy()假设值是无符号,它将被视为MAXINT-1 (cwe - 195),因此将远比可能可用内存复制到目标缓冲区(cwe - 787,cwe - 788)。 示例3 下面的代码不检查内存分配成功之前使用malloc()返回的指针。
(坏的代码)
例如语言:C
buf = (char *) malloc (req_size);
strncpy (buf转送,req_size); 这个编码错误的传统防御是:“如果我的程序运行的内存,它就会失败。不管我是否处理错误的或允许程序模段错误当试图废弃空指针”。This argument ignores three important considerations:
示例4 下面的示例文件读入一个字节数组。
(坏的代码)
例如语言:c#
char[]中byteArray = new char [1024];
(IEnumerator i = users.GetEnumerator ();i.MoveNext (); i.Current ()) {
字符串的用户名=(字符串)i.Current (); }字符串pFileName = PFILE_ROOT + " +用户名; StreamReader sr = new StreamReader (pFileName); sr.Read(中byteArray, 0, 1024); / /总是1 k字节的文件 sr.Close (); processPFile(用户名、中byteArray);
(坏的代码)
例如语言:Java
FileInputStream fis;
byte[]中byteArray =新字节[1024]; 迭代器(i = users.iterator ();i.hasNext ();) {
字符串的用户名=(字符串)i.next ();
字符串pFileName = PFILE_ROOT + " +用户名; FileInputStream fis = new FileInputStream (pFileName); fis.read(中byteArray);/ /文件总是1 k字节 fis.close (); processPFile(用户名、中byteArray); 代码遍历一组用户,阅读一个私人数据文件为每个用户。程序员总是假设文件1 kb大小,因此忽略了阅读()的返回值。如果攻击者可以创建一个小文件,程序将回收的其余部分之前的数据用户和治疗它,好像它属于攻击者。 示例5 下面的代码并没有检查getParameter()返回的字符串为空在调用成员函数之前compareTo(),可能导致零废弃。
(坏的代码)
例如语言:Java
字符串itemName = request.getParameter (ITEM_NAME);
如果(itemName.compareTo (IMPORTANT_ITEM) = = 0) {
… }… 下面的代码不检查返回的字符串是否在调用成员函数之前项目属性为空=(),可能导致零废弃。
(坏的代码)
例如语言:Java
字符串itemName = request.Item (ITEM_NAME);
如果(itemName.Equals (IMPORTANT_ITEM)) {
… }… 传统的防御这个编码错误的方法是:“我知道请求的值将总是存在,因为....如果它不存在,程序不能执行所需的行为,所以不管我处理错误的或允许程序死非关联化一个null值。”But attackers are skilled at finding unexpected paths through programs, particularly when exceptions are involved. 例子6 下面的代码显示了一个系统属性设置为null,后来引用时的程序员错误地假定它将总是被定义。
(坏的代码)
例如语言:Java
System.clearProperty (“os.name”);
… 字符串操作系统= System.getProperty (“os.name”); 如果(os)。equalsIgnoreCase (Windows 95)) system . out。println(“不支持”); 传统的防御这个编码错误的方法是:“我知道请求的值将总是存在,因为....如果它不存在,程序不能执行所需的行为,所以不管我处理错误的或允许程序死非关联化一个null值。”But attackers are skilled at finding unexpected paths through programs, particularly when exceptions are involved. 例7 下面的VB。NETcode does not check to make sure that it has read 50 bytes from myfile.txt. This can cause DoDangerousOperation() to operate on an unexpected value.
(坏的代码)
例如语言:c#
昏暗的MyFile MyFile新文件流”。txt”, FileMode。Open, FileAccess.Read, FileShare.Read)
暗MyArray(50)字节 MyFile。Read(MyArray, 0, 50) DoDangerousOperation (MyArray (20)) 在。net,它并不少见为程序员误解读()和相关方法,许多系统的一部分。IO类。流和读者类并不认为这是不寻常的或特殊如果只有少量的数据可用。这些类只需添加少量的数据返回的缓冲区,并将返回值设置为读取的字节数或字符。没有保证返回的数据量等于请求的数据量。 示例8 对Java程序员来说并不少见误解读()和相关的许多Java方法的一部分。io类。大多数错误和不寻常的事件在Java中导致一个异常被抛出。但流和读者类不考虑不寻常或特殊如果只有少量的数据可用。这些类只需添加少量的数据返回的缓冲区,并将返回值设置为读取的字节数或字符。没有保证返回的数据量等于请求的数据量。这种行为使它重要的程序员检查返回值从读()和其他IO方法来确保他们得到他们期望的数据量。 例9 这个例子将IP地址从一个用户,验证它是完整的,然后查找主机名和拷贝到缓冲区。
(坏的代码)
例如语言:C
空白host_lookup (char * user_supplied_addr) {
struct hostent *惠普;
in_addr_t * addr; char主机名[64]; in_addr_t inet_addr (const char * cp); / *程序确保user_supplied_addr是正确的格式转换* / validate_addr_form (user_supplied_addr); addr = inet_addr (user_supplied_addr); 惠普= gethostbyaddr (addr, sizeof (struct in_addr) AF_INET); strcpy(主机名、hp - > h_name); 如果攻击者提供了一个地址,似乎是格式良好的,但是地址不解决一个主机名,然后调用gethostbyaddr()将返回NULL。由于代码从gethostbyaddr不会检查返回值(cwe - 252),一个空指针(cwe - 476)将发生在调用strcpy ()。 注意,这段代码也容易受到缓冲区溢出(cwe - 119)。 示例10 以下函数试图获得一个锁,以执行操作在一个共享资源。
(坏的代码)
例如语言:C
空白f (pthread_mutex_t *互斥){
pthread_mutex_lock(互斥);
/ * * /访问共享资源 pthread_mutex_unlock(互斥); 然而,代码不检查pthread_mutex_lock()返回的值的错误。如果pthread_mutex_lock()由于任何原因无法获得互斥锁,功能可能引入竞争条件和导致未定义行为的程序。 为了避免数据竞争,正确的写程序必须检查的结果线程同步功能和妥善处理所有错误,通过试图恢复他们或报告他们更高的水平。
(好的代码)
例如语言:C
int f (pthread_mutex_t *互斥){
int结果;
结果= pthread_mutex_lock(互斥); 如果(0 ! =结果)
返回结果;
/ * * /访问共享资源 返回pthread_mutex_unlock(互斥);
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 690:不返回值为NULL指针
视图定制的信息:
而不返回值的弱点并不仅限于返回空指针(见例子的cwe - 252),函数会返回NULL指示一个错误状态。当这个错误条件不是检查,一个空指针引用可能发生。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C患病率(待定) c++患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的代码调用getUserName()函数之前但不检查返回值非关联化(这可能会导致一个NullPointerException)。
(坏的代码)
例如语言:Java
字符串的用户名= getUserName ();
如果(username.equals (ADMIN_USER)) {
… }示例2 这个例子将IP地址从一个用户,验证它是完整的,然后查找主机名和拷贝到缓冲区。
(坏的代码)
例如语言:C
空白host_lookup (char * user_supplied_addr) {
struct hostent *惠普;
in_addr_t * addr; char主机名[64]; in_addr_t inet_addr (const char * cp); / *程序确保user_supplied_addr是正确的格式转换* / validate_addr_form (user_supplied_addr); addr = inet_addr (user_supplied_addr); 惠普= gethostbyaddr (addr, sizeof (struct in_addr) AF_INET); strcpy(主机名、hp - > h_name); 如果攻击者提供了一个地址,似乎是格式良好的,但是地址不解决一个主机名,然后调用gethostbyaddr()将返回NULL。由于代码从gethostbyaddr不会检查返回值(cwe - 252),一个空指针(cwe - 476)将发生在调用strcpy ()。 注意,这段代码也容易受到缓冲区溢出(cwe - 119)。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 394:意想不到的状态代码或返回值
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 134:使用外部控制的格式字符串
视图定制的信息:
当攻击者可以修改一个外部控制格式字符串,这可能导致缓冲区溢出、拒绝服务或数据表示问题。 应该注意的是,在某些情况下,如国际化,格式字符串的集合是外部控制的设计。如果这些格式的源字符串是可信的(如只包含在库文件由系统管理员可以修改),然后外部控制本身可能不构成弱点。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关观点“七有害的王国”(cwe - 700)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C(通常是普遍的) c++(通常是普遍的) Perl(很少普遍)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的程序输出一个字符串作为参数提供。
(坏的代码)
例如语言:C
# include < stdio . h >
空白printWrapper (char *字符串){ printf(字符串); int主要(int命令行参数个数,char * * argv) { char buf [5012]; memcpy (buf, argv [1], 5012); printWrapper (argv [1]); 返回(0); 例子是可利用的,因为printWrapper调用printf()的()函数。注意:堆栈缓冲区添加使开发更简单。 示例2 下面的代码将命令行参数复制到缓冲区使用snprintf ()。
(坏的代码)
例如语言:C
int主要(int命令行参数个数,char * * argv) {
char buf [128]; }… snprintf (buf, 128, argv [1]); 这段代码,攻击者可以查看堆栈的内容和写堆栈使用命令行参数包含一个格式化的指令序列。攻击者可以通过提供更多的阅读从堆栈格式化指令,如x %,比格式化函数作为参数。(在这个例子中,函数没有参数被格式化)。通过使用% n格式指令,攻击者可以写堆栈,导致snprintf()写的字节数输出到目前为止指定的参数(而不是阅读价值的论点,这是预期的行为)。这种攻击的复杂版本将使用四个交错写入完全控制一个指针在堆栈上的价值。 示例3 某些实现更先进的攻击更容易通过提供格式指令控制的位置在内存中读取或者写入。这些指令的一个例子如以下代码所示,glibc写:
(坏的代码)
例如语言:C
printf (" % d % d % 1 $ d % 1 $ d \ n”, 5、9);
这段代码将生成以下输出:5 9 5 5也可以使用half-writes (% hn)精确控制任意dword在内存中,这大大降低了复杂性需要执行攻击,否则需要四个交错写道,如第一个例子中提到的一个。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
适用的平台 这个弱点是可能的任何编程语言,支持格式的字符串。 研究的差距
超语言格式字符串问题除了c内存或磁盘消耗,控制流或变量改变,格式字符串和数据损坏可能造成开发在其他语言如Perl编写的应用程序,PHP, Python等。
其他 虽然格式字符串漏洞通常属于缓冲区溢出的类别,在技术上他们不溢出缓冲区。格式字符串漏洞是相当新的(1999年前后),源于这一事实没有现实的方式有数量可变的参数的函数来确定究竟有多少参数传入。最常见的函数变量数量的参数,包括c运行时功能,printf()的调用。格式字符串的问题出现在很多方面。* printf()调用没有格式说明符是危险的,可以利用。例如,printf(输入);是可利用的,printf (y,输入);在这种情况下不是可利用的。第一次调用的结果,使用不当,允许攻击者能够窥视栈内存自输入字符串将被用作格式说明符。攻击者可以把输入字符串格式说明符,并开始阅读堆栈的价值观,因为其余的参数将从堆栈。 Worst case, this improper use may give away enough control to allow an arbitrary value (or values in the case of an exploit program) to be written into the memory of the running program. 经常有针对性的实体文件的名称、流程名称、标识符。 格式字符串的问题是一个典型的C / c++的问题,现在罕见由于易于发现。格式字符串漏洞可以利用的一个主要原因是由于% n运营商。n %操作符将写的字符数,已打印的格式字符串因此,指向的内存参数。通过技术创建一个格式字符串,恶意用户可能使用栈上的值来创建一个write-what-where条件。一旦实现,它们可以执行任意代码。可以使用其他运营商;例如,9999年代%操作符也可能引发缓冲区溢出,或当用于file-formatting功能如流,它可以产生比预期更大的输出。
cwe - 477:使用过时的功能
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的代码使用废弃getpw()函数来验证一个明文密码匹配用户的加密密码。如果密码是有效的,函数结果设置为1;否则设置为0。
(坏的代码)
例如语言:C
…
getpw (uid, pwdline); (我= 0;我< 3;我+ +){
cryptpw = strtok (pwdline,“:”); }pwdline = 0; 结果= strcmp (crypt (plainpw cryptpw), cryptpw) = = 0; … 虽然代码经常正确的行为,使用getpw()函数可以从安全的角度来看,问题因为它可以溢出缓冲区传递给它的第二个参数。因为这个漏洞,getpw()取代了getpwuid(),它执行相同的查询getpw()返回一个指针指向一个静态分配的结构来减轻风险。并不是所有的功能都弃用或替换,因为它们构成了安全风险。然而,存在一个过时的函数通常表明周围的代码一直被忽视,可能处于失修状态。软件安全并不是一个优先级,甚至考虑很久。如果程序使用过时或陈旧的函数,它提出了概率有安全问题潜伏在附近。 示例2 在以下代码,程序员假定系统总是中定义了一个名为“cmd”的属性。如果攻击者可以控制程序的环境,使“cmd”没有定义,程序抛出一个空指针异常,当它试图调用“削减()”的方法。
(坏的代码)
例如语言:Java
字符串cmd =零;
… cmd = Environment.GetEnvironmentVariable (cmd); cmd = cmd.Trim (); 示例3 下面的代码构造一个字符串对象的字节数组和一个值,用于指定的8位16位Unicode字符。
(坏的代码)
例如语言:Java
…
字符串名称=新的字符串(nameBytes highByte); … 在这个例子中,构造函数可能不正确将字节转换成字符根据字符集是用于编码字符串由nameBytes表示。由于进化数据集用于编码的字符串,这个构造函数被弃用,取而代之的是一个构造函数,它接受一个参数的名称使用的字符集编码的字节转换。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 457:使用未初始化的变量
视图定制的信息:
在某些语言如C和c++,默认堆栈变量没有初始化。他们通常包含垃圾数据堆栈的内容记忆之前调用这个函数。攻击者有时可以控制或阅读这些内容。在其他语言或条件,未显式初始化的变量可以给一个默认值,安全问题,这取决于程序的逻辑。未初始化的变量的存在有时可以显示一个排版错误的代码。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C(有时流行) c++(有时流行) Perl(通常是普遍的) PHP(通常是普遍的) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这段代码输出一个问候使用信息存储在一个POST请求:
(坏的代码)
例如语言:PHP
如果收取($ _POST['名字'])){
$ nameArray = $ _POST['名字']; }“你好”。美元nameArray['第一次']; 这段代码检查POST数组的名字的是之前设置分配$ nameArray变量。然而,如果数组不是在POST请求,nameArray美元将保持未初始化。这将导致一个错误访问数组时打印问候信息,这可能导致进一步的利用。 示例2 以下switch语句的目的是设置变量的值和bN之前使用:
(坏的代码)
例如语言:C
int, Bn;
开关(ctl) {
案例1:
一个= 0;
bN = 0; 打破; 例0:
=我;
bN =我; 打破; 案例1:
=我+ NEXT_SZ;
bN = i - NEXT_SZ; 打破; 默认值:
一个= 1;
一个= 1; 打破; 重画(bN); switch语句的默认情况下,程序员有意外的价值的两倍。因此,bN将一个未定义的值。大多数未初始化的变量问题导致通用软件可靠性问题,但是如果攻击者可以故意触发使用未初始化的变量,他们可能会发起拒绝服务攻击程序崩溃。在适当的情况下,攻击者可以通过影响控制未初始化变量的值栈上的值之前调用的函数。 示例3 这个例子将在一个未知的条件下,当我离开test_string err_val是相同的值,因为test_string不是初始化(cwe - 456)。根据这个代码段出现(如在一个函数体),test_string可能是随机的,如果是存储在堆或堆栈。如果中声明的变量是静态内存,它可能是零个或NULL。编译器优化这个地址的不可预知性。
(坏的代码)
例如语言:C
char * test_string;
如果(我! = err_val) {
test_string =“Hello World !”; }printf (" % s ", test_string); 当printf (), test_string可能是一个意想不到的地址,所以printf可能打印垃圾字符串(cwe - 457)。 修复这段代码中,有一些方法来确保已正确设置test_string一旦它到达printf ()。 一个解决方案是集test_string前可以接受默认的条件:
(好的代码)
例如语言:C
char * test_string =初“完成”;
如果(我! = err_val) {
test_string =“Hello World !”; }printf (" % s ", test_string); 另一个解决方案是确保每个分支的条件,包括默认的/ else分支,可以确保test_string设置:
(好的代码)
例如语言:C
char * test_string;
如果(我! = err_val) {
test_string =“Hello World !”; }其他{
test_string = "做另一边!”; }printf (" % s ", test_string);
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 597:使用错误的操作符的字符串比较
视图定制的信息:
在Java中,使用= =或! =来比较两个字符串平等实际上比较两个对象的平等,而不是平等的字符串值。很可能这两个引用永远不会相等。而这个弱点常常只会影响程序的正确性,如果使用的平等是一个安全的决定,意想不到的比较结果可以杠杆影响程序的安全。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 在下面的示例中,两个Java字符串对象声明和初始化字符串值。一个if语句用于确定字符串是等价的。
(坏的代码)
例如语言:Java
字符串str1 =新的字符串(“Hello”);
字符串str2 =新的字符串(“Hello”); 如果(str1 = = str2) {
system . out。println (“str1 = = str2”); }然而,如果语句将不会执行字符串比较使用“= =”操作符。对于Java对象,例如字符串对象,“= =”操作符比较对象引用,而不是对象值。在上面的两个字符串对象包含相同的字符串值,他们指的是不同的对象引用,所以system . out。println语句不会被执行。比较对象的值,可以修改前面的代码使用equals方法:
(好的代码)
如果(str1.equals (str2)) {
system . out。println (“str1等于str2”); }示例2 在下面的示例中,三个JavaScript变量声明和初始化值。请注意,JavaScript将根据需要改变数字和字符串之间的一个值,这是一个整数包含在字符串的原因。一个if语句是用来确定值是相同的。
(坏的代码)
例如语言:JavaScript
< p id = " ieq3s1 " type = " text " > (i = = = s1)是假的< / p >
< p id = " s4eq3i " type = " text " > (s4 = = =我)是假的< / p > < p id = " s4eq3s1 " type = " text " > (s4 = = = s1)是假的< / p > var = 65; var s1 = ' 65 '; var s4 =新的字符串(“65”); 如果(我= = = s1) {
. getelementbyid (“ieq3s1”)。innerHTML = " (i = = = s1)是真的”; }如果(s4 = = =我) {
. getelementbyid (“s4eq3i”)。innerHTML = " (s4 = = =我)是真的”; }如果(s4 = = = s1) {
. getelementbyid (“s4eq3s1”)。innerHTML = " (s4 = = = s1)是真的”; }然而,如果语句不会被执行的主体,作为" = = = "比较变量的类型和价值。类型的第一个比较数字和字符串,它失败了。在第二类型是int和参考,这一失败。第三类型参考和字符串,所以它也失败了。 虽然上述变量包含相同的价值观,它们包含在不同的类型,因此. getelementbyid……声明将不会在任何情况下执行。 比较对象的值,如下所示的先前的代码修改和使用“= =”值比较,这样比较在这个例子执行HTML语句:
(好的代码)
例如语言:JavaScript
< p id = " ieq2s1 " type = " text " > (i = = s1)是假的< / p >
< p id = " s4eq2i " type = " text " > (s4 = =我)是假的< / p > < p id = " s4eq2s1 " type = " text " > (s4 = = s1)是假的< / p > var = 65; var s1 = ' 65 '; var s4 =新的字符串(“65”); 如果我= = (s1) {
. getelementbyid (“ieq2s1”)。innerHTML = " (i = = s1)是真的”; }如果(s4 = =我) {
. getelementbyid (“s4eq2i”)。innerHTML = " (s4 = =我)是真的”; }如果(s4 = = s1) {
. getelementbyid (“s4eq2s1”)。innerHTML = " (s4 = = s1)是真的”; }示例3 在下面的示例中,两个PHP变量声明和初始化数据——一个作为字符串,另一个整数。注意,PHP将改变字符串值的数量比较。一个if语句是用来确定值是相同的。
(坏的代码)
例如语言:PHP
var = 65美元;
s1美元var = " 65 "; 如果我= = =美元(s1) {
回声”(i = = =美元s1)是正确的。“\ n”; }其他的 {
回声”(i = = =美元s1)是错误的。“\ n”; }然而,如果语句不会被执行的主体,作为" = = = "比较变量的类型和价值。类型的第一个比较数字和字符串,它失败了。 虽然上述变量包含相同的价值观,它们包含在不同的类型,所以真正的if语句的一部分不会被执行。 比较对象的值,如下所示的先前的代码修改和使用“= =”值比较(字符串转换为数字)比较在这个例子执行真正的声明:
(好的代码)
例如语言:PHP
var = 65美元;
s1美元var = " 65 "; 如果我= =美元(s1) {
回声”(i = =美元s1)是正确的。“\ n”; }其他的 {
回声”(i = =美元s1)是错误的。“\ n”; }
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |