Java7中的最新安全漏洞,其中applet可以在用户计算机上执行不受信任的代码。有关详细信息,请访问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()所做的一切。那么为什么对执行方法这么大惊小怪呢?
答案 0 :(得分:1)
如果仔细观察,漏洞利用代码也会调用.getValue()
。显然,该漏洞位于invoke
内。 execute
本质上是一个用于调用私有invoke
。
答案 1 :(得分:0)
几年前我报告了一个错误,其中Expression中的访问检查与编译器的访问检查不同。可能这是另一个例子。