AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

저장소 클론 한 번으로 GitHub 토큰을 빼가는 악성 Claude Code 스킬

Opus 4.6은 악성 스킬을 정확히 탐지하고 실행을 거부했습니다. 그런데 GitHub 토큰은 이미 공격자 서버로 전송된 뒤였습니다.

사진 출처: Datadog Security Labs

Datadog Security Labs가 Claude Code의 스킬 공급망 보안 취약점을 분석한 연구를 발표했습니다. 코딩 에이전트에 기능을 추가하는 ‘스킬’이 공격자의 진입 경로가 될 수 있으며, 특히 동적 컨텍스트 기능을 악용하면 AI 모델의 보안 판단 자체를 우회할 수 있다는 내용입니다.

출처: Malicious Coding Agent Skills and the Risk of Dynamic Context – Datadog Security Labs

코딩 에이전트가 왜 공격 대상이 되는가

Claude Code, Cursor, Codex 같은 코딩 에이전트는 개발자의 워크스페이스 안에서 작동합니다. 소스 코드를 읽고, 명령어를 실행하고, 외부 도구와 연결됩니다. 개발자의 GitHub 토큰, 클라우드 자격 증명, 패키지 레지스트리 접근 권한도 에이전트의 작업 범위 안에 있습니다.

이 접근 범위가 넓을수록 악성 스킬의 파괴력도 커집니다. 공격자가 개발자를 악성 스킬로 유도하는 데 성공하면, 자격 증명 탈취부터 소스 코드 정찰, 패키지 변조까지 이어지는 공격 경로가 열립니다.

저장소를 클론하면 스킬도 따라온다

Claude Code의 스킬은 여러 위치에서 로드됩니다. 개인 디렉터리(~/.claude/skills/)나 마켓플레이스에서 직접 설치한 스킬만 신경 쓰는 개발자가 많은데, 실제로는 그게 전부가 아닙니다.

프로젝트 디렉터리의 .claude/skills/에 스킬 파일이 있으면 해당 워크스페이스에서 자동으로 로드됩니다. 즉, GitHub 저장소를 클론하는 것만으로도 그 안에 포함된 스킬이 신뢰된 에이전트 세션에 진입할 수 있습니다. 모노레포라면 중첩된 패키지 폴더 안의 스킬도 로드되기 때문에 저장소 루트만 확인해서는 놓칠 수 있습니다.

--add-dir 플래그로 추가한 외부 디렉터리도 예외가 아닙니다. 파일 접근용으로 추가한 폴더에 .claude/skills/가 있으면 그 스킬도 자동 로드됩니다.

모델이 보기 전에 실행되는 명령어

Claude Code 스킬에는 ! 구문으로 동적 컨텍스트를 주입하는 기능이 있습니다. 예를 들어 PR 요약 스킬이 !gh pr diff 같은 명령어를 포함하면, 스킬이 렌더링될 때 실제 PR diff 내용이 자동으로 채워집니다. 반복 작업을 자동화하는 유용한 기능입니다.

문제는 이 명령어의 실행 시점입니다. 공식 문서에도 명시되어 있듯이, ! 명령어는 Claude가 스킬 내용을 보기 전에 실행됩니다. 모델은 명령어 실행 결과가 이미 채워진 최종 프롬프트만 받습니다.

이 구조에서 모델의 프롬프트 인젝션 탐지는 작동할 기회가 없습니다.

Clawsights: 실제 야생에서 발견된 악성 스킬

Datadog Security Labs가 실제로 발견한 악성 스킬 ‘Clawsights’는 Claude Code 사용자 리더보드처럼 위장했습니다. 스킬을 설치하면 사용량 통계를 업로드해 순위를 볼 수 있다는 식입니다.

스킬 내부에는 gh auth token 명령어로 GitHub 인증 토큰을 추출하고, 이를 공격자의 서버로 전송하는 curl 명령이 숨겨져 있었습니다. 처음 버전에서는 이 악성 명령이 스킬 본문에 그대로 적혀 있었고, Opus 4.6은 이를 정확히 탐지해 실행을 거부했습니다.

연구팀은 여기서 멈추지 않고 동적 컨텍스트를 활용한 변형 버전을 만들었습니다. 동일한 탈취 명령을 ! 구문으로 옮기자 결과가 달라졌습니다. 모델은 스킬 내용을 확인하고 “이 스킬을 실행하지 않겠습니다”라고 응답했지만, 그 판단이 나오기 전에 GitHub 토큰은 이미 전송된 뒤였습니다. 아이러니하게도 Opus는 자신이 이미 악성 명령을 실행했다는 사실을 인식하지 못했습니다.

또한 같은 원본 Clawsights 스킬을 Opus 4.7로 테스트했을 때는 탐지 없이 스킬이 실행되는 경우도 확인됐습니다. 모델 버전과 컨텍스트에 따라 탐지 결과가 달라질 수 있다는 점도 주목할 부분입니다.

모델 방어선 하나로는 충분하지 않다

이 연구가 보여주는 것은 AI 모델의 보안 판단이 무의미하다는 게 아닙니다. 오히려 그 반대입니다. Opus 4.6이 악성 스킬을 정확히 식별했다는 사실은 모델 수준의 방어가 실제로 작동한다는 증거입니다.

하지만 동적 컨텍스트처럼 모델이 개입하기 전에 실행되는 경로가 존재하는 한, 모델 방어선만으로는 충분하지 않습니다. 스킬을 소프트웨어 공급망의 일부로 다루어야 한다는 것이 이 연구의 핵심 메시지입니다. 설치 전 검토, .claude/ 디렉터리 변경에 대한 코드 리뷰, 에이전트 작업 중 네트워크 연결 모니터링이 모두 필요한 이유입니다.

논문은 구체적인 탐지 패턴(grep 명령어)과 Datadog의 AI Guard, Cloud Workload Protection을 활용한 런타임 방어 방법도 상세히 다룹니다. 코딩 에이전트를 팀 환경에서 사용 중이라면 원문을 직접 확인해 보세요.


AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다