CVE

CVE-2017-10271

조작된 XML 데이터를 취약한 WebLogic에 전송하여 발생하는 RCE 취약점

2025.10.19 | 조회 531 |
0
|

“XML 한 장으로 문이 열려요?” — CVE-2017-10271 쉽게 풀어보기

 

안녕하세요! 이번 호는 롯데카드 해킹사건으로 회자된 Oracle WebLogic 원격 코드 실행 취약점 CVE-2017-10271에 대해 설명하려고 합니다. 커피 한 잔 하시면서 가볍게 훑어보세요 ☕️

 

🪪 롯데카드 헤킹 사건 살펴보기

첨부 이미지

이번 롯데카드 해킹사고는 2025년 8월 14과 15일 양일간 롯데카드의 온라인 결제용 WAS를 통해 최초로 침투한뒤, 이후 약 한 달 동안 매일 서버에 접속하여 고객 정보를 지속적으로 탈취한 것으로 보고되었어요.

이에 297만 명의 고객 정보가 유출되었으며, 이 중 약  28만 명은 카드번호,유효기간,CVC 등 결제 민감정보가 포함돼 2차 피해 가능성이 제기되었습니다. 😢

 

☁️ CVE-2017-10271 간단 개요

CVE-2017-10271 상세개요
CVE-2017-10271 상세개요

사용된 롯데카드 WAS는 Oracle WebLogic Server로, 10.3.6.0 / 12.1.3.0 / 12.2.1.1 / 12.2.1.2 버전에서 확인된 원격 코드 실행 이슈예요.  공격자가 특수하게 조작한 XML을 WebLogic에 보내면, 서버가 그 내용을 따라 원격 명령을 실행하도록 유도될 수 있어요.

 

💻 CVE-2017-10271는 왜 위험할까요?

XMLDecoder Class
XMLDecoder Class

본 취약점의 핵심은 XMLDecoder예요. 원래는 직렬화된 XML을 자바 객체로 역직렬화해요. 그래서 공격자가 시스템 명령을 담은 악성 XML을 보내면, 서버가 그 흐름을 따라 원격으로 명령을 실행해 버릴 수 있어요.

 

본 해킹이 실제로 이루어 질 수 있었던 것은  WebLogic의 내장 기능인 WLS-WSAT와 맞물렸기 때문이에요. 원래는 시스템 간 트랜잭션을 돕는 컴포넌트인데, /wls-wsat/CoordinatorPortType 같은 경로가 별도 인증 없이 HTTP POST를 받도록 열려 있는 경우가 있었어요. 그래서 공격자는 이 엔드포인트로 악성 XML을 그대로 보낼 수 있었죠. 

CVE-2017-10271-PoC.py
CVE-2017-10271-PoC.py

SOAP 헤더에 WorkContext 네임스페이스를 넣어 java.beans.XMLDecoder가 동작하도록 유도하고, 그 XML 안에서 ProcessBuilder를 생성한 다음 ["/bin/bash","-c","<reverse_cmd>"] 같은 문자열 배열을 세팅하고 마지막에 <void method="start"/>로 실행을 트리거해요.

 

이 XML은 의 WorkContextXmlInputAdapter를 거치면서도 별도 유효성 검증 없이 XMLDecoder 되고, 결국 서버에서 공격자가 의도한 코드가 실행되는 흐름으로 이어져요.

한마디로, “열린 WSAT 엔드포인트 + 검증 없는 XMLDecoder 진입”이 합쳐지면서 원격 명령 실행이 가능해진 거예요.

 

🔧 그럼, 본 취약점을 어떻게 막을 수 있을까요?

2017년 10월에 보안 패치가 공개됐어요. 아직 취약 버전을 운용 중이면 Oracle 최신 패치 즉시 적용해 주세요.  본 패치의 내용은 아래 코드와 같아요.

