Claude Code GitHub Action 결함, 악성 이슈 하나가 리포지토리를 탈취.

발행: (2026년 6월 5일 AM 12:15 GMT+9)
7 분 소요

Source: The Hacker News

Swati KhandelwalJun 04, 2026 Vulnerability / AI Security

보안 연구원이 Anthropic의 Claude Code GitHub Action에 결함을 발견했습니다. 이 결함을 이용하면 공격자는 단 하나의 공개된 GitHub 이슈만으로 해당 액션을 실행하는 취약한 공개 저장소를 장악할 수 있습니다. Anthropic 자체 액션 저장소도 같은 워크플로를 사용하고 있었기 때문에, 실제 공격이 성공한다면 악성 코드를 액션 자체와 이를 downstream에서 가져가는 프로젝트에 삽입할 수 있었습니다.

GMO Flatt Security의 RyotaK는 1월에 이 핵심 우회 방법을 Anthropic에 보고했으며, Anthropic은 4일 만에 이를 수정했고, 봄 동안 추가 강화 작업을 진행했습니다. 수정 내용은 claude-code-action v1.0.94에 포함되었습니다. Anthropic은 CVSS v4.0 기준 7.8점으로 평가하고 버그 바운티를 지급했습니다.

Claude Code GitHub Actions는 Claude을 CI/CD 파이프라인에 삽입해 이슈를 분류하고 라벨을 붙이며, 풀 리퀘스트를 검토하거나 슬래시 명령을 실행합니다. 기본적으로 이 워크플로는 저장소의 코드, 이슈, 풀 리퀘스트, 토론, 워크플로 파일에 대한 읽기·쓰기 권한을 가집니다. 권한이 광범위하기 때문에, 액션은 트리거할 수 있는 사용자를 엄격히 제한하도록 설계되었습니다: 쓰기 권한이 있는 사용자만 트리거할 수 있습니다.

트리거 검증 로직에 구멍이 있었습니다. 이름이 [bot] 로 끝나는 모든 행위자를 허용했는데, 이는 GitHub Apps가 관리자가 설치한 신뢰할 수 있는 것이라고 가정했기 때문입니다. 문제는 누구든지 GitHub App을 등록하고, 자신이 소유한 저장소에 설치한 뒤, 해당 토큰을 사용해 공개 저장소에 이슈나 풀 리퀘스트를 열 수 있다는 점입니다. 액션은 “봇”을 감지하고 공격자의 내용을 그대로 통과시켰습니다. Tag 모드는 행위자가 실제 인간인지 추가 확인했지만, Agent 모드는 그렇지 않아 취약점이 남아 있었습니다.

이후 공격자는 간접 프롬프트 인젝션(AI가 읽는 콘텐츠 안에 명령을 삽입해 모델이 실제 작업 대신 그 명령을 수행하도록 하는 기법)을 이용했습니다. RyotaK는 오류 메시지처럼 보이는 이슈 본문을 작성하고, 프롬프트를 반복적으로 다듬어 Claude가 그 안에 숨겨진 명령을 “복구”하도록 만들었습니다. 목표는 /proc/self/environ 파일이었는데, 이 파일은 프로세스의 환경 변수(시크릿 포함)를 보관합니다. Claude Code는 단순 읽기를 차단하지만, RyotaK는 방어를 우회해 Claude가 값을 이슈에 다시 쓰게 했고, 공격자는 이를 탈취했습니다.

이 변수들 중 가장 큰 가치는 GitHub Actions가 OIDC 토큰을 요청할 때 사용하는 자격 증명 쌍입니다. OIDC 토큰은 “이 워크플로가 이 저장소에서 실행되고 있다”는 것을 증명하는 서명된 토큰입니다. Claude Code는 이 토큰을 Anthropic 백엔드와 교환해 **Claude GitHub App 설치 토큰(쓰기 권한)**을 얻습니다. 이 자격 증명을 탈취하고 교환 과정을 재생하면, 목표 저장소의 코드, 이슈, 워크플로에 대한 쓰기 권한을 얻게 됩니다. 이를 claude-code-action 저장소 자체에 적용하면, downstream 프로젝트가 가져가는 액션 자체를 오염시킬 수 있습니다.

RyotaK는 또 봇 트릭을 전혀 사용하지 않는 부드러운 경로도 제시했습니다. Anthropic 자체 예시 이슈 트리아지 워크플로에는 allowed_non_write_users: "*" 설정이 포함돼 있어 누구든지 트리거할 수 있었으며, 이는 Anthropic 문서에서도 위험하다고 경고하고 있습니다. 게다가 Claude은 워크플로 실행 결과의 공개 요약 패널에 작업 요약을 게시했는데, 이는 데이터가 외부로 유출될 수 있는 즉각적인 경로였습니다. 이 예시를 그대로 복사한 많은 저장소가 동일한 취약점을 물려받았습니다.

또 다른 공격 경로는 이슈를 편집할 수는 있지만 Claude를 직접 트리거할 수 없는 경우입니다. 신뢰된 사용자가 워크플로를 실행한 뒤 Claude가 해당 이슈를 읽기 전에 공격자가 그 이슈를 편집하면, 페이로드가 “신뢰된” 입력으로 간주되어 실행됩니다.

대응 방안

  • claude-code-actionv1.0.94 이상으로 업데이트합니다.
  • 쓰기 권한이 없거나 봇인 사용자가 Claude를 트리거하도록 허용하는 모든 워크플로를 감사합니다.
  • 신뢰되지 않은 입력을 받아들이는 경우, Anthropic API 키와 GITHUB_TOKEN 외에 비밀 정보를 절대 전달하지 말고, 데이터 유출에 사용될 수 있는 도구와 권한을 제거합니다.

[![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFlTC7RrRZGiFAgASS0noWSL0qsQGFVp8-Hvuw9yp3X3VKRuTcb5SsPX09wJzrdIM6pu1_5lS4EeZp7Sx4iYBpNJkrGnpr08yyaS1

0 조회
Back to Blog

관련 글

더 보기 »

가장 어려운 갈림길

!https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRnMnAqwiH7Dgv_dmF2bugYLlu8uMyFQkl7DseYkwwzl5MzUP-KeplSbGg_aNt_OqIDtT5rLyDO_Ea96Hf_uti0eKVIseQTxtS7z...