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

CVE-2017-10116

8.3 High Protected by RASP

Description

Vulnerability in the Java SE, Java SE Embedded, JRockit component of Oracle Java SE (subcomponent: Security). Supported versions that are affected are Java SE: 6u151, 7u141 and 8u131; Java SE Embedded: 8u131; JRockit: R28.3.14. Difficult to exploit vulnerability allows unauthenticated attacker with network access via multiple protocols to compromise Java SE, Java SE Embedded, JRockit. Successful attacks require human interaction from a person other than the attacker and while the vulnerability is in Java SE, Java SE Embedded, JRockit, attacks may significantly impact additional products. Successful attacks of this vulnerability can result in takeover of Java SE, Java SE Embedded, JRockit. Note: 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 8.3 (Confidentiality, Integrity and Availability impacts). CVSS Vector: (CVSS:3.0/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H).

Exploitation Status

No public exploit

Nothing published shows this CVE being exploited, which is not the same as ruling it out. nothing published in 9 years.

CVSS E:U

  • CISA KEV not listed
  • CISA Vulnrichment exploitation: none
  • Indexed PoC none indexed
  • EPSS 3.4% 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/2017/Q3-July/CVE-2017-10116/patch/2.6/CVE-2017-10116.armr patch rule added 2020-06-26 updated 2026-03-04
