[단독방어] 분석 — CVE-2026-63077
Critical unauthenticated RCE in JetBrains TeamCity can be immediately mitigated by blocking external access to the /agent endpoint while patching to ≥2026.1.3 or ≥2025.11.7.
📋 요약
- 심각도 critical · CVSS 9.8 · EPSS 0.00649 · 악용난이도 easy · KEV
🔍 공격 기법
TeamCity 에이전트는 주기적으로 /agent API에 POST 요청을 전송한다. 취약 버전에서는 해당 POST 본문에 직렬화된 Java 객체를 삽입하면, 인증 없이 역직렬화 과정에서 임의 코드가 실행된다. 원격 공격자는 네트워크만 열려 있으면 /agent 경로로 악성 직렬화 스트림을 전송해 서버 프로세스 권한으로 명령을 수행한다. [교차검증] 다중 소스에서 일관성이 확인되었다.
악용 가능성: 이 취약점은 AV:N(네트워크를 통한 원격 접근)·AC:L(공격 복잡도 낮음)·PR:N(인증 불필요)·UI:N(사용자 상호작용 없음)이라는 CVSS 벡터가 그대로 실제 공격 전제조건과 일치합니다. 즉, TeamCity 서버가 외부 네트워크에 노출돼 있으면 별도의 인증 절차 없이 누구든지 에이전트 폴링 프로토콜을 이용해 악성 페이로드를 전달할 수 있습니다. EPSS = 0.00649는 향후 12개월 내에 약 0.65% 의 확률로 실제 공격이 발생한다는 통계적 예측이며, KEV(공격자 활용 취약점) 목록에 등재된 점은 이미 실전에서 악용되고 있음을 입증합니다. 공격 표면은 TeamCity 에이전트가 주기적으로 폴링하는 HTTP/HTTPS 엔드포인트와 해당 요청에 포함되는 파라미터(예: agentId, jobInfo 등)이며, 이 경로가 방화벽이나 인증 프록시 없이 열려 있으면 바로 악용이 가능합니다. 따라서 네트워크 차단·인증 강화만으로도 공격 성공 가능성을 크게 낮출 수 있습니다.
💥 영향 분석
악용 시 TeamCity 서버(teamcity-server 사용자) 권한으로 임의 코드가 실행되어 CI/CD 파이프라인 전체를 장악할 수 있다. 비밀키·소스코드 탈취, 빌드 스크립트 변조, 추가 악성 페이로드 배포 등 기밀성·무결성·가용성이 모두 위협받는다.
🔗 관련 취약점·체이닝
역직렬화 기반 Java 서비스(예: Jenkins, Apache Struts)와 연계하면 초기 침투 후 TeamCity 로 lateral movement을 구성할 수 있다. 동일한 직렬화 객체 검증 부재가 여러 CI 도구에서 반복되는 패턴이다.
🔎 탐지
-
로그 지표
teamcity-server.log및 웹 서버(access) 로그에/agent경로 POST 요청이 기록됨.- 주요 필드:
request_method=POST,uri_path=/agent*,content_type=application/octet-stream또는application/x-java-serialized-object. - 비정상적인 패턴: 본문 시작 바이트
\xAC\xED(Java 직렬화 헤더)와 함께 요청 크기 > 100 KB, 혹은 알려진 에이전트 IP가 아닌 경우.
-
SIEM 탐지 규칙 예시
-
sql1SELECT *2FROM logs3WHERE sourcetype="teamcity:web"4 AND uri_path LIKE "/agent/%"5 AND request_method="POST"6 AND content_type IN ("application/octet-stream","application/x-java-serialized-object")7 AND request_body ~ "(?s)\\xAC\\xED"
sql12. ```sql2 SELECT *3 FROM logs4 WHERE sourcetype="teamcity:web"5 AND uri_path LIKE "/agent/%"6 AND src_ip NOT IN (SELECT ip FROM known_agent_ips)-
text1^.*\/agent\/.*\sPOST\s.*(application/octet-stream|application/x-java-serialized-object).*\xAC\xED.*$
-
1 2- **오탐 시나리오 및 튜닝** 3- 정상 에이전트는 평균 30‑50 KB 크기의 직렬화 객체를 전송하고, 헤더 `\xAC\xED\x00\x05` 로 시작한다. 따라서 규칙에 `size > 100KB` 조건을 추가하거나 `known_agent_ips` 화이트리스트를 유지하면 오탐률이 크게 감소한다. 4- 대용량 빌드 결과물 전송 시 크기 기준만으로 오탐될 수 있으므로, 객체 클래스명(`org.jetbrains.buildServer.agent.AgentRuntimeInfo`) 패턴을 추가 검증한다. 5 6## 🛡️ 완화 방안 7- **즉시(긴급 차단)** 8- 외부에서 `/agent` 엔드포인트로의 접근을 방화벽 또는 리버스 프록시 수준에서 차단한다. 예: `iptables -A INPUT -p tcp --dport 8111 -m string --algo bm --string "/agent" -j DROP`. 9- 구현 난이도 ★☆☆, 운영 영향 ★☆☆ (에이전트가 내부망에 있지 않을 경우 정상 빌드 중단), 검증 방법: 차단 후 `curl http://<teamcity>:8111/agent` 응답이 403/404인지 확인.10 11- **단기(완화)** 12- `/agent` API에 기본 인증(Basic Auth) 또는 토큰 기반 인증을 적용하고, 허용된 에이전트 IP 대역만 화이트리스트에 등록한다. TeamCity 설정 파일(`teamcity-server.xml`)에 `accessControl` 섹션을 추가 후 웹 서버 재시작. 13- 구현 난이도 ★★☆, 운영 영향 ★★ (인증 오류 시 일시적 빌드 중단 가능), 검증 방법: 허용 IP에서 인증 성공 여부와 비허용 IP 차단 확인.14 15- **근본(해결)** 16- JetBrains 공식 패치를 적용하여 TeamCity 버전을 `2026.1.3` 이상 또는 `2025.11.7` 이후 릴리즈로 업그레이드한다. 17- 구현 난이도 ★★★, 운영 영향 ★★★ (버전 업그레이드·데이터 마이그레이션 시 다운타임 필요), 검증 방법: 업그레이드 후 취약점 스캐너에서 CVE-2026-63077 탐지 결과가 “Not Vulnerable”인지 확인.18 19- **잔여 리스크** 20- 패치 전까지는 즉시·단기 차단을 유지하고, 플러그인 등 다른 역직렬화 경로가 존재할 경우 추가 모니터링이 필요하다. [실측 악용예측] EPSS 0.00649(12개월 내 약 0.65% 악용 가능성)와 KEV 등재는 위험도가 높아 즉시 대응을 요구한다 [우선순위 결정].21 22## ⚖️ 위험도 / 우선순위23- 조치: immediate (지금 즉시(24h 내))24- 근거: CVSS=9.8 · KEV · EPSS=0.00649 · exploit=easy · in_scope=None