0

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

避免使用已知的易受攻击的函数(例如,printfstrcatstrcpy等)。

我不是 C/C++ 开发人员,但这一定意味着上述函数存在安全漏洞。我对易受攻击的 Java 方法进行了几次搜索,结果就是这个CVE

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

4

2 回答 2

3

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

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

于 2012-08-10T00:44:09.620 回答
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使用或不使用 aSecurityManager来过滤传出连接,那么任何不允许您将出现在 DTD 中的 URL 列入白名单的 XML 解析方法都是易受攻击的。

运行时 / ProcessBuilder

也不是 Java 特定的,但Runtime允许ProcessBuilder访问本地文件系统上的可执行文件。任何达到这些的攻击者控制的字符串都可能被用来提升权限。

于 2012-08-10T00:56:55.997 回答