最新版本(mm/dd/yy): 04/23/2009
翻译至non-final public field
概述
此攻击(非final的公共领域:non-final public field)旨在通过在其中注入恶意值来操纵移动代码中使用的非最终公共变量,主要是在Java和C ++应用程序中。
当移动代码中使用的公共成员变量或类未声明为final时,可以通过任何有权访问它的函数来恶意操纵其值,以便扩展应用程序代码或获取有关应用程序的关键信息。
风险因素
待定(TBD)
实例
来自某个应用程序的Java小程序(java applet)被攻击者获取并破坏。然后,他让受害者接受并运行准备好用来处理非最终对象状态和行为的木马或恶意代码。该代码被实例化,并使用受害者机器上的默认JVM连续执行。当受害者使用相同的JVM从原始应用程序调用Java小程序时,恶意进程可能会与原始小程序混合,因此它会修改非最终对象的值并在受害者凭证下执行。
在以下示例中,类“any_class”被声明为final,然而“server_addr”变量不是:
public final class any_class extends class_Applet {
public URL server_addr;
…
}
在这种情况下,“server_addr”变量的值可以由任何有权访问的其他函数设置,从而改变应用程序的行为。声明这个变量的正确方法是:
public class any_class extends class_Applet {
public final URL server_addr;
…
}
当一个变量声明为final时,它的值不能被修改。
相关的威胁代理
待定(TBD)
相关攻击
- 移动代码:调用不可信的移动代码(Mobile code: invoking untrusted mobile code)
- 移动代码:对象劫持(Mobile code: object hijack)
相关漏洞
- 不安全的移动代码(Unsafe Mobile Code)
相关控件
- 访问控制(Access Control)
参考文献
- http://cwe.mitre.org/data/definitions/493.html– Mobile Code: non-final public field
- http://www.fortifysoftware.com/vulncat/– Unsafe Mobile Code: Access Violation
- http://www.fortifysoftware.com/vulncat/– Unsafe Mobile Code: Public finalize() Method