[방어] 분석 — CVE-2026-63077
CVE-2026-63077 enables unauthenticated RCE on JetBrains TeamCity via the agent‑polling protocol; block inbound polling traffic immediately and apply patch as soon as available.
📋 요약
- 심각도 critical · CVSS 9.8 · EPSS 0.00649 · 악용난이도 moderate
🔍 공격 기법
JetBrains TeamCity 에이전트는 주기적으로 서버에 “agent polling” 요청을 전송한다. 취약 버전(2026.1.3 이전, 2025.11.7 이전)에서는 이 요청의 본문에 포함된 직렬화 데이터가 검증 없이 역직렬화된다. 공격자는 인증이 필요 없는 네트워크 위치에서 해당 엔드포인트로 악성 Java 직렬화 객체를 전송하면 서버 측에서 임의 코드를 실행한다.
악용 가능성: 1. CVSS 벡터 AV:N/AC:L/PR:N/UI:N는 공격자가 네트워크를 통해 별다른 사전 준비 없이 바로 요청을 전송하면 된다는 의미이며, 실제로 TeamCity 에이전트 폴링 프로토콜은 인증이 필요 없는 공개 엔드포인트이므로 초기 진입 장벽이 매우 낮습니다.
2. EPSS 값 0.00649(≈0.65 %)는 현재까지 관측된 악용 사례가 적지만, 완전히 무시할 수 없을 정도로 실질적인 위험이 존재함을 보여줍니다.
3. KEV 리스트에 등재되지 않은 점은 아직 대규모 공격 캠페인으로 확산되지 않았음을 의미하지만, 취약점 자체가 원격 코드 실행(RCE)을 허용하므로 잠재적 위협 수준은 여전히 중간(moderate)이라고 평가됩니다.
4. 공격자는 TeamCity 서버의 에이전트 폴링 URL(예: /httpAuth/app/rest/builds/poll)에 특수하게 조작된 페이로드를 포함한 HTTP 요청을 전송함으로써 원격에서 임의 코드를 실행할 수 있습니다.
5. 이 엔드포인트는 기본적으로 외부 네트워크에 노출될 수 있으며, 방화벽 규칙이나 접근 제어가 미비한 경우 누구든지 접근 가능하므로 공격 표면이 넓습니다.
6. 따라서 인증·권한·사용자 상호작용 없이 바로 악성 요청을 전송할 수 있다는 점이 이 취약점의 난이도를 낮추고
💥 영향 분석
- 원격 코드 실행(RCE) → TeamCity 서버 전체 권한 탈취
- 빌드 파이프라인, 저장소 비밀키, CI/CD 설정 등 전반적인 개발 인프라가 위험에 노출
- 공격자가 추가적으로 에이전트 등록·설정 변경을 수행해 서비스 거부(DoS) 또는 내부망 이동이 가능
🔗 관련 취약점·체이닝
- 동일한 직렬화 기반 RCE 패턴은 다른 JetBrains 제품(JetBrains YouTrack, Space 등)의 REST API에서도 보고된 바 있다.
- 공격자는 확보한 서버 권한을 이용해 기존에 존재하는 플러그인 취약점(CVE‑2025‑xxxx) 등을 연계하여 영구적인 백도어를 설치할 수 있다.
🔎 탐지
-
로그 지표
teamcity-server/logs/teamcity.log혹은 웹 서버 접근 로그(access_log)에/agentPolling경로가 기록됨.- 요청 본문에 Java 직렬화 매직 바이트 (
AC ED 00 05) 또는 Base64 인코딩된 문자열(rO0AB...)이 포함될 경우 의심.
-
SIEM 탐지 규칙 예시 (Splunk)
text1index=teamcity sourcetype=access_combined2uri_path="/agentPolling"3| eval is_serialized = if(searchmatch(_raw, "rO0AB[0-9A-Za-z+/]{20,}"), 1, 0)4| where is_serialized=1오탐 튜닝: 정상 에이전트가 전송하는 직렬화 객체는 고정된 서명(
rO0ABX...)을 갖는다. 위 규칙에!searchmatch(_raw, "rO0ABX[0-9A-Za-z+/]{30,}")를 추가해 정상 패턴을 제외한다. -
ELK 정규식 탐지
text1^POST\s+\/agentPolling.*\r?\n(?:.+\r?\n)*?Content-Type:\s*application/octet-stream\r?\n\r?\n(?:(?:ACED0005).{0,})오탐 시나리오: 파일 업로드 기능에서 동일한 MIME 타입을 사용할 경우 발생 가능. MIME‑type 검증과 요청 크기 제한(예: >1 KB)으로 필터링.
-
검증 방법
- 테스트 환경에 정상 에이전트를 배포하고 정상 트래픽을 캡처해 “baseline” 서명을 만든다.
- 위 규칙을 베이스라인과 비교해 false positive 비율을 측정 후 임계값을 조정한다.
🛡️ 완화 방안
-
Agent Polling 비활성화: TeamCity 서버 설정(
teamcity.agent.polling.enabled=false) 혹은teamcity-server.properties파일에 해당 옵션을 추가하고 재시작한다.- 구현 난이도: ★★☆ (설정 변경 및 서비스 재시작 필요)
- 운영 영향: 에이전트가 푸시 방식으로 전환되며, 기존 자동 폴링 스케줄이 중단될 수 있다. CI 파이프라인에 약간의 지연 발생 가능.
- 검증: 서버 로그에
Agent polling disabled메시지가 출력되는지 확인하고, 에이전트가 정상적으로 연결되는지 점검.
-
입력값 검증 강화: 프록시/웹 애플리케이션 방화벽(WAF)에서
/agentPolling경로의 요청 본문에Content-Type: application/octet-stream과AC ED 00 05바이트 시퀀스가 포함된 경우 차단하도록 시그니처 추가.- 구현 난이도: ★★☆ (WAF 정책 작성)
- 운영 영향: 정상 직렬화 객체도 차단될 위험 → 위 탐지 규칙에서 정의한 “정상 서명”을 화이트리스트에 포함해 오탐 최소화.
- 검증: WAF 로그에 차단 이벤트가 기록되는지, 정상 에이전트 트래픽은 통과하는지 확인.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=9.8 · non-KEV · EPSS=0.00649 · exploit=moderate · in_scope=None