Skip to content

Commit dd48f4e

Browse files
mellowaregarydgregory
authored andcommitted
BEANUTILS-520: Mitigate CVE-2014-0114 by enabling SuppressPropertiesBeanIntrospector.SUPPRESS_CLASS by default. (#7)
Squash and merge.
1 parent a3bc516 commit dd48f4e

File tree

4 files changed

+64
-0
lines changed

4 files changed

+64
-0
lines changed

src/main/java/org/apache/commons/beanutils2/PropertyUtilsBean.java

+1
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ public void setResolver(final Resolver resolver) {
185185
public final void resetBeanIntrospectors() {
186186
introspectors.clear();
187187
introspectors.add(DefaultBeanIntrospector.INSTANCE);
188+
introspectors.add(SuppressPropertiesBeanIntrospector.SUPPRESS_CLASS);
188189
}
189190

190191
/**

src/test/java/org/apache/commons/beanutils2/BeanIntrospectionDataTestCase.java

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class BeanIntrospectionDataTestCase extends TestCase {
4141
*/
4242
private static PropertyDescriptor[] fetchDescriptors() {
4343
final PropertyUtilsBean pub = new PropertyUtilsBean();
44+
pub.removeBeanIntrospector(SuppressPropertiesBeanIntrospector.SUPPRESS_CLASS);
4445
pub.addBeanIntrospector(new FluentPropertyBeanIntrospector());
4546
return pub.getPropertyDescriptors(BEAN_CLASS);
4647
}

src/test/java/org/apache/commons/beanutils2/bugs/Jira157TestCase.java

+7
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
import java.util.Map;
2121

2222
import org.apache.commons.beanutils2.BeanUtils;
23+
import org.apache.commons.beanutils2.BeanUtilsBean;
24+
import org.apache.commons.beanutils2.PropertyUtilsBean;
25+
import org.apache.commons.beanutils2.SuppressPropertiesBeanIntrospector;
2326
import org.apache.commons.logging.Log;
2427
import org.apache.commons.logging.LogFactory;
2528

@@ -73,6 +76,10 @@ public static Test suite() {
7376
@Override
7477
protected void setUp() throws Exception {
7578
super.setUp();
79+
80+
BeanUtilsBean custom = new BeanUtilsBean();
81+
custom.getPropertyUtils().removeBeanIntrospector(SuppressPropertiesBeanIntrospector.SUPPRESS_CLASS);
82+
BeanUtilsBean.setInstance(custom);
7683
}
7784

7885
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package org.apache.commons.beanutils2.bugs;
18+
19+
import org.apache.commons.beanutils2.AlphaBean;
20+
import org.apache.commons.beanutils2.BeanUtilsBean;
21+
import org.apache.commons.beanutils2.SuppressPropertiesBeanIntrospector;
22+
23+
import junit.framework.TestCase;
24+
25+
/**
26+
* Fix CVE: https://nvd.nist.gov/vuln/detail/CVE-2014-0114
27+
*
28+
* @see <a href="https://issues.apache.org/jira/browse/BEANUTILS-520">https://issues.apache.org/jira/browse/BEANUTILS-520</a>
29+
*/
30+
public class Jira520TestCase extends TestCase {
31+
/**
32+
* By default opt-in to security that does not allow access to "class".
33+
*/
34+
public void testSuppressClassPropertyByDefault() throws Exception {
35+
final BeanUtilsBean bub = new BeanUtilsBean();
36+
final AlphaBean bean = new AlphaBean();
37+
try {
38+
bub.getProperty(bean, "class");
39+
fail("Could access class property!");
40+
} catch (final NoSuchMethodException ex) {
41+
// ok
42+
}
43+
}
44+
45+
/**
46+
* Allow opt-out to make your app less secure but allow access to "class".
47+
*/
48+
public void testAllowAccessToClassProperty() throws Exception {
49+
final BeanUtilsBean bub = new BeanUtilsBean();
50+
bub.getPropertyUtils().removeBeanIntrospector(SuppressPropertiesBeanIntrospector.SUPPRESS_CLASS);
51+
final AlphaBean bean = new AlphaBean();
52+
String result = bub.getProperty(bean, "class");
53+
assertEquals("Class property should have been accessed", "class org.apache.commons.beanutils2.AlphaBean", result);
54+
}
55+
}

0 commit comments

Comments
 (0)