安全播报

防御吧作为15年知名老牌域名服务商,CNNIC和CANN双认证域名注册商,已经
持续为500多万个域名提供服务,包括智能DNS/自由转移/隐私保护等服务!
assertion漏洞会造成哪些后果?
2021-09-30 13:16:12 【

本文主要为了助力企业有效防范软件安全漏洞,提升网络安全防护能力,本期主题为第五十期:可达的assertion的相关介绍。

01 什么是可达的assertion?

程序包含一个可以被攻击者触发的assert()或类似语句,这将导致应用程序退出或其他不必要的严重行为。

assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion可作为程序中的一条语句,对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。

一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启,为了提高性能,在软件发布后,assertion检查通常是关闭的。在语法上,为了支持assertion,Java增加了一个关键字assert。

02 可达的assertion漏洞的构成条件有哪些?

当断言用于公共方法中的参数检查时,就可能会出现“可达的assertion”安全漏洞。

03 可达的assertion漏洞会造成哪些后果?

当断言禁用时,参数的验证将失效,可能导致非预期的结果。

虽然断言有助于捕获逻辑错误并减少出现更严重的漏洞的机会,但它仍然可能导致拒绝服务。例如,如果一个服务器处理多个并发连接,并且在一个连接中出现assert(),导致所有其他连接被丢弃,这是一个可到达的断言,将导致拒绝服务。

04 可达的assertion漏洞的防范和修补方法有哪些?

断言不应该用于公共方法中的参数检查。参数检查通常是方法的一部分,无论断言是启用还是禁用,都必须遵守此规则。

05 可达的assertion漏洞样例

public class case1_bad {

public static void main(String[] args) {

System.out.println(fun());

boolean flag=1>2;

assert true;

}

public static int getAbsAdd(int x, int y) {

assert x != Integer.MIN_VALUE;

assert y != Integer.MAX_VALUE;

nt absX = Math.abs(x);

int absY = Math.abs(y);

assert (absX <= Integer.MAX_VALUE - absY);

return absX + absY;

}

public static int fun() {

boolean flag = 3 > 2;

assert flag;

return 1;

}

}

使用悟空代码安全检测工具检测上述程序代码,则可以发现代码中存在着“可达的assertion”的安全漏洞。

在(case1_bad.java)文件第(12、13、16)行使用断言验证方法参数,当断言被禁用时,验证代码不会执行,参数检查通常是方法的一部分,无论断言是启用还是禁用,都必须维护此合约。

可达的assertion在CWE中被编号为CWE-617: Reachable Assertion


】【打印关闭】 【返回顶部
分享到QQ空间
分享到: 
上一篇简评XSS攻击和CSRF攻击的原理与防.. 下一篇黑客利用Atlassian Confluence RC..

立足首都,辐射全球,防御吧专注云防御及云计算服务15年!

联系我们

服务热线:13051179500 18910191973
企业QQ:1245940436
技术支持:010-56159998
E-Mail:xihedata.com
Copyright ? 2003-2016 fangyuba. 防御吧(完美解决防御与加速) 版权所有 增值许可:京B2-20140042号
售前咨询
公司总机:18910191973
24小时电话:010-56159998
投诉电话:18910191973
值班售后/技术支持
售后服务/财务
备案专员
紧急电话:18610088800