CVE-2019-10086

Information Exposure
Affects
Apache Commons BeanUtils
in
Apache Struts
No items found.
Versions
<1.9.4

Patch Available.

Exclamation circle icon
Patch Available

This Vulnerability has been fixed in the Never-Ending Support (NES) version offered by HeroDevs.

Overview

Apache Commons BeanUtils is a Java library that provides easy-to-use utilities for accessing and manipulating JavaBeans properties dynamically through reflection, simplifying tasks like copying, setting, and retrieving bean properties.

An Information Exposure vulnerability (CVE-2019-10086) has been identified in Apache Commons BeanUtils, which allows attackers to reach the class loader of the running application through the class property that every Java object exposes. PropertyUtilsBean, and therefore BeanUtilsBean, resolves property paths supplied by an application, and a path such as class.classLoader is followed like any other property. BeanUtils shipped a mechanism to hide that property, but it was not enabled by default.

Per OWASP: Access control enforces policy such that users cannot act outside of their intended permissions. Failures typically lead to unauthorized information disclosure, modification, or destruction of all data or performing a business function outside the user's limits.

This issue affects versions before 1.9.4 of Apache Commons BeanUtils, including the 1.7.x line.

‍

Details

Module Info

Vulnerability Info

This Medium-severity vulnerability is found in the commons-beanutils:commons-beanutils package in versions before 1.9.4 of Apache Commons BeanUtils. Property access goes through PropertyUtilsBean, which looks a name up with getPropertyDescriptor and invokes whatever getter it finds. Nothing in the lookup excludes the class property that comes from java.lang.Object#getClass():

// Retrieve the property getter method for the specified property
PropertyDescriptor descriptor =
        getPropertyDescriptor(bean, name);
if (descriptor == null) {
    throw new NoSuchMethodException("Unknown property '" +
            name + "'");
}
Method readMethod = getReadMethod(descriptor);

Because nested property paths are resolved one segment at a time, an attacker who controls a property name passed to PropertyUtils.getProperty, BeanUtils.getProperty, BeanUtils.populate or PropertyUtils.setProperty, for example a request parameter name in a form-binding framework, can start with class and continue through classLoader. On an affected version class.classLoader returns the application class loader, and class.classLoader.defaultAssertionStatus can be set on it. Applications that populate beans from request parameters are exposed to anyone who can send a request. Version 1.9.2 added a BeanIntrospector that hides the class property, but it had to be switched on by the application, so applications that did not opt in stayed exposed.

‍

Mitigation

Apache Commons BeanUtils 1.7.x is End-of-Life and is no longer community-supported. The affected line will not receive public updates from the community to address this issue.

Users of the affected components should apply one of the following mitigations:

  • Upgrade to a currently supported version of Apache Commons BeanUtils.
  • Leverage a commercial support partner like HeroDevs for post-EOL security support.

‍

Credits

  • Melloware (finder)
Vulnerability Details
Severity
Level
CVSS Assessment
Low
>=0 <4
Medium
>=4 <6
High
>=6 <8
Critical
>=8 <10
Medium
ID
CVE-2019-10086
PROJECT Affected
Apache Commons BeanUtils
Versions Affected
<1.9.4
NES Versions Affected
Published date
August 14, 2019
≈ Fix date
February 14, 2025
Category
Information Exposure
Vex Document
Download VEXHow do I use it?
Sign up for the latest vulnerability alerts fixed in
NES for Apache Struts
Rss feed icon
Subscribe via RSS
or

By submitting the form I acknowledge receipt of our Privacy Policy.

Thanks for signing up for our Newsletter! We look forward to connecting with you.
Oops! Something went wrong while submitting the form.