public void startElement(String uri, String localName, String qName, Attributes attributes)
        throws SAXException {
    if (qName.equalsIgnoreCase("object")) {
        throw new IllegalStateException("Invalid element qName:object");
    } else if (qName.equalsIgnoreCase("new")) {
        throw new IllegalStateException("Invalid element qName:new");
    } else if (qName.equalsIgnoreCase("method")) {
        throw new IllegalStateException("Invalid element qName:method");
    } else {
        if (qName.equalsIgnoreCase("void")) {
            for (int i = 0; i < attributes.getLength(); ++i) {
                if (!"index".equalsIgnoreCase(attributes.getQName(i))) {
                    throw new IllegalStateException(
                        "Invalid attribute for element void: " + attributes.getQName(i));
                }
            }
        }
        // … (추가 배열 길이 제한, array 태그 검사 등)
    }
} 

XMLDecoder까지 가기 전에 WorkContextXmlInputAdapter 단계에서 SAX 파서 기반 입력 검증을 넣었어요. 파서의 startElement에서 시작 태그가 object · new · method 이면 즉시 예외를 던져 파싱을 중단해요. 이 덕분에 악성 XML이 XMLDecoder까지 도달하지 못하도록 차단될 수 있어요

 

⏳ 만약 패치가 당장 어렵다면?

CVE-2017-10271은 wls-wsat 구성 요소의 CoordinatorPortType 인터페이스를 통해 악용되고 있으므로, 클러스터에서 해당 기능을 쓰지 않는다면, 밑에 코드를 참고하여, 임시 조치를 완료해주세요.

다만, 어디까지나 임시 처방이에요. 반드시 Oracle 정식 패치와 추가 보완 대책을 병행하시는 걸 추천드려요!

rm -f /home/WebLogic/Oracle/Middleware/wlserver_10.3/server/lib/wls-wsat.war  
rm –f 
/home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war  
rm -rf /home/WebLogic/Oracle/Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat

 

🍪 보안 용어 정리 

1.  WAS (Web Application Server)

     : WAS는 웹 서버가 넘겨준 요청 중 동적 비즈니스 로직을 실행하는 애플리케이션 서버를 말해요.

     예: 로그인, 결제, 게시글 등록 등의 서버-사이드 코드 실행, 세션/트랜잭션 관리 등

2. SOAP(Simple Object Access Protocol)

     : XML 기반 메시지 규약을 의미해요.

3. SAX (Simple API for XML)

     : 이벤트 기반 스트리밍 XML 파서로, 문서를 순차적으로 읽으며 태그 시작.종료 등 이벤트마다 콜백을 호출해 메모리를 적게 쓰는 방식이에요.

 

 

오늘은 롯데카드 해킹사건에서 악용된 CVE-2017-10271을 함께 살펴봤습니다. 업데이트만으로 막을 수 있었던 오래된 취약점이 큰 사고로 이어질 수 있다니, 보안의 기본이 얼마나 중요한지 다시 느끼게 되네요 🛡️

다음 호에서도 더 유익한 이야기로 찾아뵙겠습니다.  끝까지 읽어주셔서 감사합니다.🙏

 

 

 

 

다가올 뉴스레터가 궁금하신가요?

지금 구독해서 새로운 레터를 받아보세요

✉️

이번 뉴스레터 어떠셨나요?

tori 해킹 일지 님에게 ☕️ 커피와 ✉️ 쪽지를 보내보세요!

댓글

의견을 남겨주세요

확인
의견이 있으신가요? 제일 먼저 댓글을 달아보세요 !

다른 뉴스레터

© 2026 tori 해킹 일지

"tori 해킹 일지"는 해킹 기법과 취약점 분석을 매주 쉽게 풀어내는 보안 뉴스레터입니다.

메일리 로고

도움말 오류 및 기능 관련 제보

서비스 이용 문의admin@team.maily.so 채팅으로 문의하기

메일리 사업자 정보

메일리 (대표자: 이한결) | 사업자번호: 717-47-00705 | 서울특별시 송파구 위례광장로 199, 5층 501-8호

이용약관 | 개인정보처리방침 | 정기결제 이용약관 | 라이선스