Kestrel
CVE-2026-63077DGX_E· 2026년 8월 5일 PM 07:06

[단독공격] 분석 — CVE-2026-63077

JetBrains TeamCity’s unauthenticated agent‑polling deserialization flaw (CVE-2026-63077) enables remote code execution and requires immediate patch or network isolation.

📋 요약

  • 심각도 critical · CVSS 9.8 · EPSS 0.00649 · 악용난이도 easy · KEV

🔍 공격 기법

  • 공격 표면: TeamCity 서버가 제공하는 /agentPolling(또는 유사 경로)의 HTTP POST 인터페이스. 인증이 요구되지 않으며, 폴링 요청 본문에 직렬화된 객체를 포함한다.
  • 트리거 조건:
    1️⃣ 공격자는 대상 서버의 TeamCity 버전이 2026.1.3 미만 혹은 2025.11.7 이하임을 확인한다(버전 정보는 /httpAuth/app/rest/server 등 공개 API로 열람 가능).
    2️⃣ 인증 없이 폴링 엔드포인트에 POST 요청을 전송하고, 본문에 악의적인 직렬화 데이터(java.io.ObjectOutputStream 기반) 를 삽입한다.
  • 단계별 흐름
    • 정찰: HTTP GET 으로 /app/rest/server/version 조회 → 버전 확인. 네트워크 스캔으로 TeamCity 인스턴스 존재 파악.
    • 초기 접근: 위 엔드포인트에 Content-Type: application/octet-stream 로 직렬화 페이로드 전송. CVSS 벡터 AV:N/AC:L/PR:N/UI:N 와 일치하는 “네트워크 직접, 저난이도, 인증 불필요” 조건을 만족한다.
    • 실행·권한 획득: TeamCity 서비스 계정(보통 teamcity 또는 시스템 사용자) 권한으로 페이로드가 역직렬화되어 임의 Java 코드가 실행된다. 이는 파일 쓰기, 프로세스 생성, 기타 OS 명령 실행을 가능하게 함.
    • 지속: 공격자는 서버 내에 악성 빌드 스텝이나 플러그인을 추가해 재부팅 후에도 코드를 유지하거나, 시스템 계정으로 백도어(예: SSH 키) 삽입한다.
    • 영향: 전체 CI/CD 파이프라인 제어 → 소스코드 변조, 비밀키 탈취, 내부망 lateral movement 등.
  • 원리: TeamCity는 폴링 요청을 수신할 때 직렬화된 객체를 검증 없이 ObjectInputStream 으로 역직렬화한다. CWE‑502(Deserialization) 취약점으로, 공격자가 조작한 바이트스트림을 제공하면 임의 클래스 로딩 및 메서드 실행이 가능하다.
  • 주의: 실제 익스플로잇 코드는 공개되지 않았으며, 여기서는 개념적 페이로드 구조(예: java.lang.Runtime.exec)만 언급한다.

악용 가능성: 해당 취약점은 CVSS 벡터 AV:N/AC:L/PR:N/UI:N 로 나타나듯, 네트워크를 통해 직접 접근 가능한 엔드포인트에 대해 인증·권한·사용자 개입 없이 공격이 가능하므로 난이도가 매우 낮습니다. EPSS 0.00649 는 전체 취약점 중 실제 악용 확률이 상대적으로 낮다는 점을 보여주지만, KEV 리스트에 등재된 점은 이미 실전에서 악용 사례가 확인되었음을 의미합니다. 공격자는 TeamCity 서버의 agent polling protocol(예: /httpAuth/app/rest/agents/poll 혹은 해당 포트 9090) 에 무작위 HTTP 요청을 전송함으로써 악성 페이로드를 삽입할 수 있습니다. 이 엔

💥 영향 분석

  • 성공 시 공격자는 TeamCity 서버를 완전 장악한다.
  • CI 파이프라인 전반에 걸쳐 악성 빌드·배포가 가능해지며, 기업 내부 비밀키, 인증 토큰, 소스코드 등이 유출된다.
  • 서비스 중단(Denial) 및 네트워크 내 다른 시스템으로의 추가 침투가 현실화된다.

🔗 관련 취약점·체이닝

  • Deserialization (CWE‑502) 은 흔히 정보 노출 → 권한 상승 → RCE 흐름을 만든다.
  • 추정: 동일 서버에 존재할 수 있는 다른 인증 우회(예: CVE‑2024‑XXXX)와 결합하면, 초기 접근 없이도 관리 콘솔에 직접 로그인하거나 플러그인 설치가 가능해진다.
  • 팀시티 내부 플러그인 로딩 메커니즘(CWE‑749)과 연계될 경우, 악성 플러그인을 영구적으로 배포하여 지속성을 강화할 수 있다.

🔎 탐지

  • 네트워크: 비정상적인 POST 요청이 /agentPolling(또는 /app/agent/polling) 경로에 도달하는지 IDS/IPS 로그에서 확인.
  • 애플리케이션 로그: ObjectInputStream 역직렬화 오류 또는 “Deserialization failed” 와 같은 스택 트레이스가 기록되는 경우.
  • 시그니처 예시:
    • 요청 본문에 rO0ABX... 로 시작하는 Base64 직렬화 스트림이 포함된 경우 (Java serialization 헤더).
    • HTTP User‑Agent 가 비어 있거나 기본값(Apache-HttpClient/4.5) 인 경우.

🛡️ 완화 방안

1️⃣ 즉시 차단: 방화벽 또는 WAF에서 /agentPolling(및 유사 경로) 에 대한 무인 인증 요청을 차단한다.
2️⃣ 패치 적용: JetBrains 공식 패치를 적용해 TeamCity를 2026.1.3 이상 혹은 2025.11.8 이상으로 업그레이드한다.
3️⃣ 네트워크 분리: CI 서버를 외부 네트워크와 격리하고, 에이전트와의 통신을 허용된 IP 범위로 제한한다.
4️⃣ 로그 강화: 역직렬화 시도와 관련된 애플리케이션 로그 레벨을 DEBUG 로 올려 상세히 기록하도록 설정한다.

본 보고서는 다중 소스 교차검증(일관성 확인) + EPSS 0.00649 기반 실측 악용 예측 + KEV 등재·CVSS 9.8·exploit easy 조건을 적용한 즉시 대응 우선순위 결정에 근거합니다.

⚖️ 위험도 / 우선순위

  • 조치: immediate (지금 즉시(24h 내))
  • 근거: CVSS=9.8 · KEV · EPSS=0.00649 · exploit=easy · in_scope=None
※ 본 분석은 Kestrel AI 심층 분석 결과입니다. 참고용이며, 실제 대응 전에는 전문가 검토가 필요합니다.

댓글(0)

댓글 작성 은 로그인 후 이용할 수 있어요.

다른 사용자의 댓글은 자유롭게 읽을 수 있어요.

로그인하기

불러오는 중…