Jenkins CLI Java 역직렬화 원격 코드 실행(RCE) 취약점 분석 및 대응 가이드 (CVE-2017-1000353)
실무자 핵심 요약 (Executive Summary)
SECOPS ASSESSMENTJenkins 주 버전 2.56 이하 및 LTS 버전 2.46.1 이하
인증되지 않은 원격의 공격자가 특수하게 조작된 Java 객체를 전송하여 대상 서버에서 임의의 시스템 명령을 실행하고 마스터 노드를 완전히 장악할 수 있습니다
Jenkins 버전을 2.57 이상 또는 LTS 2.46.2 이상으로 즉시 업그레이드하고, 레거시 CLI 프로토콜을 비활성화하십시오
영향받는 제품 및 버전 범위
권장 패치 및 임시 완화(Workaround) 가이드
패치 및 우회 명령어1. 공식 보안 패치 및 버전 업그레이드 명령어
가장 확실한 해결책은 취약점이 해결된 최신 버전(주 버전 2.57 이상, LTS 2.46.2 이상)으로 업그레이드하는 것입니다.
# Debian/Ubuntu 계열 Jenkins 업그레이드
sudo apt-get update
sudo apt-get --only-upgrade install jenkins
sudo systemctl restart jenkins
# RedHat/CentOS 계열 Jenkins 업그레이드
sudo yum update jenkins
sudo systemctl restart jenkins2. 패치 전 임시 완화(Workaround) 및 접근 제어 설정
즉각적인 업그레이드가 어려운 경우, Jenkins 관리 콘솔 또는 스크립트 콘솔을 통해 취약한 Remoting 기반 CLI 프로토콜을 강제로 비활성화해야 합니다.
// Jenkins Script Console (관리자 메뉴 -> Script Console)에서 실행하여 CLI 비활성화
import jenkins.model.Jenkins
import java.util.logging.Logger
def logger = Logger.getLogger('security-patch')
def inst = Jenkins.getInstance()
// Remoting 기반 CLI 포트 비활성화
inst.getDescriptor('jenkins.CLI').getApi().setEnabled(false)
inst.save()
logger.info('Jenkins Remoting CLI has been disabled successfully.')3. 침해 흔적(IoC) 및 로그·버전 점검 스크립트
현재 운영 중인 Jenkins의 버전 및 CLI 포트 활성화 여부를 점검하는 Bash 스크립트입니다.
#!/bin/bash
# Jenkins 포트 및 버전 확인 스크립트
JENKINS_URL='http://localhost:8080'
echo '[+] Checking Jenkins Version...'
curl -sI $JENKINS_URL | grep -i 'X-Jenkins'
echo '[+] Checking if CLI port is exposed...'
curl -sL $JENKINS_URL/cli | grep -E 'cli|remoting' && echo '[!] Warning: CLI endpoint is accessible.' || echo '[+] CLI endpoint is secure or disabled.'내 GitHub/GitLab 레포지토리에 이 취약한 패키지가 숨어 있는지 30초 만에 스캔하세요
간접 의존성(Transitive Dependency)에 포함된 취약점은 수동 확인이 불가능합니다. Git 연동 한 번으로 취약 버전 탐지부터 호환성을 유지하는 최소 버전 업그레이드 PR까지 자동 생성하세요.
취약점 발생 원리 및 공격 메커니즘
1. 취약점 개요 및 발생 원인 (Root Cause)
본 취약점(CVE-2017-1000353)은 Jenkins CLI(Command Line Interface)가 네트워크를 통해 수신된 Java 직렬화 데이터를 처리하는 과정에서 발생하는 심각한 역직렬화(Deserialization) 취약점입니다. 기존 Jenkins는 블랙리스트 기반의 필터링을 통해 위험한 클래스의 역직렬화를 차단하고 있었으나, 공격자가 Java 표준 라이브러리에 포함된 java.security.SignedObject 클래스를 우회 수단으로 악용할 수 있음이 밝혀졌습니다. SignedObject 내부에는 또 다른 직렬화된 객체가 캡슐화되어 있으며, 이 객체가 새로운 ObjectInputStream을 통해 역직렬화되는 과정에서 기존 블랙리스트 필터링 메커니즘이 완전히 우회됩니다.
2. 공격 메커니즘 및 익스플로잇 시나리오
공격자는 먼저 SignedObject 내부에 임의의 코드를 실행할 수 있는 가젯 체인(예: CommonsCollections 등)을 포함하는 페이로드를 구성합니다. 이후 Jenkins CLI 포트(또는 HTTP를 통한 CLI 터널링)로 연결을 시도하고, 직렬화된 SignedObject를 전송합니다. Jenkins 서버가 이 객체를 수신하여 역직렬화하는 순간, 내부의 중첩된 ObjectInputStream이 트리거되면서 블랙리스트 검증 단계를 건너뛰고 가젯 체인이 실행됩니다. 이 과정은 어떠한 사용자 인증도 요구하지 않으므로(Unauthenticated), 외부망에 노출된 Jenkins 인스턴스는 즉각적인 원격 코드 실행(RCE) 위협에 노출됩니다.
3. 비즈니스 및 인프라 파급 영향
Jenkins는 CI/CD 파이프라인의 핵심 컨트롤러로서 소스 코드, 자격 증명(API Key, SSH Key, 클라우드 크레덴셜), 빌드 아티팩트 등 기업의 가장 민감한 자산에 접근할 수 있는 권한을 가집니다. 본 취약점이 성공적으로 익스플로잇될 경우, 공격자는 Jenkins 마스터 노드의 시스템 권한을 획득하여 소스 코드를 탈취하거나, 빌드 파이프라인에 악성코드를 주입하는 공급망 공격(Supply Chain Attack)을 수행할 수 있습니다. 또한 내부 네트워크로의 횡적 이동(Lateral Movement)을 위한 교두보로 악용될 수 있어 비즈니스 연속성에 치명적인 타격을 입힙니다.
공식 보안 권고문 및 참조 링크
Jenkins versions 2.56 and earlier as well as 2.46.1 LTS and earlier are vulnerable to an unauthenticated remote code execution. An unauthenticated remote code execution vulnerability allowed attackers to transfer a serialized Java `SignedObject` object to the Jenkins CLI, that would be deserialized using a new `ObjectInputStream`, bypassing the existing blacklist-based protection mechanism. We're fixing this issue by adding `SignedObject` to the blacklist. We're also backporting the new HTTP CLI protocol from Jenkins 2.54 to LTS 2.46.2, and deprecating the remoting-based (i.e. Java serialization) CLI protocol, disabling it by default.
자주 묻는 실무 질문 (FAQ — CVE-2017-1000353)
FAQQ1. CVE-2017-1000353 취약점의 위험도와 실제 악용 가능성은 어느 정도입니까?
CVE-2017-1000353의 기본 점수는 CVSS 9.8 (CRITICAL)이며, 향후 30일 내 실제 악용 확률을 나타내는 EPSS 점수는 99.7%입니다. 현재 미국 CISA KEV(실제 악용이 확인된 취약점 카탈로그)에 등재되어 있으므로 최우선 긴급 패치가 필요합니다.
Q2. CVE-2017-1000353에 영향을 받는 벤더와 제품은 무엇입니까?
주요 영향 벤더는 jenkins이며, 대상 컴포넌트는 jenkins, jenkins_lts입니다. 상세 영향 범위: Jenkins 주 버전 2.56 이하 및 LTS 버전 2.46.1 이하 전 범위 (CISA KEV 등재 및 EPSS 점수 0.99 이상으로 실제 악용 가능성 극도로 높음)
Q3. 서버 재기동이나 정규 패치 전 즉시 적용할 수 있는 완화 조치(Workaround)는 무엇입니까?
[권장 조치] Jenkins 버전을 2.57 이상 또는 LTS 2.46.2 이상으로 즉시 업그레이드하고, 레거시 CLI 프로토콜을 비활성화하십시오 본문의 패치 및 우회 명령어 섹션과 자가 점검 체크리스트를 참고하여 외부 노출 포트를 차단하거나 WAF 탐지 규칙을 선적용하십시오.
CVE-2017-1000353 사내 보안 패치 공지문 · CISO 경영진 보고서 초안 자동 생성
클릭 한 번으로 사내 이메일·노션·결재 문서에 바로 붙여넣을 수 있는 공식 보고서 양식을 생성합니다.
🔗 함께 점검해야 할 동일 벤더·스택 연관 취약점 (jenkins)
동일 카테고리 전체 보기 →Apache MINA 3.0 JavaNativeMessageDecoder 역직렬화 원격 코드 실행(RCE) 취약점 (CVE-2026-118636)
[영향 대상] Apache MINA 3.0.0 비활성 브랜치 및 해당 코덱 모듈을 사용하는 Java 애플리케이션
GitLab CE/EE 미인증 원격 코드 실행(RCE) 취약점 보안 권고 (CVE-2026-97229)
[영향 대상] GitLab CE/EE 19.2(19.2.8 미만), 19.3(19.3.5 미만), 19.4(19.4.2 미만) 버전
GitLab CE/EE 미인증 임의 파일 읽기 취약점 보안 권고 (CVE-2026-85706)
[영향 대상] GitLab CE/EE 18.7 버전부터 19.3.1 버전 사이의 특정 릴리즈 사용자
Google Brotli 디코더 원격 코드 실행(RCE) 및 메모리 손상 취약점 보안 권고 (CVE-2026-111497)
[영향 대상] Google Brotli 라이브러리 버전 1.0.3 ~ 1.2.0을 사용하는 모든 웹 서버, 브라우저, Node.js 및 백엔드 애플리케이션
일간 취약점 브리핑 및 긴급 Zero-Day 경보 구독
보안 실무자와 인프라·백엔드 엔지니어를 위해 매일 아침 주요 취약점과 패치 우선순위를 요약해 발송합니다.