1

Java7 中最新的安全漏洞,小程序可以在用户机器上执行不受信任的代码。如需更多信息,请访问http://www.h-online.com/security/features/The-new-Java-0day-examined-1677789.html

但我的问题是:有人提到这一切都是可能的,因为 Expression 类中引入了 execute() 方法。但它并没有什么特别之处,这在以前的版本中是不可能的。这是来源:

 @Override
public void execute() throws Exception {
    setValue(invoke());
}

对于自 java1.4 以来存在的 getValue() :

 public Object getValue() throws Exception {
    if (value == unbound) {
        setValue(invoke());
    }
    return value;
}

getValue() 完成了 execute() 所做的一切。那为什么对execute方法这么大惊小怪?

4

2 回答 2

1

如果仔细观察,漏洞利用代码还会调用.getValue(). 显然,漏洞位于invoke. execute本质上是一个调用私有的公共接口invoke

于 2012-08-31T13:58:29.760 回答
0

几年前我报告了一个错误,其中表达式中的访问检查与编译器的不同。这可能是另一个例子。

于 2012-09-01T01:24:05.497 回答