Java 6+中已知的易受攻击的方法?

时间:2012-08-10 00:20:37

标签: java security owasp

我对学习安全编码最佳实践(特别是Java应用程序)感兴趣,而且我正在阅读OWASP的安全编码实践清单。在内存管理部分下,他们说明了以下内容:

  

避免使用已知的易受攻击的功能(例如printfstrcatstrcpy等。)

我不是C / C ++开发人员,但这必然意味着上述功能存在安全漏洞。我对易受攻击的Java方法进行了几次搜索,我想出的就是CVE

哪些Java SE / EE方法(如果有)适用于OWASP的此通报?

2 个答案:

答案 0 :(得分:3)

对于C API,是的,如果未仔细检查参数,则可能会因无意的内存损坏而导致这些功能出现问题。

在Java中,由于所有操作都是自动检查的,因此不应该发生这类内存损坏漏洞(除了实现中的错误)。

答案 1 :(得分:2)

这些是特别容易发生缓冲区溢出和格式化字符串攻击的C函数。

Java通常没有这些问题,但同样的经验法则适用 - 不要相信你的输入。

反思&序列

Java的反射API可能是漏洞的来源。

如果攻击者可以导致字符串的一部分,他们会将您视为类,方法或属性名称,那么它们通常会导致您的程序执行您不想要的操作。

例如,

ObjectInputStream in = ...;
MyType x = (MyType) in.readObject();

将允许控制in上内容的攻击者导致CLASSPATH上任何类的加载和初始化,并允许调用CLASSPATH上任何可序列化类的任何构造函数。例如,如果碰巧在CLASSPATH上有JS或Python解释器,他们可能能够访问String - > JavaScript / Python函数类,他们可以通过Java反射访问更强大的方法。

javax.script

javax.script在Java 6中可用,允许使用嵌入式脚本语言将字符串转换为源代码。如果不受信任的输入到达这些接收器,他们可能能够使用脚本引擎对Java反射的访问来到达文件系统或shell,以使用当前进程所有者的权限执行任意用户环指令。

XML

Java与其他语言一样容易受外部实体攻击,因此XML输入中的外部实体可用于包含来自本地网络的URL中的内容。

如果您没有挂钩java.net.SocketFactory或使用SecurityManager来过滤传出连接,那么任何不允许您列出DTD中出现的URL的XML解析方法都是易受攻击的。

运行时/ ProcessBuilder

也不是特定于Java的,但RuntimeProcessBuilder允许访问本地文件系统上的可执行文件。任何攻击者控制的字符串都可以用来提升权限。