CVE-2018-2815Vulnerability in the Java SE, Java SE Embedded, JRockit component of Oracle Java SE (subcomponent: Serialization). Supported versions that are affected are Java SE: 6u181, 7u171, 8u162 and 10; Java SE Embedded: 8u161; JRockit: R28.3.17. Easily exploitable vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE, Java SE Embedded, JRockit. Successful attacks of this vulnerability can result in unauthorized ability to cause a partial denial of service (partial DOS) of Java SE, Java SE Embedded, JRockit. Note: Applies to client and server deployment of Java. This vulnerability can be exploited through sandboxed Java Web Start applications and sandboxed Java applets. It can also be exploited by supplying data to APIs in the specified Component without using sandboxed Java Web Start applications or sandboxed Java applets, such as through a web service. CVSS 3.0 Base Score 5.3 (Availability impacts). CVSS Vector: (CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L).
No public exploit
Nothing published shows this CVE being exploited, which is not the same as ruling it out. nothing published in 8 years.
CVSS E:U
A Waratek agent blocks this today.
Applicable rule: CVE has an ARMR patch rule that provides mitigation
| Decided by | armr-patch-file : An ARMR patch file on disk for this CVE |
|---|---|
| Finding | CVE has an ARMR patch rule that provides mitigation |
Shipped files covering this CVE. A CVE genuinely takes more than one: separate Maven artifacts hooking different parser classes, the same patch built for two ARMR versions, or a fix at both the framework and the container.
vcpu/2018/Q2-April/CVE-2018-2815/patch/2.6/CVE-2018-2815.armr patch rule added 2020-06-28 updated 2026-03-04app("2018 APRIL CPU"):
requires(version: "ARMR/2.6")
/***************************************************************************
CVE-2018-2815 (2018 APRIL CPU)
CVSS 3.0 Summary:
Base Score | 5.3 MEDIUM
Attack Vector | Network
Attack Complexity | Low
Privileges Required | None
User Interaction | None
Scope | Unchanged
Confidentiality Impact | None
Integrity Impact | None
Availability Impact | Low
Description:
It was discovered that the implementation of the StubIORImpl class
in the Serialization component of OpenJDK did not limit the amount
of memory allocated when creating object instance from a serialized
form. A specially-crafted input could cause a Java application to
use an excessive amount of memory when deserialized.
Resources:
https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2018-2815
Affected Versions:
6u181, 7u171, 8u162, JRockit R28.3.17
Tested Versions:
6u171 - 6u181
7u161 - 7u171
8u151 - 8u162
Protection Provided:
Functional
Patch Version:
1.0
***************************************************************************/
patch("CVE-2018-2815 :01"):
function("com/sun/corba/se/impl/ior/StubIORImpl.doRead(Ljava/io/ObjectInputStream;)V",
checksums: ["d6e1b118bb"]) // 6u0 - 6u181, 7u0 - 7u171, 8u0 - 8u162
callreturn("java/io/ObjectInputStream.readInt()I",
occurrences: [1])
code(language: java, import: ["java.io.ObjectInputStream",
"java.io.InvalidClassException",
"java.io.IOException"]):
private static JavaMethod filterCheckMethod;
public void load() {
filterCheckMethod =
JavaMethod.load("java/io/ObjectInputStream.filterCheck(Ljava/lang/Class;I)V");
}
public void patch(JavaFrame frame) {
Object self = frame.loadThisVariable();
ObjectInputStream stream = (ObjectInputStream) frame.loadObjectVariable(1);
int typeLength = frame.loadIntOperand(0);
try {
checkArray(stream, byte[].class, typeLength);
} catch (Throwable t) {
if (t instanceof NullPointerException ||
t instanceof IllegalArgumentException ||
t instanceof NegativeArraySizeException ||
t instanceof InvalidClassException) {
frame.raiseException(t);
} else {
throw new RuntimeException(t);
}
}
}
private void checkArray(ObjectInputStream s, Class<?> arrayType, int arrayLength)
throws InvalidClassException {
if (arrayType == null) {
throw new NullPointerException();
}
if (!arrayType.isArray()) {
throw new IllegalArgumentException("not an array type");
}
if (arrayLength < 0) {
throw new NegativeArraySizeException();
}
if (filterCheckMethod.isSupported()) {
filterCheckMethod.call(s, arrayType, arrayLength);
}
}
endcode
endpatch
patch("CVE-2018-2815 :02"):
function("com/sun/corba/se/impl/ior/StubIORImpl.doRead(Ljava/io/ObjectInputStream;)V",
checksums: ["d6e1b118bb"]) // 6u0 - 6u181, 7u0 - 7u171, 8u0 - 8u162
callreturn("java/io/ObjectInputStream.readInt()I",
occurrences: [2])
code(language: java, import: ["java.io.ObjectInputStream",
"java.io.InvalidClassException",
"java.io.IOException"]):
private static JavaMethod filterCheckMethod;
public void load() {
filterCheckMethod =
JavaMethod.load("java/io/ObjectInputStream.filterCheck(Ljava/lang/Class;I)V");
}
public void patch(JavaFrame frame) {
Object self = frame.loadThisVariable();
ObjectInputStream stream = (ObjectInputStream) frame.loadObjectVariable(1);
int numProfiles = frame.loadIntOperand(0);
try {
checkArray(stream, int[].class, numProfiles);
checkArray(stream, byte[].class, numProfiles);
} catch (Throwable t) {
if (t instanceof NullPointerException ||
t instanceof IllegalArgumentException ||
t instanceof NegativeArraySizeException ||
t instanceof InvalidClassException) {
frame.raiseException(t);
} else {
throw new RuntimeException(t);
}
}
}
private void checkArray(ObjectInputStream s, Class<?> arrayType, int arrayLength)
throws InvalidClassException {
if (arrayType == null) {
throw new NullPointerException();
}
if (!arrayType.isArray()) {
throw new IllegalArgumentException("not an array type");
}
if (arrayLength < 0) {
throw new NegativeArraySizeException();
}
if (filterCheckMethod.isSupported()) {
filterCheckMethod.call(s, arrayType, arrayLength);
}
}
endcode
endpatch
patch("CVE-2018-2815 :03"):
function("com/sun/corba/se/impl/ior/StubIORImpl.doRead(Ljava/io/ObjectInputStream;)V",
checksums: ["d6e1b118bb"]) // 6u0 - 6u181, 7u0 - 7u171, 8u0 - 8u162
callreturn("java/io/ObjectInputStream.readInt()I",
occurrences: [4])
code(language: java, import: ["java.io.ObjectInputStream",
"java.io.InvalidClassException",
"java.io.IOException"]):
private static JavaMethod filterCheckMethod;
public void load() {
filterCheckMethod =
JavaMethod.load("java/io/ObjectInputStream.filterCheck(Ljava/lang/Class;I)V");
}
public void patch(JavaFrame frame) {
Object self = frame.loadThisVariable();
ObjectInputStream stream = (ObjectInputStream) frame.loadObjectVariable(1);
int dataSize = frame.loadIntOperand(0);
try {
checkArray(stream, byte[].class, dataSize);
} catch (Throwable t) {
if (t instanceof NullPointerException ||
t instanceof IllegalArgumentException ||
t instanceof NegativeArraySizeException ||
t instanceof InvalidClassException) {
frame.raiseException(t);
} else {
throw new RuntimeException(t);
}
}
}
private void checkArray(ObjectInputStream s, Class<?> arrayType, int arrayLength)
throws InvalidClassException {
if (arrayType == null) {
throw new NullPointerException();
}
if (!arrayType.isArray()) {
throw new IllegalArgumentException("not an array type");
}
if (arrayLength < 0) {
throw new NegativeArraySizeException();
}
if (filterCheckMethod.isSupported()) {
filterCheckMethod.call(s, arrayType, arrayLength);
}
}
endcode
endpatch
endapp
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
3 metrics
VRT selects the newest version's highest entry and
publishes it as cvssScore, newest rather than largest because scores are not comparable
across versions, and highest rather than first because the first entry is frequently a CNA placeholder
scoring 0.0 over NVD's own analysis.
| Version | Score | Band | Vector | Assigner | Type | |
|---|---|---|---|---|---|---|
| CVSS 3.1 | 5.3 | MEDIUM | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L |
NVD | Primary | published |
| CVSS 3.1 | 5.3 | MEDIUM | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L |
CISA-ADP | Secondary | |
| CVSS 2.0 | 5.0 | no band published | AV:N/AC:L/Au:N/C:N/I:N/A:P |
NVD | Primary |
| Advisory | Type | Quarter | Products Oracle named in risk matrix |
|---|---|---|---|
| Oracle Critical Patch Update April 2018 ↗ | CPU | 2018-Q2 | Oracle Java SE / Serialization (Java SE: 6u181, 7u171, 8u162, 10; Java SE Embedded: 8u161; JRockit: R28.3.17) |
| Family | Component | Oracle's version cell (verbatim) | Indexed as |
|---|---|---|---|
| Oracle Java SE | Serialization | Java SE: 6u181, 7u171, 8u162, 10; Java SE Embedded: 8u161; JRockit: R28.3.17 | 6.0.181.0 · 7.0.171.0 · 8.0.161.0 · 8.0.162.0 · 10.0.0.0 |
| Source | Vendor | Product | Scheme | Affected Versions |
|---|---|---|---|---|
| nvd | canonical | ubuntu linux | generic | 14.04 · 16.04 · 17.10 |
| nvd | debian | debian linux | generic | 8.0 · 9.0 |
| nvd | hp | xp7 command view | generic | any version |
| nvd | oracle | jdk | javase | 1.6.0:update181 · 1.7.0:update171 · 1.8.0:update162 · 10 |
| nvd | oracle | jre | javase | 1.6.0:update181 · 1.7.0:update171 · 1.8.0:update162 · 10 |
| nvd | oracle | jrockit | generic | r28.3.17 |
| nvd | redhat | enterprise linux desktop | generic | 6.0 · 7.0 |
| nvd | redhat | enterprise linux server | generic | 6.0 · 7.0 |
| nvd | redhat | enterprise linux server aus | generic | 7.6 |
| nvd | redhat | enterprise linux server eus | generic | 7.5 · 7.6 |
| nvd | redhat | enterprise linux server tus | generic | 7.6 |
| nvd | redhat | enterprise linux workstation | generic | 6.0 · 7.0 |
| nvd | schneider-electric | struxureware data center expert | generic | < 7.6.0 |
| URL | Tags |
|---|---|
| https://access.redhat.com/errata/RHSA-2018:1188 | ADVISORY, RHSA-2018:1188 |
| https://access.redhat.com/security/cve/CVE-2018-2815 | REPORT, RHSA-2018:1188 |
| https://access.redhat.com/errata/RHSA-2018:1191 | ADVISORY, RHSA-2018:1191 |
| https://access.redhat.com/errata/RHSA-2018:1202 | ADVISORY, RHSA-2018:1202 |
| https://access.redhat.com/errata/RHSA-2018:1204 | ADVISORY, RHSA-2018:1204 |
| https://access.redhat.com/errata/RHSA-2018:1270 | ADVISORY, RHSA-2018:1270 |
| https://access.redhat.com/errata/RHSA-2018:1278 | ADVISORY, RHSA-2018:1278 |
| http://www.oracle.com/technetwork/security-advisory/cpuapr2018-3678067.html | Patch, Vendor Advisory |
| http://www.securityfocus.com/bid/103848 | Broken Link, Third Party Advisory, VDB Entry |
| http://www.securitytracker.com/id/1040697 | Broken Link, Third Party Advisory, VDB Entry |
| Published | 2018-04-19 | By the CVE Program. |
|---|---|---|
| ARMR remediation created | 2020-06-28 | Earliest commit adding this CVE's ARMR patch or security rule. |
| ARMR remediation last updated | 2026-03-04 | Most recent commit touching this CVE's ARMR patch or security rule. |
| Last VRT activity | 2026-03-04 | Most recent commit touching this CVE's classification, patch or rule file. |
| NVD record modified | 2026-06-17 | NVD's own last-modified date for this record. |