CVE-2017-10116Vulnerability 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).
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
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/2017/Q3-July/CVE-2017-10116/patch/2.6/CVE-2017-10116.armr patch rule added 2020-06-26 updated 2026-03-04app("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: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.
| Version | Score | Band | Vector | Assigner | Type | |
|---|---|---|---|---|---|---|
| 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 |
| Advisory | Type | Quarter | Products 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) |
| Family | Component | Oracle'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 |
| Source | Vendor | Product | Scheme | Affected 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 |
| URL | Tags |
|---|---|
| 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 |
| Published | 2017-08-08 | By the CVE Program. |
|---|---|---|
| ARMR remediation created | 2020-06-26 | 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. |