Apache Struts 2 Jakarta 멀티파트 파서 원격 코드 실행(RCE) 취약점 (CVE-2017-5638) 분석 및 대응 가이드
실무자 핵심 요약 (Executive Summary)
SECOPS ASSESSMENTApache Struts 2.3.x (2.3.32 미만) 및 2.5.x (2.5.10.1 미만) 버전을 사용하는 웹 애플리케이션
인증되지 않은 원격 공격자가 조작된 HTTP 헤더(Content-Type 등)를 전송하여 대상 서버에서 시스템 권한으로 임의의 OS 명령을 실행할 수 있습니다
Apache Struts 버전을 최신 안전한 버전(2.3.32 또는 2.5.10.1 이상)으로 즉시 업그레이드하고, 패치 적용 전까지 WAF 규칙을 적용하십시오
영향받는 제품 및 버전 범위
권장 패치 및 임시 완화(Workaround) 가이드
패치 및 우회 명령어1. 공식 보안 패치 및 버전 업그레이드 명령어
가장 확실한 해결책은 취약점이 해결된 Apache Struts 버전(2.3.32 또는 2.5.10.1 이상)으로 업그레이드하는 것입니다. Maven 프로젝트의 경우 'pom.xml' 파일을 다음과 같이 수정하여 의존성을 업데이트하십시오.
<!-- pom.xml 의존성 수정 예시 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.30</version> <!-- 안전한 최신 버전으로 지정 -->
</dependency>2. 패치 전 임시 완화(Workaround) 및 접근 제어 설정
즉각적인 패치가 어려운 경우, 기본 Jakarta Multipart Parser 대신 다른 파서(예: Pell Parser)를 사용하도록 'struts.xml' 설정을 변경하거나, WAF(웹 애플리케이션 방화벽)에서 Content-Type 헤더에 OGNL 특수문자('#', 'multipart/form-data')가 포함된 요청을 차단하십시오.
<!-- struts.xml 설정을 통한 파서 변경 예시 -->
<struts>
<constant name='struts.multipart.parser' value='jakarta-stream' />
</struts>3. 침해 흔적(IoC) 및 로그·버전 점검 스크립트
웹 서버 액세스 로그에서 Content-Type 헤더에 '#cmd=', 'java.lang.ProcessBuilder', 'ognl' 등의 문자열이 포함되어 있는지 검사하여 침해 시도를 탐지할 수 있습니다.
# Apache/Nginx 액세스 로그에서 악성 OGNL 주입 패턴 검색
grep -Ei '(#cmd|multipart/form-data.*#|java\.lang\.ProcessBuilder|ognl)' /var/log/nginx/access.log /var/log/apache2/access.log 2>/dev/null코드 수정 전에도 가상 패치(Virtual Patching)로 웹 공격을 즉시 차단하세요
서버 재시작이나 긴급 패치가 어려운 운영 환경이라면 클라우드 WAF 관리형 룰셋을 활성화하여 SQLi, RCE, XSS 익스플로잇 페이로드를 엣지에서 1분 만에 차단할 수 있습니다.
취약점 발생 원리 및 공격 메커니즘
1. 취약점 개요 및 발생 원인 (Root Cause)
본 취약점(CVE-2017-5638)은 Apache Struts 2 프레임워크의 기본 파일 업로드 핸들러인 Jakarta Multipart Parser의 예외 처리 및 에러 메시지 생성 로직 결함으로 인해 발생합니다. 파일 업로드 요청 중 오류(예: 허용되지 않는 파일 크기, 잘못된 인코딩 등)가 발생하면, Struts는 에러 메시지를 생성하는 과정에서 OGNL(Object-Graph Navigation Language) 표현식을 파싱하고 실행합니다. 이 과정에서 사용자 입력값(Content-Type, Content-Disposition, Content-Length 등)이 검증 없이 OGNL 엔진으로 전달되어 원격 코드 실행으로 이어집니다.
2. 공격 메커니즘 및 익스플로잇 시나리오
공격자는 HTTP 요청의 'Content-Type' 헤더에 악의적인 OGNL 표현식을 주입하여 서버로 전송합니다. Jakarta Multipart Parser가 이 헤더를 처리하는 도중 예외(Exception)를 발생시키면, Struts의 'LocalizedTextUtil.findText' 메서드가 호출되어 에러 메시지 내의 OGNL 표현식을 평가합니다. 공격자는 OGNL 컨텍스트 내의 '#_memberAccess' 및 'ProcessBuilder' 객체를 조작하여 샌드박스를 우회하고, 웹 서버 프로세스의 권한으로 임의의 시스템 명령어를 실행할 수 있습니다.
3. 비즈니스 및 인프라 파급 영향
이 취약점은 CVSS 9.8의 치명적인 등급을 받았으며, 실제 야생(In-the-Wild)에서 대규모로 악용된 이력이 존재합니다. 공격자는 인증 없이 원격에서 대상 서버의 완전한 제어권을 획득할 수 있으며, 이를 통해 데이터베이스 자격 증명 탈취, 내부망 침투(Lateral Movement), 랜섬웨어 유포, 웹페이지 변조 등 기업 비즈니스에 치명적인 중단을 초래할 수 있습니다.
공식 보안 권고문 및 참조 링크
The Jakarta Multipart parser in Apache Struts 2 2.3.x before 2.3.32 and 2.5.x before 2.5.10.1 has incorrect exception handling and error-message generation during file-upload attempts, which allows remote attackers to execute arbitrary commands via a crafted Content-Type, Content-Disposition, or Content-Length HTTP header, as exploited in the wild in March 2017 with a Content-Type header containing a #cmd= string.
자주 묻는 실무 질문 (FAQ — CVE-2017-5638)
FAQQ1. CVE-2017-5638 취약점의 위험도와 실제 악용 가능성은 어느 정도입니까?
CVE-2017-5638의 기본 점수는 CVSS 9.8 (CRITICAL)이며, 향후 30일 내 실제 악용 확률을 나타내는 EPSS 점수는 100.0%입니다. 현재 미국 CISA KEV(실제 악용이 확인된 취약점 카탈로그)에 등재되어 있으므로 최우선 긴급 패치가 필요합니다.
Q2. CVE-2017-5638에 영향을 받는 벤더와 제품은 무엇입니까?
주요 영향 벤더는 apache이며, 대상 컴포넌트는 struts입니다. 상세 영향 범위: Apache Struts 2.3.19 ~ 2.3.31 버전 및 2.5 ~ 2.5.10 버전
Q3. 서버 재기동이나 정규 패치 전 즉시 적용할 수 있는 완화 조치(Workaround)는 무엇입니까?
[권장 조치] Apache Struts 버전을 최신 안전한 버전(2.3.32 또는 2.5.10.1 이상)으로 즉시 업그레이드하고, 패치 적용 전까지 WAF 규칙을 적용하십시오 본문의 패치 및 우회 명령어 섹션과 자가 점검 체크리스트를 참고하여 외부 노출 포트를 차단하거나 WAF 탐지 규칙을 선적용하십시오.
CVE-2017-5638 사내 보안 패치 공지문 · CISO 경영진 보고서 초안 자동 생성
클릭 한 번으로 사내 이메일·노션·결재 문서에 바로 붙여넣을 수 있는 공식 보고서 양식을 생성합니다.
🔗 함께 점검해야 할 동일 벤더·스택 연관 취약점 (apache)
동일 카테고리 전체 보기 →Apache ActiveMQ Jolokia JMX-HTTP 브릿지 원격 코드 실행(RCE) 취약점 보안 권고 (CVE-2026-34197)
[영향 대상] Apache ActiveMQ Classic 5.19.4 미만 버전 및 6.0.0 이상 6.2.3 미만 버전
Apache Tomcat EncryptInterceptor 우회 및 민감 정보 평문 노출 취약점 (CVE-2026-34486)
[영향 대상] Apache Tomcat 11.0.20, 10.1.53, 9.0.116 버전에서 클러스터링(Clustering) 및 EncryptInterceptor를 사용하는 환경
Apache Tomcat EncryptInterceptor 패딩 오라클 취약점 (CVE-2026-29146) 보안 권고
[영향 대상] Apache Tomcat의 클러스터링 멤버십 보호를 위해 기본 설정으로 `EncryptInterceptor`를 사용하는 환경 (11.0.0-M1~11.0.18, 10.0.0-M1~10.1.52, 9.0.13~9.0.115, 8.5.38~8.5.100, 7.0.100~7.0.109)
Apache MINA 3.0 JavaNativeMessageDecoder 역직렬화 원격 코드 실행(RCE) 취약점 (CVE-2026-118636)
[영향 대상] Apache MINA 3.0.0 비활성 브랜치 및 해당 코덱 모듈을 사용하는 Java 애플리케이션
일간 취약점 브리핑 및 긴급 Zero-Day 경보 구독
보안 실무자와 인프라·백엔드 엔지니어를 위해 매일 아침 주요 취약점과 패치 우선순위를 요약해 발송합니다.