app("2017 JULY CPU"):
    requires(version: "ARMR/2.6")

    /***************************************************************************
        CVE-2017-10116 (2017 JULY CPU)

        CVSS 3.0 Summary:
            Base Score              | 8.3 HIGH
            Attack Vector           | Network
            Attack Complexity       | High
            Privileges Required     | None
            User Interaction        | Required
            Scope                   | Changed
            Confidentiality Impact  | High
            Integrity Impact        | High
            Availability Impact     | High

        Description:
            It was discovered that the LDAPCertStore class in the Security
            component of OpenJDK followed LDAP referrals to arbitrary URLs.
            A specially crafted LDAP referral URL could cause LDAPCertStore to
            communicate with non-LDAP servers.

        Resources:
            https://bugzilla.redhat.com/show_bug.cgi?id=1471738

        Affected Versions:
            6u151, 7u141, 8u131, JRockit R28.3.14

        Tested Versions:
            6u0 - 6u151
            7u0 - 7u141
            8u0 - 8u131

        Protection Provided:
            Functional

        Patch Version:
            1.2
    ***************************************************************************/

    patch("CVE-2017-10116 :01"):
        function("com/sun/jndi/ldap/LdapCtx.setReferralMode(Ljava/lang/String;Z)V",
            checksums: ["b763707741",   // 6u0   - 6u12
                        "18446f0500",   // 6u13
                        "15b7622e67",   // 6u14  - 6u26
                        "a4873e836b",   // 6u27  - 6u31
                        "ebcc93c8f8",   // 6u32  - 6u101, 7u0   - 7u85
                        "14e6106fb0",   // 6u105 - 6u151, 7u91  - 7u101
                        "9775048049",   //                7u111 - 7u141
                        "d8afc3f2a9",   // 8u0   - 8u101
                        "d31318a7aa"])  // 8u102 - 8u131
        entry()

        code(language: java,   import: ["com.sun.jndi.ldap.*",
                                        "javax.naming.*",
                                        "javax.naming.ldap.Control"]):
            private static final int LDAP_REF_FOLLOW = 0x01;
            private static final int LDAP_REF_THROW = 0x02;
            private static final int LDAP_REF_IGNORE = 0x03;
            private static final int LDAP_REF_FOLLOW_SCHEME = 0x04;
            private static final int DEFAULT_REFERRAL_MODE = 0x03;
            private static JavaField handleReferralsField;
            private static JavaField reqCtlsField;
            private static JavaField manageReferralControlField;
            private static JavaMethod addControlMethod;
            private static JavaMethod removeControlMethod;

            public void load() {
                handleReferralsField =
                    JavaField.load("com/sun/jndi/ldap/LdapCtx.handleReferrals");
                reqCtlsField =
                    JavaField.load("com/sun/jndi/ldap/LdapCtx.reqCtls");
                manageReferralControlField =
                    JavaField.load("com/sun/jndi/ldap/LdapCtx.manageReferralControl");
                addControlMethod =
                    JavaMethod.load("com/sun/jndi/ldap/LdapCtx.addControl([Ljavax/naming/ldap/Control;Ljavax/naming/ldap/Control;)[Ljavax/naming/ldap/Control;");
                removeControlMethod =
                    JavaMethod.load("com/sun/jndi/ldap/LdapCtx.removeControl([Ljavax/naming/ldap/Control;Ljavax/naming/ldap/Control;)[Ljavax/naming/ldap/Control;");
            }

            public void patch(JavaFrame frame) {
                Object self = frame.loadThisVariable();
                String ref = frame.loadStringVariable(1);
                boolean update = frame.loadBooleanVariable(2);

                if (ref != null) {
                    if (ref.equals("follow-scheme")) {
                        handleReferralsField.writeInt(self, LDAP_REF_FOLLOW_SCHEME);
                    } else if (ref.equals("follow")) {
                        handleReferralsField.writeInt(self, LDAP_REF_FOLLOW);
                    } else if (ref.equals("throw")) {
                        handleReferralsField.writeInt(self, LDAP_REF_THROW);
                    } else if (ref.equals("ignore")) {
                        handleReferralsField.writeInt(self, LDAP_REF_IGNORE);
                    } else {
                        frame.raiseException(new IllegalArgumentException("Illegal value for java.naming.referral property."));
                        return;
                    }
                } else {
                    handleReferralsField.writeInt(self, DEFAULT_REFERRAL_MODE);
                }

                Control[] reqCtls = (Control[]) reqCtlsField.readObject(self);
                Object manageReferralControl = manageReferralControlField.readObject();

                if (handleReferralsField.readInt(self) == LDAP_REF_IGNORE) {
                    Control[] addControlValue = (Control[]) addControlMethod.call(self, new Object[]{reqCtls, manageReferralControl});
                    reqCtlsField.writeObject(self, addControlValue);

                } else if (update) {
                    Control[] removeControlValue = (Control[]) removeControlMethod.call(self, new Object[]{reqCtls, manageReferralControl});
                    reqCtlsField.writeObject(self, removeControlValue);
                }
                frame.returnVoid();
            }
        endcode
    endpatch

    patch("CVE-2017-10116 :02"):
        function("com/sun/jndi/ldap/LdapCtx.processReturnCode(Lcom/sun/jndi/ldap/LdapResult;Ljavax/naming/Name;Ljava/lang/Object;Ljavax/naming/Name;Ljava/util/Hashtable;Ljava/lang/String;)V",
            checksums: ["b763707741",   // 6u0   - 6u12
                        "18446f0500",   // 6u13
                        "15b7622e67",   // 6u14  - 6u26
                        "a4873e836b",   // 6u27  - 6u31
                        "ebcc93c8f8",   // 6u32  - 6u101, 7u0   - 7u85
                        "14e6106fb0",   // 6u105 - 6u151, 7u91  - 7u101
                        "9775048049",   //                7u111 - 7u141
                        "d8afc3f2a9",   // 8u0   - 8u101
                        "d31318a7aa"])  // 8u102 - 8u131
        callsite("com/sun/jndi/ldap/LdapReferralException.setReferralInfo(Ljava/util/Vector;Z)V",
            occurrences: [2])

        code(language: java,   import: ["com.sun.jndi.ldap.*",
                                        "javax.naming.*",
                                        "javax.naming.ldap.Control",
                                        "java.util.Vector"]):
            private static final int LDAP_REF_FOLLOW_SCHEME = 0x04;

            private static JavaField referralsField;
            private static JavaField handleReferralsField;

            public void load() {
                referralsField =
                    JavaField.load("com/sun/jndi/ldap/LdapResult.referrals");
                handleReferralsField =
                    JavaField.load("com/sun/jndi/ldap/LdapCtx.handleReferrals");
            }

            public void patch(JavaFrame frame) {
                Object self = frame.loadObjectVariable(0);
                Object res = frame.loadObjectVariable(1);
                Vector<Vector<String>> referrals = (Vector<Vector<String>>) referralsField.readObject(res);

                Vector<String> refs;
                if (referrals == null) {
                    refs = null;
                } else if (handleReferralsField.readInt(self) == LDAP_REF_FOLLOW_SCHEME) {
                    refs = new Vector<String>();
                    for (String s : referrals.elementAt(0)) {
                        if (s.startsWith("ldap:")) {
                            refs.add(s);
                        }
                    }
                    if (refs.isEmpty()) {
                        refs = null;
                    }
                } else {
                    refs = referrals.elementAt(0);
                }

                frame.storeObjectOperand(1, refs);
            }
        endcode
    endpatch

    patch("CVE-2017-10116 :03"):
        function("com/sun/jndi/ldap/LdapReferralException.<init>(Ljavax/naming/Name;Ljava/lang/Object;Ljavax/naming/Name;Ljava/lang/String;Ljava/util/Hashtable;Ljava/lang/String;I[Ljavax/naming/ldap/Control;)V",
            checksums: ["47b6382b13",   // 6u0 - 6u151, 7u0   - 7u101
                        "3e39ac8beb",   //              7u111 - 7u141
                        "8144ecea53",   // 8u0   - 8u101
                        "63f8891fe9"])  // 8u102 - 8u131
        write("com/sun/jndi/ldap/LdapReferralException.reqCtls")

        code(language: java,   import: ["com.sun.jndi.ldap.*",
                                        "javax.naming.*",
                                        "javax.naming.ldap.Control"]):

            private static final int LDAP_REF_FOLLOW = 0x01;
            private static final int LDAP_REF_FOLLOW_SCHEME = 0x04;

            private static JavaField handleReferralsField;
            private static JavaField reqCtlsField;

            public void load() {
                handleReferralsField =
                    JavaField.load("com/sun/jndi/ldap/LdapReferralException.handleReferrals");
                reqCtlsField =
                    JavaField.load("com/sun/jndi/ldap/LdapReferralException.reqCtls");
            }

            public void patch(JavaFrame frame) {
                LdapReferralException self = (LdapReferralException) frame.loadThisVariable();
                Control[] reqCtls = (Control[]) frame.loadObjectVariable(8);
                int handleReferrals = handleReferralsField.readInt(self);
                reqCtls = (handleReferrals == LDAP_REF_FOLLOW
                        || handleReferrals == LDAP_REF_FOLLOW_SCHEME)
                    ? reqCtls
                    : null;
                reqCtlsField.writeObject(self, reqCtls);
                frame.returnVoid();
            }
        endcode
    endpatch

    // THIS PATCH CAN BE OVERRIDDEN BY "CVE-2018-2633 :01"
    patch("CVE-2017-10116 :04"):
        function("sun/security/provider/certpath/LDAPCertStore.createInitialDirContext(Ljava/lang/String;I)V",
            checksums: ["6f6ac1814a"]) // 6u0 - 6u151
        callsite("javax/naming/directory/DirContext.addToEnvironment(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;")

        code(language: java):
            public void patch(JavaFrame frame) {
                if (isOverridden()) {
                    return;
                }
                frame.storeObjectOperand(2, "follow-scheme");
            }

            public static boolean isOverridden() {
                return Boolean.parseBoolean(
                        System.getProperty("com.waratek.patch.override.CVE-2017-10116"));
            }
        endcode
    endpatch

    // THIS PATCH CAN BE OVERRIDDEN BY "CVE-2018-2633 :02"
    patch("CVE-2017-10116 :05"):
        function("sun/security/provider/certpath/ldap/LDAPCertStore.createInitialDirContext(Ljava/lang/String;I)V",
            checksums: ["890020068b",   // 7u0  - 7u51
                        "e72681b716",   // 7u55 - 7u141
                        "94a4f74ee6"])  // 8u0  - 8u131
        callsite("javax/naming/directory/DirContext.addToEnvironment(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;")

        code(language: java):
            public void patch(JavaFrame frame) {
                if (isOverridden()) {
                    return;
                }
                frame.storeObjectOperand(2, "follow-scheme");
            }

            public static boolean isOverridden() {
                return Boolean.parseBoolean(
                        System.getProperty("com.waratek.patch.override.CVE-2017-10116"));
            }
        endcode
    endpatch

endapp

CVSS

8.3 HIGH v3.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H 2 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 8.3 HIGH CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:H NVD Primary published
CVSS 2.0 5.1 no band published AV:N/AC:H/Au:N/C:P/I:P/A:P NVD Primary

Affected Software & Releases

🏛️ Oracle CPU Advisories & Products

AdvisoryTypeQuarterProducts Oracle named in risk matrix
Oracle Critical Patch Update July 2017 CPU 2017-Q3 Oracle Java SE / Security (Java SE: 6u151, 7u141, 8u131; Java SE Embedded: 8u131; JRockit: R28.3.14)

Indexed Oracle Components & Versions

FamilyComponentOracle's version cell (verbatim)Indexed as
Oracle Java SE Security Java SE: 6u151, 7u141, 8u131; Java SE Embedded: 8u131; JRockit: R28.3.14 6.0.151.0 · 7.0.141.0 · 8.0.131.0

🖥️ Product CPEs & Version Ranges

28 product(s) over 51 version claims (uncapped)
SourceVendorProductSchemeAffected Versions
nvd debian debian linux generic 8.0 · 9.0
nvd netapp active iq unified manager generic ≥ 7.3 · ≥ 9.5
nvd netapp cloud backup generic any version
nvd netapp e-series santricity os controller generic ≥ 11.0 and ≤ 11.70.1
nvd netapp e-series santricity storage manager generic any version
nvd netapp element software generic any version
nvd netapp oncommand balance generic any version
nvd netapp oncommand insight generic any version
nvd netapp oncommand performance manager generic any version
nvd netapp oncommand shift generic any version
nvd netapp oncommand unified manager generic any version · ≤ 7.1
nvd netapp plug-in for symantec netbackup generic any version
nvd netapp snapmanager generic any version
nvd netapp steelstore cloud integrated storage generic any version
nvd netapp storage replication adapter for clustered data ontap generic ≥ 7.2 · 9.6
nvd netapp vasa provider for clustered data ontap generic 6.0 · ≥ 7.2
nvd netapp virtual storage console generic 6.0 · ≥ 7.2
nvd oracle jdk javase 1.6.0:update151 · 1.7.0:update141 · 1.8.0:update131
nvd oracle jre javase 1.6.0:update151 · 1.7.0:update141 · 1.8.0:update131
nvd oracle jrockit generic r28.3.14
nvd phoenixcontact fl mguard dm generic 1.8.0
nvd redhat enterprise linux desktop generic 6.0 · 7.0
nvd redhat enterprise linux eus generic 7.3 · 7.4 · 7.5 · 7.6 · 7.7
nvd redhat enterprise linux server generic 6.0 · 7.0
nvd redhat enterprise linux server aus generic 7.3 · 7.4 · 7.6 · 7.7
nvd redhat enterprise linux server tus generic 7.3 · 7.4 · 7.6 · 7.7
nvd redhat enterprise linux workstation generic 6.0 · 7.0
nvd redhat satellite generic 5.8

References

URLTags
https://access.redhat.com/errata/RHSA-2017:1789 ADVISORY, RHSA-2017:1789
https://access.redhat.com/security/cve/CVE-2017-10116 REPORT, RHSA-2017:1789
https://access.redhat.com/errata/RHSA-2017:1790 ADVISORY, RHSA-2017:1790
https://access.redhat.com/errata/RHSA-2017:2424 ADVISORY, RHSA-2017:2424
https://access.redhat.com/errata/RHSA-2017:2469 ADVISORY, RHSA-2017:2469
https://access.redhat.com/errata/RHSA-2017:3453 ADVISORY, RHSA-2017:3453
http://www.debian.org/security/2017/dsa-3919 Third Party Advisory
http://www.debian.org/security/2017/dsa-3954 Third Party Advisory
http://www.oracle.com/technetwork/security-advisory/cpujul2017-3236622.html Patch, Vendor Advisory
http://www.securityfocus.com/bid/99734 Broken Link

Timeline

Published 2017-08-08 Last modified 2026-06-17
Published2017-08-08By the CVE Program.
ARMR remediation created2020-06-26Earliest 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.