중간 거래 SEO 진단 Taobao 게스트 클라우드 호스트 기술 홀
최근, Struts2 다시 탈출 보안 허점 주로 국내 전기 딜러, 은행, 연산자 및 다른 많은 대형 웹 사이트 및 수많은 정부 웹사이트에 영향을 미치는. 외부 보안 연구원은 최근 결함, cve-2014-0094 취약점의 처리에서 아파치 Struts2 쉽게 무시 될 것입니다, 임의 명령 실행으로 이어질 수 있습니다 발견. 해커 웹 사이트 데이터, 또는 사이트에 DDoS 공격을 훔칠 수 수 다음.
4 월 24 일, 360 사이트 경비원 처음으로 방어 규칙 및 임시 솔루션의 첫 번째 릴리스를 추가 4 월 25 일 오후, 아파치 공식 발표 STRUTS2 취약점 임시 복구 프로그램; 4 월 25 일 밤, 360 웹 사이트 보안 검색을 처음 "Struts2 취약점 탐지" 도구 (게시 Http://safe.webscan.360.cn/loudong)입니다.
360 사이트 가드 최근 몇 년 동안, 높은 위험 Struts2의 재고를 했다 하 고 왜 Struts2 했다 주요 보안 허점을 분석.
4 년 전 Struts2 코드 실행 문제가 이었다.
Struts2 허점, 여기는 주로 자바 EE 오픈 소스 프레임 워크 struts2 명령 실행 허점, 해 거 대 한, 원격 실행 시스템 명령을 발생할 수 있습니다 다음 시스템 제어를 얻는 의미 오른쪽, 데이터베이스 제어 전원 하면 정보가 공개. STRUTS2 프레임 워크를 사용 하 여 개발 하는 모든 시스템에 영향을 받습니다.
Struts2의 코드 실행 문제 다시 날짜 2010 년 때 Meder Kydyraliev, 구글 보안 팀에서 발견 매개 변수 인터셉터의 특수 문자 "#" UNICDE 인코딩 형태로 코드 실행 문제, 결과 필터링 우회 가능 공식적인 취약점 번호 s 2-003, 아래와 같이 우리 STRUTS2 공식 취약점 공지에서 다음 텍스트를 볼 수 있습니다:
권위는 간단한 우회, 자각이 취약점 악용을 원격으로 임의의 명령을 실행할 수 있습니다로 Meder Kydyraliev에 의해 주어진 코드를 참조 하기 때문에 취약점의 힘 무시 비록 아파치 정부 코드 제공, 그래서 부담 없이 필터 규칙을 수정 후 급하게.
그 당시 공식 아파치 복구, 그들은 정기적으로 사용 하 여 밖으로 모든 필터링 된 "\u0023" 요청을 포함 합니다. 이러한 수정, 일치 하는 그리고 비극은 그들이 문제를 알고는 "\u0023" 과정에서 "\\u0023"로 이스케이프는 않기 때문에 전혀 작동 하지 않습니다.
다행히도, 당국은 마침내 힘을 발견 OGNL 표현식의 OGNL은 자바의 정적 메서드, struts2 호출할 수 자체 이므로 명령 실행 취약점은 자바 정적 메서드의 실행을 제한 하는 몇 가지 매개 변수를 수정. 연구 결과 그들은 OGNL 맥락에서 #_memberaccess.allowstaticmethodaccess, #context [Xwork 설정 같은 일부 네임 스페이스에 특성 수정. Methodaccessor.denymethodexecution "]를 false로 설정. 그러나, UNICDE 인코딩을 통해 필터링 규칙을 우회의 문제가 여전히 존재 합니다. 그들은 모든 권리 될 것 이라고 생각.
아마 아파치 추위에 구글 보안 팀을 떠난, 때문에 그것은 오래 걸리지 않았어요 Meder Kydyraliev freak 밖으로, 그리고 이번이에 그 내장 원격으로 아파치 당국에 임의의 명령을 실행할 수 있는 코드에 대 한 때문에 그 앞에 문제 우회 유니코드 인코딩, s2-003 우회 했지만 이번이에 그는 Ongl를 사용 하 여 시스템 명령을 실행할 수 자바 정적 함수를 호출 하는 방법을 준과 그의 블로그 (http://blog.o0o.nu/ 그림에서와 같이 2010/07/cve-2010-1870-struts2xwork-remote.html) 상세한 분석을 제공:
그래서 s2-003의 수정 선언 하는 실패는 취약점 번호 s2-005, cve-2010-1870 년. 하지만 공식 수리는 매우 간단 하다, Meder Kydyraliev의 사용을 차단 하는 일반 수정 되지만 근본적으로 문제를 해결 하지 않았습니다, 그들은 하지 의식 OGNL 식 인코딩으로 8 채널, 8 채널 "\43"로 대체 "\u0023" 등 여전히 실행할 수 있습니다 다시 무시.
이번이에, 아파치 공식 마침내 실현의 모양을 밖으로 필터링 일반의 문제, 더 엄격한 재작성의 심각성은 ", @" 및 기타 문자 콘텐츠, 공식 그림에서와 같이 정규 표현식을 수정 요청:
상처 struts2
하지만 Struts2의 문제 남아 있다.
아마 2011, Meder Kydyraliev 다시 (cve-2011-3923), 그는 앞으로 새로운 아이디어, 임의의 명령을 실행 하도록 Java 정적 메서드를 호출 하는 작업 인스턴스의 OGNL 실행 설정된 방법 개인 변수의 도움으로. 사실, 웹 컨테이너 기능을 많이, 하지만 피해는 여전히 거 대 한, 취약점 번호 s2-009, cve-2011-3923, 그리고 정기적으로 공식, 문제를 해결 하기 위해 필터링을 통해 공식 아직도 복구는 그림에서와 같이
하지만이 취약점은 상대적으로 닭고기, 영향의 범위는 크게 손상 된 이후로 struts2 태그 ognl, 수행의 s2-013 사용 되었습니다.
사실, STRUTS2 프레임 워크는 OGNL 표현식을 사용 하 여 구현 하지만 OGNL 표현식 너무 강력한 자바의 정적 메서드를 직접 호출 하는. 하지만 당국은 OGNL 식에서 자바의 정적 메서드를 직접 호출을 방지 하기 위해 OGNL 문맥에 여러 명명 된 객체를 내장. #_MemberAccess [Allowstaticmethodaccess]를 설정 하는 예를 들어 #context [Xwork 기본적으로 False로. Methodaccessor.denymethodexecution "] 설정은 기본적으로 True로.
이전 취약점 실현 그들의 제한의 많은 헛 되었던에서,와 같은 집행 OGNL을 사용 하 여 이러한 속성의 값을 수정할 수 있습니다 그것은 위에서 언급 한 두 가지 취약점 이러한 두 속성 설정 됩니다 쉽게 먼저 다음 자바의 정적 메서드를 호출 하는 관리를 주도 했습니다.
S2-013은 버스트, #_memberAccess ["allowstaticmethodaccess"] 속성을 수정할 수 있는 권한이 없 후, 2013 년까지. 이 문제를 근본적으로 해결할 것으로 보인다. 하지만 그들은 잊지 자바 리플렉션 클래스를 사용 하 여 전용 멤버 변수를 액세스 하는 비참 한 방법. 반사 클래스 여기에 대 한 덧붙여 말하자면, 예 전에, s2-008 명령이 실행 되었습니다 하지만이 기능은 실제로 STRUTS2 개발 모델은 엄격 하 게 취약점을 제외 하 고는 그의 처리 논리에서 사용자는 OGNL의 실행을 제어할 수 있습니다, 그러나, 기본 STRUTS2 개발 모드가 닫힙니다,이 취약점은 매우 닭고기. 하지만 그건 하지 때까지 2014 pwntesting 기사의 분석 s2-008는 등뼈의 이전 두 가지 특성을 수정 하려면 자바 리플렉션 클래스의 실제 사용의 사용을 언급 하는 가치가 있다.
또한, 더 간단 하 게, java.lang.ProcessBuilder 하이 클래스, 임의의 새 인스턴스 이며 다음 명령 실행의 목적을 달성 하기 시작 () 메서드를 호출 하는 또 다른 방법은 있다.
그리고, 지난 7 월, s2-016 명령을 훼손 했다. 이 경우에, Defaultactionmapper 클래스는 지원 "액션:", "이동:", "Redirectaction:"로 탐색 또는 리디렉션 접두사, 하지만 이러한 접두사 OGNL 식으로 지켜질 수 있다 Struts2 팬 들은 이러한 접두사의 정보를 필터링 하지 않습니다, 때문에 실행 명령을 발생 합니다.
까지 최근 s2-020, 및 후속 패치 무시 했다 고 상처 struts2 화재, 하지만 문제는 아니고 ognl 실행 하지만 앞에서 언급 한 s2-009 비슷합니다 컨테이너 클래스 로더 속성의 컨트롤 대신 STRUTS2 프레임 워크 등 기능을가지고 있기 때문에 사용자 제출 aa로 = bb 같은 요청, 해당 Setaa 방법, 그래서 실행 OGNL 통과할지 Class.classloader 제출 하는 사용자... 물론, 해당 클래스 로더, 클래스 로더 서의 속성을 조작할 수 있습니다, 다른 컨테이너는 다른 속성을가지고, 그것은 이러한 속성을 제어 하는 매우 위험한 같은 Tomcat Docbase에 루트 디렉터리의 위치를 제어할 수 있습니다.
S2-020의 복원, 관련 당국은 정규 표현식의 "상한" 기술을 사용 하 여 사용자 요청을 필터링 하는의 그들의 평소 스타일을 개발 했습니다 하지만 공격자는 그들을 무시.
이 문제에 Struts2의 개발자에 게 말하고 싶지: 또는 기본 코드에 주의 해야 한다. 수리에 관해서는 s2-020 패치를 우회 후 공식 여전히 사용 하 여 일반, 하지만 그들은 기본적으로 프레임 워크 문제를 해결, 그래서 편안 하 고 아파치 최종 패치 나올 때까지 기다리는 거 야이 시간.
아파치 공무원을 비난 수 없습니다.
우리는 당국이 죄가 되지 않습니다 찾을 Struts2의 오랜 역사를 다시 보면서.
첫째, 개발자는 매우 안전 하 고, 기본적인 보안 조치를 채택 하지는 않습니다 사용에서; 둘째, 공식 복원 충분 하지 않다, 주는 느낌은 항상 같은 무관심, 아니라 근본적으로 문제를 해결, 다음, 공식 정신의 개방성은 정말 충격적인 공식 웹에 매달려 POC의 허점에도 직접 이 많은 사람들이 문제의 원인 중 하나는 취약점을 악용에 대 한 기회 더 보여를 준다.
거의 2 년에 자주, struts2 공격 영향 모바일, 통신, 유니콤, 실버, 증권 및 다른 주요 포털 사이트의 주요 네트워크를 포함 되어 있습니다. Struts2는 이다 매우 강력한 Java EE, 특히 개발자의 광대 한 수 있기 때문에 응용 프로그램은 매우 넓은. 그래서는 struts2 나타나면 0 일, 침략, 끌, 창 고 정보 누출에 큰 영역을 표시 하 고 이벤트를 인터넷의 원인이. 이 문제에 대 한 그것은 관련 기술 인력 시간에서 STRUTS2 프레임 버전을 업데이트 해야 좋습니다. 강한 회사 오픈 소스 프레임 워크를 사용 하지 않도록 자체 응용 프로그램 프레임 워크를 개발 하는 것이 최상 이다.
Struts2 취약점 목록
충격은 비교적 큰, struts2 취약점의 더 넓은 범위를 사용 하 여:
2010 s2-005
cve-2010-1870 xwork parameterinterceptors 우회 수 OGNL 문 실행
2012 년 1 월 s2-008
c v e-2012-0392 struts2 devmod 원격 명령 실행 취약점
2012 년 1 월 s2-009
cve-2011-3923 스트럿 < = 2.3.1 매개 변수 인터셉터 코드 실행
5 월 2013 s2-013
cve-2013-1966 Struts2 < 2.3.14 = includeparams 속성 원격 명령 실행 취약점
7 월 2013 s2-016
cve-2013-2251 Struts2 < 2.3.15.1 = 액션, 리디렉션, redirectaction 접두사 원격 명령 실행 취약점
3 월 2014 s2-020
Struts2 < = 2.3.16 DoS 공격 및 클래스 로더 조작
4 월 2014 s2-021
Struts2 < = 2.3.16.1 우회 패치 (ClassLoader 조작)