VRT 391,192 CVEs tracked · 15,442 in RASP scope · data as of 19 hours ago

CVE-2018-2815

5.3 Medium Protected by RASP

Description

Vulnerability 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).

Exploitation Status

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

  • CISA KEV not listed
  • CISA Vulnrichment exploitation: none
  • Indexed PoC none indexed
  • EPSS 4.7% chance in 30 days

Waratek Defense Posture

Protected by RASP

A Waratek agent blocks this today.

Applicable rule: CVE has an ARMR patch rule that provides mitigation

  • Protection full a patch rule written for this CVE
  • Action available patch rule
  • Review human armr-file
  • Record active
Decided by armr-patch-file : An ARMR patch file on disk for this CVE
Finding CVE has an ARMR patch rule that provides mitigation

ARMR rule files

1 file

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-04
app("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

5.3 MEDIUM v3.1 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.

VersionScoreBandVectorAssignerType
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

Affected Software & Releases

🏛️ Oracle CPU Advisories & Products

AdvisoryTypeQuarterProducts 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)

Indexed Oracle Components & Versions

FamilyComponentOracle'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

🖥️ Product CPEs & Version Ranges

13 product(s) over 26 version claims (uncapped)
SourceVendorProductSchemeAffected 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

References

URLTags
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

Timeline

Published 2018-04-19 Last modified 2026-06-17
Published2018-04-19By the CVE Program.
ARMR remediation created2020-06-28Earliest commit adding this CVE's ARMR patch or security rule.
ARMR remediation last updated2026-03-04Most recent commit touching this CVE's ARMR patch or security rule.
Last VRT activity2026-03-04Most recent commit touching this CVE's classification, patch or rule file.
NVD record modified2026-06-17NVD's own last-modified date for this record.