You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 9 Next »

The JVM Tool Interface (JVMTI) contains extensive facilities to find out about the internals of a running JVM, including facilities to monitor and modify a running Java program. These facilities are rather low level and require the use of the Java Native Interface (JNI) and C Language programming. However, they provide the opportunity to access fields that would not normally be accessible. Also, there are facilities that can change the behavior of a running Java program (for example, threads can be suspended or stopped). Its profiling tools also allow measuring time that a thread takes to execute, leaving it vulnerable to timing attacks.

The JVMTI works by using agents that communicate with the running JVM. These agents are usually loaded at JVM startup via one of the command line options -agentlib: or -agentpath:. However, some JVMs allow agents to be started when the JVM is actually running. Also, platforms that support environment variables allow agents to be specified in such variables, although this feature can be disabled where security is a concern. The JVMTI is always enabled, and JVMTI agents may run under the default security manager without requiring any permissions to be granted.

Risk Assessment

Failing to appreciate that a Java application can be monitored and modified via the JVM Tool Interface may lead to an application being deployed that is vulnerable to attack via this route.

Recommendation

Severity

Likelihood

Remediation Cost

Priority

Level

ENV01-J

low

unlikely

medium

P2

L3

Automated Detection

TODO

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

References

[[JVMTI 06]]
[[Long 05]] Section 2.6, The JVM Tool Interface


MSC01-J. Avoid memory leaks      49. Miscellaneous (MSC)      ENV02-J. Be aware of the Java Platform Debugger Architecture

  • No labels