Skip to content

Instantly share code, notes, and snippets.

@canujohann
Last active August 29, 2015 14:00
Show Gist options
  • Save canujohann/11362348 to your computer and use it in GitHub Desktop.
Save canujohann/11362348 to your computer and use it in GitHub Desktop.
Struts 1 : CVE-2014-0094 対策

Struts 1 : CVE-2014-0094 対策

BeanUtilsBean ダウンロード

  1. Struts 1系の最新版をダウンロードし、lib直下のcommons-beanutils-1.8.0.jarを、プロジェクトのlib下にコピー
  2. 今ま利用されていたcommons-beanutils.jarを削除
  3. eclipseで反映 (properties->Java Build Path->Libraries->Add JARS...)

最新版はこちら http://struts.apache.org/download.cgi#struts1310

DefaultResolverを継承

プロジェクト内にDefaultResolverを継承したクラスを追加

package common.resolver;

import org.apache.commons.beanutils.expression.DefaultResolver;

/**
 * 静寂性対策 2014-04-28
 * @author canu
 */
public class SafeResolver extends DefaultResolver { 
    @Override
    public String next(String expression) {
        String property = super.next(expression);
        if ("classLoader".equalsIgnoreCase(property)) {
            return "";
        }
        return property;
    }
}

'classLoader'という引数が渡された場合は ""をリターン

SafeResolverの反映

上記クラスが反映されるように、Web アプリケーションの初期化処理する箇所や、最初の方に呼び出されるクラスの static 初期化子内など、適切な箇所に記述します。たとえば、struts-config.xmlにcontrollerを追加する: ↓↓↓

<struts-config>
  ...
  <controller processorClass="common.action.MyProcessor" />
<//struts-config>

web.xml

package common.action;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.RequestProcessor;
import common.resolver.SafeResolver;


public class MyProcessor extends RequestProcessor {

	protected ActionForward processActionPerform(
			HttpServletRequest request,
			HttpServletResponse response,
			Action action,
			ActionForm form,
			ActionMapping mapping)
			throws IOException, ServletException {
		
		BeanUtilsBean.getInstance().getPropertyUtils().setResolver(new SafeResolver());	

	}

}

MyProcessor

テスト

  1. "SafeResolver"にbreakpointを追加
  2. ブラウザーで"actionForm"を利用するActionクラスのpathに "?classLoader=hogehage"を追加

例:http://127.0.0.1:8080/myproject/myAction.do?classLoader=hogehage

test

参照

  1. https://gist.github.com/kawasima/11260616
  2. http://aoking.hatenablog.jp/entry/2014/04/25/103105
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment