뉴스 목록
The Hacker News2026. 09. 18.

Plugin4Shell, 네 가지 AI 코딩 에이전트에서 저장소 소유자가 고정된 플러그인 코드를 교체할 수 있도록 허용

한 줄 요약

AI 코딩 에이전트(Claude Code, Codex, GitHub Copilot, Gemini CLI) 4종에서 'Plugin4Shell'이라는 플러그인 버전 잠금 우회 취약점이 발견됐습니다. 플러그인 저장소를 소유한 공격자가 커밋 해시(코드의 특정 버전을 가리키는 고유 식별자)처럼 보이는 브랜치 이름을 만들어 악성 코드로 몰래 교체할 수 있으며, 교체된 플러그인은 사용자의 파일·저장된 인증 정보·접근 가능한 시스템을 탈취할 수 있습니다. Anthropic은 Claude Code 2.1.179, OpenAI는 Codex 0.146.0에서 패치를 완료했으나, GitHub Copilot은 아직 패치가 없고 Google은 Gemini CLI에 대한 패치를 하지 않을 방침입니다. Claude Code와 Codex는 기본적으로 자동 업데이트가 켜져 있어 사용자가 모르는 사이 악성 플러그인으로 교체될 위험이 있었습니다.

사건

보안 기업 Air Security가 AI 코딩 에이전트 4종(Claude Code, Codex, GitHub Copilot, Gemini CLI)에서 플러그인 버전 잠금을 우회할 수 있는 'Plugin4Shell' 취약점을 공개했다. 에이전트가 플러그인을 설치할 때 커밋 해시를 검증하지 않아, 저장소 소유자가 해시처럼 보이는 브랜치 이름을 이용해 악성 코드로 교체할 수 있다.

영향

교체된 악성 플러그인이 사용자 수준의 권한으로 실행되어 파일, 저장된 인증 정보, 접근 가능한 시스템을 탈취할 수 있다. Claude Code와 Codex에서는 기본 자동 업데이트 기능으로 인해 사용자 개입 없이도 악성 플러그인 교체가 가능했다.

원인

에이전트가 마켓플레이스에서 고정된 버전의 플러그인 코드를 가져올 때, 실제 받은 코드가 지정된 커밋 해시와 일치하는지 검증하지 않기 때문이다. Bitbucket이나 자체 Git 서버처럼 해시 형태의 브랜치명을 허용하는 호스트에서 악용 가능하다.

대응

Claude Code는 2.1.179로, Codex는 0.146.0으로 업데이트하면 패치된다. GitHub Copilot은 패치가 없고, Gemini CLI는 패치 계획이 없으므로 Antigravity로 이전이 권고된다. 수정 사항은 에이전트 자체에 포함되어야 하며, 마켓플레이스 측에서는 해결할 수 없다.

실무 포인트

GitHub는 해시 형태의 브랜치명을 허용하지 않으므로, 에이전트 기본 제공 GitHub 기반 마켓플레이스의 플러그인만 사용하면 브랜치명 우회 공격에 노출되지 않는다. 단, Gemini CLI의 FETCH_HEAD 브랜치명 우회는 GitHub에서도 차단되지 않을 수 있으므로 Gemini CLI 사용자는 Antigravity로 이전해야 한다.

본문

보안 기업 Air Security는 목요일, 널리 사용되는 AI 코딩 에이전트 4종에서 플러그인 코드 저장소를 통제하는 공격자가 에이전트의 특정 검토 버전 잠금을 우회해 악성 플러그인으로 교체할 수 있는 결함을 발견했다고 밝혔다.

Air Security에 따르면 Anthropic은 Claude Code 2.1.179에서, OpenAI는 Codex 0.146.0에서 해당 결함을 패치했다. GitHub Copilot은 아직 수정 사항이 없으며, Google은 서비스를 종료하는 Gemini CLI에 대한 패치를 하지 않을 예정이다.

에이전트들은 온라인 마켓플레이스에서 플러그인이라 불리는 애드온을 설치한다. 안전을 위해 마켓플레이스는 각 플러그인을 커밋 해시(코드의 정확한 스냅샷을 식별하는 긴 문자열)로 단일 검토 버전에 고정한다. Air Security는 에이전트들이 해당 스냅샷을 가져오지만, 실제로 받은 코드가 커밋 해시와 일치하는지는 확인하지 않는다는 점을 발견했다.

브랜치란 저장소 내에서 코드의 이름 붙은 갈래를 말한다. 커밋 해시처럼 보이는 이름의 브랜치를 만들 수 있는 코드 호스팅 서비스에서는, 플러그인 저장소 소유자가 해당 이름을 다른 코드로 가리키게 할 수 있다. 그러면 에이전트는 다른 코드를 설치하면서도 여전히 잠긴 버전에 있다고 보고한다.

플러그인은 에이전트를 사용하는 사람과 동일한 접근 권한으로 실행되므로, 교체된 코드는 해당 사용자의 파일, 저장된 인증 정보, 접근 가능한 시스템에 접근할 수 있다고 Air Security는 밝혔다.

이 기법이 모든 곳에서 통하는 것은 아니다. GitHub는 GitHub 문서에 따르면 커밋 해시처럼 보이는 브랜치명이나 태그명을 허용하지 않으므로, GitHub 저장소에서 설치된 플러그인은 이 브랜치 기법에 노출되지 않는다. Air Security는 이 기법이 Bitbucket이나 자체 Git 서버처럼 이러한 이름을 허용하는 호스트에서 작동한다고 밝히며, 이들 호스트도 해당 에이전트에서 지원된다고 설명했다.

The Hacker News가 9월 18일 에이전트들이 기본 제공하는 마켓플레이스를 확인한 결과, Anthropic의 커뮤니티 카탈로그와 Claude Code 및 Copilot의 기본 카탈로그에 있는 모든 플러그인이 GitHub 저장소를 가리키고 있었다.

Gemini CLI는 다른 방식으로 공격받는다. Air Security에 따르면 브랜치 이름을 해시처럼 만드는 방식 대신, Gemini CLI의 인스톨러는 메인 브랜치 이름이 FETCH_HEAD인 저장소에 의해 속을 수 있으며, 해시 형태 이름에 대한 GitHub의 제한이 이 이름을 명확하게 차단하지는 않는다. 따라서 GitHub에서 Gemini CLI 플러그인을 설치해도 이 결함을 피할 수 있는지는 확실하지 않으며, Air Security가 패치되지 않을 것이라고 밝힌 에이전트도 바로 Gemini CLI다.

피해자의 별도 행동 없이 공격이 가능하게 만드는 것은 백그라운드 자동 업데이트 기능이다. 이 기능은 에이전트가 설치된 플러그인을 자동으로 새로고침하므로, 사용자가 이미 신뢰하는 플러그인이 알림 없이 교체될 수 있다. Air Security에 따르면 이 기능은 Claude Code와 Codex에서 기본적으로 활성화되어 있다.

그러나 자동 업데이트는 GitHub에서 호스팅되는 에이전트 자체의 기본 마켓플레이스에서만 기본적으로 켜져 있으며, 외부 마켓플레이스에 대해서는 비활성화되어 있거나 선택 사항이라고 Anthropic과 GitHub의 문서는 밝히고 있다. 따라서 에이전트의 기본 GitHub 기반 마켓플레이스에서만 플러그인을 설치하는 사용자는 Air Security와 GitHub 자신의 설명에 따르면 브랜치명 버전의 공격에 노출되지 않는다.

Air Security는 5월에 4개 에이전트 모두에 대한 실제 테스트 공격을 구현하고 6월에 벤더들에게 통보했다고 밝혔다. 9월 18일 현재 CVE 식별자는 부여되지 않았으며, 4개 벤더 모두 이 결함에 대한 보안 권고문을 발표하지 않았다고 The Hacker News의 확인 결과 드러났고, 실제 공격에 사용된 흔적도 없다.

The Hacker News는 로컬 테스트에서 근본적인 Git 동작을 재현했으며, OpenAI의 공개 수정 내용도 동일한 버그를 설명한다. Git이 "요청된 커밋 SHA를 브랜치 이름으로 해석할 수 있다"고 OpenAI는 적었으며, 이로 인해 플러그인 소스가 "고정된 것과 다른 커밋을 구체화할 수 있다"고 설명했다. 해당 변경 사항은 Codex 0.146.0에 포함되어 배포되었다.

각 에이전트가 사용자의 기기에서 잠금을 확인하므로, 마켓플레이스 측에서는 사용자를 위해 이 문제를 해결할 수 없다 — 수정 사항은 에이전트 자체에 포함되어 배포되어야 한다. 각 에이전트의 현황은 다음과 같다:

에이전트상태조치 사항
Anthropic Claude CodeAir Security에 따르면 2.1.179에서 수정됨2.1.179 이상으로 업데이트
OpenAI Codex0.146.0에서 수정됨0.146.0 이상으로 업데이트
GitHub CopilotAir Security에 따르면 수정 없음패치 없음
Google Gemini CLIAir Security에 따르면 패치하지 않을 예정Air Security와 Google의 권고에 따라 Antigravity로 이전

이미 교체된 플러그인을 영향받는 에이전트를 업데이트하면 제거되는지, 아니면 향후 교체만 막는지에 대해서는 출처들이 밝히고 있지 않다.

Anthropic의 2.1.179 릴리스 노트에는 해당 수정 사항이 언급되어 있지 않으며, 수정되었다는 설명은 Air Security의 주장이다. Copilot의 경우 Air Security는 6월에 Microsoft에 통보했으나 수정 사항이 배포되지 않았다고 밝혔다. Copilot은 Air Security가 위험이 있다고 지적한 GitHub 외 다른 호스트에서도 플러그인을 설치할 수 있다.

Google은 6월에 소비자용 Gemini CLI 서비스를 중단하고 사용자들을 신규 에이전트인 Antigravity로 안내하고 있으며, Air Security는 이 공격이 Antigravity에는 통하지 않는다고 밝혔다. Google은 또한 기업용 Gemini CLI 접근은 업데이트를 동반해 계속된다고 밝혔다. 이번 결함에 대한 수정이 그 업데이트에 포함될지는 명확하지 않다.

같은 연구원들은 이전에도 에이전트 애드온을 테스트한 바 있다. 6월에 The Hacker News는 Air Security의 테스트를 보도한 바 있는데, 당시 가짜 스킬이 검토를 통과한 후 외부 링크를 변경하는 방식으로 보안 스캐너를 통과해 약 26,000개의 에이전트에 도달했다. Plugin4Shell은 그 아이디어를 교체된 링크에서 버전 잠금 뒤에 숨은 교체된 플러그인으로 발전시킨 것이다.

출처
The Hacker News · thehackernews.com
원문 보기

분야별 뉴스

관심 분야의 보안 이슈를 모아 보세요.

TORUN SECURITY

투런이 제공하는 보안 솔루션

공격 표면 관리부터 엔드포인트·내부정보 보호까지, 기업 환경에 맞는 보안 솔루션을 투런이 함께 설계합니다.