|This article relies largely or entirely upon a single source. (January 2014)|
The Java platform provides a number of features designed to improve the security of Java applications. This includes enforcing runtime constraints through the use of the Java Virtual Machine (JVM), a security manager that sandboxes untrusted code from the rest of the operating system, and a suite of security APIs that Java developers can utilise. Despite this, criticism has been directed at the programming language, and Oracle, due to an increase in malicious programs that revealed security vulnerabilities in the JVM, which were subsequently not properly addressed by Oracle in a timely manner.
The binary form of programs running on the Java platform is not native machine code but an intermediate bytecode. The JVM performs verification on this bytecode before running it to prevent the program from performing unsafe operations such as branching to incorrect locations, which may contain data rather than instructions. It also allows the JVM to enforce runtime constraints such as array bounds checking. This means that Java programs are significantly less likely to suffer from memory safety flaws such as buffer overflow than programs written in languages such as C which do not provide such memory safety guarantees.
The platform does not allow programs to perform certain potentially unsafe operations such as pointer arithmetic or unchecked type casts. It also does not allow manual control over memory allocation and deallocation; users are required to rely on the automatic garbage collection provided by the platform. This also contributes to type safety and memory safety.
The platform provides a security manager which allows users to run untrusted bytecode in a "sandboxed" environment designed to protect them from malicious or poorly written software by preventing the untrusted code from accessing certain platform features and APIs. For example, untrusted code might be prevented from reading or writing files on the local filesystem, running arbitrary commands with the current user's privileges, accessing communication networks, accessing the internal private state of objects using reflection, or causing the JVM to exit.
The security manager also allows Java programs to be cryptographically signed; users can choose to allow code with a valid digital signature from a trusted entity to run with full privileges in circumstances where it would otherwise be untrusted.
Users can also set fine-grained access control policies for programs from different sources. For example, a user may decide that only system classes should be fully trusted, that code from certain trusted entities may be allowed to read certain specific files, and that all other code should be fully sandboxed.
Potential sources of security vulnerabilities in Java applications
There are a number of possible sources of security vulnerabilities in Java applications, some of which are common to non-Java applications and some of which are specific to the Java platform. (Note that these refer to potential sources of vulnerabilities that security-conscious programmers need to keep in mind; this is not intended as a list of actual vulnerabilities.)
Examples of potential sources of vulnerability common to Java and non-Java applications are:
- Vulnerabilities in the protection mechanisms provided by the hardware or operating system which the application relies upon for its security
- Vulnerabilities in native libraries, such as the C standard library, which may be used to implement the application and/or runtime
- Vulnerabilities caused purely by errors in user programs (for example improper construction of SQL queries leading to SQL injection vulnerabilities)
However, much discussion of Java security focusses on potential sources of vulnerability specific to the Java platform. These include:
- Vulnerabilities in the sandboxing mechanism which allow untrusted bytecode to circumvent the restrictions imposed by the security manager
- Vulnerabilities in the Java class library which an application relies upon for its security
A vulnerability in the Java platform will not necessarily make all Java applications vulnerable. When vulnerabilities and patches are announced, for example by Oracle, the announcement will normally contain a breakdown of which types of application are affected (example).
For example, a hypothetical security flaw which affects only the security manager sandboxing mechanism of a particular JVM implementation would mean that only Java applications which run arbitrary untrusted bytecode would be compromised: applications where the user fully trusts and controls all bytecode being executed would not. This would mean that, say, a web browser plugin based on that JVM would be vulnerable to malicious applets downloaded from public websites, but a server-side web application running on the same version of the JVM where the administrator has full control over the classpath would be unaffected.
It should also be noted that as with non-Java applications, security vulnerabilities can stem from parts of the platform which may not initially appear to be security-related. For example, in 2011, Oracle issued a security fix for a bug in the Double.parseDouble method. This method converts a string such as "12.34" into the equivalent double-precision floating point number. The bug caused this method to enter an infinite loop when called on a specific input. This bug had security implications, because for example if a web server converts a string typed into a form by the user using this method, a malicious user could type in the string which triggers the bug. This would cause the web server thread processing the malicious request to enter an infinite loop and become unavailable for serving requests from other users. Doing this repeatedly to a vulnerable web server would be an easy denial-of-service attack: all the web server's threads for responding to user requests would soon be stuck in the infinite loop and the web server would be unable to serve any legitimate users at all.
Criticism of security manager
The security manager in the Java platform (which, as mentioned above, is designed to allow the user to safely run untrusted bytecode) has been criticized in recent years for making users vulnerable to malware, especially in web browser plugins which execute Java applets downloaded from public websites, more informally known as "Java in the browser".
Oracle's efforts to address these vulnerabilities resulted in a delay to the release of Java 8.
An OS X trojan referred to as Flashback exploited a vulnerability in Java, which had not been patched by Apple, although Oracle had already released a patch. In April, Apple later released a removal tool for Lion users without Java. With Java 7 Update 4, Oracle began to release Java directly for Lion and later.
In January, a zero-day vulnerability was found in all versions of Java 7, including the latest version Java 7 Update 10, which was already exploited in the wild. The vulnerability was caused by a patch to fix an earlier vulnerability. In response, Apple blacklisted the latest version of the Java plugin. Oracle released a patch (Update 11) within three days. Microsoft also released a patch for Internet Explorer versions 6, 7, and 8.
Cyberespionage malware Red October was found exploiting a Java vulnerability that was patched in October 2011. The website for Reporters Without Borders was also compromised by a Java vulnerability in versions prior to Update 11.
After the release of Update 11, another vulnerability began circulating online, which was later confirmed. It was also found that Java's security mode itself was vulnerable due to a bug. In response, Mozilla disabled Java (as well as Adobe Reader and Microsoft Silverlight) in Firefox by default, while Apple blacklisted the latest Java plugin again.
In February, Twitter reported that it had shut down an attack. Twitter advised users to disable Java, although it did not explain why. Later in the month, Facebook reported that it had been hacked by a zero-day Java attack. Apple also reported an attack. It was found that a breach of an iPhone developer forum was used to attack Twitter, Facebook, and Apple. The forum itself was unaware of the breach. Following Twitter, Facebook, and Apple, Microsoft reported that it was also similarly compromised.
Another vulnerability discovered allowed for the Java security sandbox to be completely bypassed in the original release of Java 7, as well as Updates 11 and 15. In March, trojan called McRat was found exploiting a zero-day Java vulnerability. Oracle then released another patch to address the vulnerability.
- Security Alert for CVE-2013-0422 Released. Oracle Corporation. Retrieved 2013-04-24.
- Oracle Releases Hotfix for the Double.parseDouble Bug in Record Time. InfoQ. Retrieved 2013-04-24.
- Secure The Train. Blog of Mark Reinhold, Chief Architect of Oracle's Java Platform Group. 2013-04-18.
- Goodin, Dan (2012-04-02). "Mac Flashback trojan exploits unpatched Java vulnerability, no password needed". Ars Technica. Retrieved 2014-02-18.
- Geuss, Megan (2012-04-14). "Flashback malware removal tool arrives for Java-less Mac users". Ars Technica. Retrieved 2014-02-18.
- Foresman, Chris (2012-04-27). "Forget Apple: Oracle to bring Java security fixes directly to Mac users". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2012-10-18). "Apple removes Java from all OS X Web browsers". Ars Technica. Retrieved 2014-02-18.
- Cheng, Jacqui (2012-12-23). "Where OS X security stands after a volatile 2012". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-01-10). "Critical Java zero-day bug is being “massively exploited in the wild” (Updated)". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-01-11). "Critical Java vulnerability made possible by earlier incomplete patch (Updated)". Ars Technica. Retrieved 2014-02-18.
- Foresman, Chris (2013-01-11). "Apple blacklists Java on OS X to prevent latest “critical” exploits". Ars Technica. Retrieved 2014-02-18.
- Mattise, Nathan (2013-01-14). "Oracle patches widespread Java zero-day bug in three days (Updated)". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-01-14). "Microsoft releases emergency update to patch Internet Explorer bug". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-01-15). "Red October relied on Java exploit to infect PCs". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-01-22). "Just-patched Java, IE bugs used to snare human rights sites". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-01-16). "$5,000 will buy you access to another, new critical Java vulnerability (Updated)". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-01-18). "Critical Java vulnerabilities confirmed in latest version". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-01-28). "Java’s new “very high” security mode can’t protect you from malware". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-01-31). "Firefox to block content based on Java, Reader, and Silverlight". Ars Technica. Retrieved 2014-02-18.
- Foresman, Chris (2013-01-31). "For second time in a month, Apple blacklists Java Web plugin". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-02-02). "Twitter detects and shuts down password data hack in progress". Ars Technica. Retrieved 2014-02-18.
- Gallagher, Sean (2013-02-15). "Facebook computers compromised by zero-day Java exploit". Ars Technica. Retrieved 2014-02-18.
- Cheng, Jacqui (2013-02-19). "Apple HQ also targeted by hackers, will release tool to protect customers". Ars Technica. Retrieved 2014-02-18.
- Gallagher, Sean (2013-02-19). "Facebook, Twitter, Apple hack sprung from iPhone developer forum". Ars Technica. Retrieved 2014-02-18.
- Cheng, Jacqui (2013-02-20). "Dev site behind Apple, Facebook hacks didn’t know it was booby-trapped". Ars Technica. Retrieved 2014-02-18.
- Bright, Peter (2013-02-22). "Microsoft joins Apple, Facebook, and Twitter; comes out as hack victim". Ars Technica. Retrieved 2014-02-18.
- Brodkin, Jon (2013-02-25). "Java’s latest security problems: New flaw identified, old one attacked". Ars Technica. Retrieved 2014-02-18.
- Goodin, Dan (2013-03-01). "Another Java zero-day exploit in the wild actively attacking targets". Ars Technica. Retrieved 2014-02-18.
- Mattise, Nathan (2013-03-05). "Oracle releases new Java patch to address this week’s McRat problem". Ars Technica. Retrieved 2014-02-18.
- Java SE Security. Oracle Corporation. Downloaded 2013-04-24.
- Secure Coding Guidelines for the Java Programming Language. Oracle Corporation. Downloaded 2013-04-24.