✦ guniq 시각
개발팀이 AI 코딩 보조 도구를 앞다퉈 도입하는 지금, 이 사건은 ‘공식 마켓플레이스 = 안전’이라는 통념에 정면 도전한다. 70,000명 개발자의 API 키가 8개월 동안 조직적으로 빠져나갔는데도 JetBrains는 감지하지 못했다. 중소 스튜디오·에이전시·스타트업일수록 API 키 발급-회수 프로세스가 허술하고, 이상 사용 모니터링도 없는 경우가 많다. 지금 당장 팀원 전원의 AI API 키 사용 로그를 확인하고, 사용하지 않는 키는 폐기하라.
▲ 이미지 출처: The Hacker News
2026년 6월 16일, 보안 연구팀 StepSecurity와 Aikido Security는 JetBrains 마켓플레이스에서 15개의 악성 플러그인을 발견했다고 동시에 보고했다. 해당 플러그인들은 DeepSeek, OpenAI, SiliconFlow 등 AI 서비스의 API 키를 개발자 몰래 외부 서버로 빼돌렸다. 최초 배포는 2025년 10월이었고, 마지막 플러그인은 발각 불과 6일 전인 2026년 6월 10일에 등록됐다. 8개월 동안 약 7만 명의 개발자가 감염 플러그인을 설치했다.
8개월짜리 공급망 공격 — 누가, 어떻게 심었나
공격자는 단일 계정이 아니라 7개의 별도 게시자 계정(CodePilot, StackSmith, CodeCrafter, CodeWeaver, JetCode, DailyCode, ZenCoder)을 만들어 플러그인을 분산 배포했다. 계정 하나가 적발되더라도 나머지가 살아남도록 설계된 구조다. StepSecurity의 분석에 따르면, 첫 번째 플러그인 DeepSeek Junit Test는 2025년 10월 31일 등록돼 1,121건이 설치됐고, 이후 11월 한 달 동안만 4개가 추가됐다. 초기에는 소규모로 시작해 탐지 회피를 테스트하다가, 2026년 6월 9~10일 이틀 만에 CodeGPT AI Assistant(25,571건)와 DeepSeek AI Assist(27,727건) 두 개를 집중 배포해 전체 설치 7만 건의 75%를 단숨에 쌓았다.
플러그인 이름은 치밀하게 설계됐다. DeepSeek, CodeGPT 같은 실제 AI 브랜드명을 앞에 붙이고 “Git Commit 자동화”, “FindBugs”, “Code Review”, “Unit Test 생성” 같은 개발자가 실제로 필요로 하는 기능 이름을 조합했다. 기능 자체도 동작했다 — 그것이 핵심이었다. The Hacker News의 보도에 따르면 연구자 Ilyas Makari는 “이 플러그인들은 광고대로 정확히 작동한다. 하지만 개발자가 입력한 AI 서비스 API 키는 공격자가 통제하는 서버로 유출된다”고 밝혔다.
탈취 메커니즘 — “Apply” 클릭 한 번이면 끝
공격 기술은 복잡하지 않았지만 효과적이었다. StepSecurity의 기술 분석은 3단계 탈취 과정을 상세히 기록했다.
1단계 — 키 가로채기: 개발자가 플러그인 설정 화면에서 API 키를 입력하고 “Apply” 버튼을 클릭하는 순간, 플러그인 내부의 악성 코드가 키 형식을 검증한다. 대상은 sk-로 시작하는 51자 문자열 — OpenAI 형식의 키다. 중복 탈취를 막는 seen.add(key) 로직까지 갖춰, 이미 훔친 키는 다시 전송하지 않을 정도로 정교하다.
2단계 — TLS 우회: 플러그인은 JVM 레벨에서 커스텀 X509TrustManager를 설치해 TLS 인증서 검증 경고를 억제했다. IDE 내장 디버거나 로컬 모니터링 도구가 비정상 연결을 감지하지 못하도록 한 것이다.
3단계 — 평문 HTTP 전송: 탈취된 키는 Gson 라이브러리로 JSON 직렬화된 뒤 HTTPS가 아닌 평문 HTTP POST로 C2 서버 39.107.60.51/api/software/key로 전송됐다. 인증 헤더는 정적 토큰 X-Api-Key: F48D2AA7CF341F782C1D 하나였다. 해당 서버는 알리바바 클라우드(AS37963, 항저우)에 위치하고, 관리자 패널 제목은 중국어로 “信息管理平台(정보 관리 플랫폼)”였다. StepSecurity는 플러그인이 마켓플레이스에서 삭제된 지 3일 후인 6월 19일에도 C2 서버가 여전히 운영 중임을 확인했다.
탈취 키로 만든 ‘지하 AI 구독 서비스’
이번 캠페인의 특이점은 단순 탈취에 그치지 않고 수익화 구조까지 갖췄다는 데 있다. Cloud Security Alliance의 분석에 따르면, 공격자는 플러그인 내부에 “도네이션 월(donation wall)”을 구현했다. 일반 사용자에게서 무료로 API 키를 훔치고, 유료 사용자에게는 그 훔친 키로 AI 서비스를 이용할 수 있게 해주는 구조다. The Hacker News는 이를 “운영자는 한쪽에서 돈을 걷고 반대편에서는 공짜 자격증명을 가져가는 반면, 진짜 키 소유자가 청구서를 대신 낸다”고 묘사했다.
이는 AI 서비스 원가가 높은 현실을 역이용한 것이다. OpenAI GPT-4o, Anthropic Claude, DeepSeek 등의 API는 토큰 단위 과금이고, 대규모 호출 시 월 수십만 원에서 수백만 원까지 청구될 수 있다. 공격자는 탈취한 키를 ‘저가 AI 구독’으로 재판매함으로써, 피해자가 모르는 사이에 그 비용을 대신 부담하게 만들었다.
JetBrains의 대응 — 원격 킬스위치와 심사 강화
JetBrains 공식 블로그는 2026년 6월 17일 15개 플러그인 전체를 백엔드에서 즉시 비활성화했고, 연결된 7개 게시자 계정을 영구 삭제했다고 밝혔다. 주목할 점은 원격 킬스위치를 발동해 이미 설치된 플러그인도 사용자의 조치 없이 무력화했다는 것이다. JetBrains 자체 인프라에는 침해가 없었으며, 피해는 사용자가 설정한 AI API 키에만 국한됐다.
JetBrains는 재발 방지를 위해 세 가지 기술 대책을 발표했다. 첫째, 플러그인 소스 코드 내 암호화되지 않은 HTTP 엔드포인트나 평문 IP 주소 삽입을 자동 탐지하는 규칙. 둘째, TLS 검증을 전역으로 무력화하는 코드 패턴 감지. 셋째, AI API 키와 유사한 설정값을 처리하는 플러그인에 대한 자동 코드 리뷰 트리거. 또한 더 안전한 AI 도구 통합을 위해 Agent Client Protocol(ACP) 레지스트리 채택을 권고했다.
왜 공식 마켓플레이스가 8개월 동안 몰랐나
Cloud Security Alliance의 리서치 노트는 이번 사건의 구조적 취약점을 날카롭게 짚는다. IDE 플러그인은 브라우저 확장 프로그램이나 일반 유틸리티와 달리 OS 레벨 샌드박스 없이 풀 사용자 세션 권한으로 실행된다. 로컬 파일시스템, 환경변수, 자격증명 저장소, 외부 네트워크 연결 모두에 제한 없이 접근할 수 있다는 뜻이다. 그럼에도 SBOM, SLSA 출처 검증, 의존성 고정 같은 소프트웨어 공급망 보안 기법이 IDE 플러그인 생태계에는 체계적으로 적용되지 않았다.
더 근본적인 문제는 마켓플레이스 심사의 구조적 한계다. 악성 코드는 사용자가 설정 값을 입력하고 “Apply”를 누르는 순간에만 활성화됐다 — 정적 코드 분석이나 단순 동작 테스트로는 잡기 어려운 구조다. 7개 계정에 분산 배포해 패턴 감지를 회피했고, 8개월 동안 축적하다가 마지막 이틀에 7만 건의 75%를 쏟아붓는 전략도 탐지를 어렵게 했다.
중소 개발팀이 지금 해야 할 것
- 감염 플러그인 즉시 확인 — JetBrains IDE에서 Settings → Plugins로 이동해 15개 목록(DeepSeek Junit Test, DeepSeek Git Commit, DeepSeek FindBugs, DeepSeek AI Chat, DeepSeek Dev AI, DeepSeek AI Coding, AI FindBugs, AI Git Commitor, AI Coder Review, DeepSeek Coder AI, AI Coder Assistant, DeepSeek Code Review, CodeGPT AI Assistant, DeepSeek AI Assist, Coding Simple Tool)에 해당하는 플러그인이 있으면 즉시 제거
- AI API 키 즉시 교체 — OpenAI, Anthropic, DeepSeek, SiliconFlow 등 사용 중인 모든 AI 서비스 대시보드에서 기존 키를 폐기하고 새 키 발급. 의심 여부와 관계없이 예방 차원에서 실행
- API 사용 로그 소급 점검 — 2025년 10월부터 현재까지의 AI API 사용 내역에서 평소와 다른 시간대·대량 요청·미지의 지역 호출이 있는지 확인. OpenAI는 platform.openai.com, Anthropic은 console.anthropic.com에서 확인 가능
- 네트워크 로그에서 C2 서버 흔적 확인 — 사내 방화벽·프록시 로그에서
39.107.60.51로의 아웃바운드 HTTP 연결 기록을 검색. 특히 IDE 프로세스가 출처인 비암호화 HTTP POST 요청에 주목 - 플러그인 설치 정책 수립 — 팀 전체 IDE에 설치 허용 플러그인 목록(allowlist)을 정하고, 신규 설치 시 다운로드 수·리뷰·게시자 이력·소스 코드 공개 여부를 의무 확인하는 프로세스 도입
- API 키 관리 체계화 — 개발자 개인 계정이 아닌 조직 계정에서 키를 발급하고, 용도별로 키를 분리(개발/스테이징/프로덕션). 사용량 임계치 초과 시 알림 설정
출처: The Hacker News | StepSecurity 기술 분석 | JetBrains 공식 블로그 | BleepingComputer | Cloud Security Alliance | 발행일: 2026-06-17