본문 바로가기
Tech/AI & LLM

Claude Code한테 버그 고쳐달랬더니 해커 코드를 실행했다 — 2,388곳 뚫은 '에이전트재킹'

by Hoft 2026. 7. 4.
320x100
핵심 요약

지난달 보안업체 Tenet Security가 공개한 '에이전트재킹(Agentjacking)'은, 개발자가 Claude Code·Cursor 같은 AI 코딩 에이전트한테 "이 Sentry 에러 좀 고쳐줘"라고 시키는 바로 그 순간을 노리는 신종 공격이에요. 공개된 Sentry DSN 키 하나만 주우면 가짜 에러 리포트에 악성 명령을 숨겨 넣을 수 있고, 에이전트가 그걸 진짜 해결 가이드로 착각해서 그대로 실행해버리거든요. 피싱도, 악성코드 설치도, 서버 침투도 필요 없어요. 이미 심을 수 있는 DSN을 가진 조직이 2,388곳 확인됐고, 성공률은 약 85%였습니다. 오늘은 이게 어떻게 뚫리는지, 그리고 내 개발 환경은 지금 뭘 해야 하는지 같이 짚어볼게요.

AI한테 "이 에러 고쳐줘" 했을 뿐인데

저는 요즘 터미널에서 Claude Code한테 로그 던져주고 "이거 왜 터지는지 봐줘" 하는 게 거의 일상이 됐어요. 손이 편하니까요. 에러 트래커까지 붙여두면 "Sentry에 쌓인 이슈 정리해서 고쳐줘" 한 줄로 반나절 일이 끝나기도 하죠. 그런데 이번 소식을 보고 등골이 살짝 서늘했어요.

에이전트재킹의 시나리오가 딱 이 지점을 파고들거든요. 개발자가 "Sentry 에러 고쳐줘"라고 하면, 에이전트는 MCP(Model Context Protocol)로 Sentry에서 에러 이벤트를 읽어와요. 문제는 그 이벤트 안에 공격자가 미리 심어둔 가짜 'Resolution(해결 방법)' 섹션이 들어 있다는 거예요. 거기엔 그럴듯한 설명과 함께 npx 한 줄이 박혀 있고요.

에이전트는 그걸 시스템이 내려준 정상 진단 가이드로 믿어요. 사람이 만든 지시와 공격자가 심은 텍스트를 구분하지 못하거든요. 그래서 "아, 이렇게 고치면 되는구나" 하고 그 명령을 자율적으로 실행합니다. Tenet Security는 6월 3일 이 내용을 Sentry에 신고했고, 6월 중순에 공개했어요.

사람이 한 번 눈으로 걸러줄 틈이 없어요.

에이전트재킹, 대체 어떻게 뚫는 걸까

핵심을 딱 하나만 기억하면 돼요. Sentry의 DSN은 원래 '쓰기 전용 공개 키'라는 점이에요. 에러를 서버로 쏘아 보내기 위해 프론트엔드 JavaScript에 그냥 박아두는 게 정상 사용법이거든요. 즉 소스만 열어봐도, 아니면 깃허브 검색만 해도 남의 DSN을 주울 수 있다는 뜻이에요. 이게 이 공격의 출발점이자 가장 얄미운 부분이에요.

그 다음은 생각보다 단순해요. 주워온 DSN으로 가짜 에러 이벤트를 Sentry 수집 API에 그냥 POST해요. 인증을 뚫을 것도 없죠, 원래 공개된 키니까요. 이 이벤트의 메시지·컨텍스트 필드에 마크다운으로 예쁘게 꾸민 가짜 해결 섹션을 넣으면, AI 에이전트 눈엔 진짜 Sentry 템플릿처럼 보입니다. 흐름을 표로 정리하면 이래요.

단계 공격자가 하는 일 피해자 쪽에서 벌어지는 일
1. 키 줍기 공개 DSN을 소스·깃허브에서 수집 모름 (정상적으로 노출된 키)
2. 가짜 에러 주입 DSN으로 위조 에러 이벤트 POST Sentry에 이슈 하나 쌓임
3. 명령 숨기기 가짜 'Resolution'에 npx 명령 삽입 정상 진단처럼 보임
4. 에이전트 낚기 "에러 고쳐줘" → MCP로 그 이벤트를 읽음
5. 실행 에이전트가 npx 명령을 그대로 실행
6. 유출 공격자 서버로 정보 회수 환경변수·자격증명이 빠져나감
💡 DSN이 뭐길래

DSN(Data Source Name)은 앱이 "이 에러를 이 Sentry 프로젝트로 보내"라고 알려주는 주소 같은 거예요. 읽기 권한은 없고 쓰기(에러 전송)만 되도록 설계돼 있어서, 공개돼도 '원래 괜찮은' 키로 취급돼요. 이번 공격은 바로 그 '괜찮다'는 전제를 뒤집은 셈이죠.

과장 아니냐고요? 숫자로 보면 안 웃겨요

처음 들었을 땐 저도 "PoC 수준이겠지" 했어요. 근데 규모를 보고 생각이 바뀌었어요. Tenet은 수동 정찰만으로 심을 수 있는 DSN을 가진 조직 2,388곳을 찾아냈고, 그중 71곳은 Tranco 상위 100만 사이트에 드는 곳이었어요. 통제된 검증에서 실제로 에이전트가 명령을 실행한 사례도 100건 넘게 확인됐고요.

성공률이 특히 살벌해요. 주요 AI 코딩 에이전트를 상대로 약 85%가 뚫렸거든요. 피해 스펙트럼도 넓어서, 시가총액 약 2,500억 달러짜리 포춘100 기업부터 혼자 사이드프로젝트 굴리는 1인 개발자까지, 6대륙에 걸쳐 있었대요. 규모가 크든 작든 'Sentry + 자동 실행되는 에이전트' 조합이면 다 사정권이라는 거죠.

더 신경 쓰이는 건 뭘 훔쳐가느냐예요. 공개된 검증 패키지는 환경변수를 훑고, ~/.aws/config·~/.docker/config.json 같은 파일을 들여다보고, 네트워크 인터페이스까지 확인했어요. 정리하면 AWS 키, SSH 키, GitHub 토큰, 쿠버네티스 토큰, Docker 설정, git 저장소 URL과 자격증명 같은 개발자 계정의 핵심 열쇠들이 통째로 위험해지는 거예요.

왜 막기 어렵나 Sentry는 이 문제를 인정하면서도, 특정 페이로드 문자열을 걸러내는 전역 필터를 임시로 넣는 데 그쳤어요. 수집 단계에서 원천 차단하는 건 "기술적으로 사실상 불가능"하다고 봤거든요. 정상 에러와 악성 텍스트가 형식상 똑같이 생겼으니, 입구에서 자르기가 애매한 거죠.

그래서 내 개발 환경, 지금 뭘 하죠

겁만 주고 끝내면 반칙이니까, 당장 손댈 수 있는 것부터 적어볼게요. 제일 반가운 소식은 연구팀이 대응 도구를 오픈소스로 풀었다는 거예요. tenet-security/agent-jackstop이라는 깃허브 저장소인데, Cursor와 Claude Code에 바로 얹는 하드닝 설정 모음이에요. 신뢰할 수 없는 텔레메트리·로그를 에이전트가 덥석 실행하지 않도록 막아주는 방향이라, 같은 스택 쓰면 먼저 살펴볼 만해요.

도구보다 먼저 바꿀 건 '사람 승인 게이트'예요. 에이전트가 셸 명령이나 npx를 실행하기 전에 반드시 사람 확인을 받게 두는 거죠. 편하다고 auto-approve나 이른바 YOLO 모드를 켜두면, 이런 공격은 그냥 무사통과예요. 저도 이번 기회에 자동 실행 범위를 확 줄였어요.

그리고 관점을 하나 바꾸는 게 중요해요. Sentry 이슈든, 로그든, 이슈 트래커 코멘트든 외부에서 흘러들어온 텍스트는 전부 '잠재적 프롬프트 인젝션'으로 취급하는 거예요. "시스템이 준 가이드니까 믿어도 돼"가 아니라 "누가 심었을 수도 있어"로 기본값을 잡는 거죠. MCP 도구 권한도 최소로 조여서, 에이전트가 임의 셸을 못 열게 해두면 훨씬 든든해요.

실무 체크리스트: (1) 에이전트 자동 실행(auto-run) 끄고 명령 단위 승인, (2) MCP·툴 권한 화이트리스트로 최소화, (3) 외부 로그·에러를 신뢰 입력으로 다루지 않기, (4) agent-jackstop 같은 하드닝 설정 검토, (5) CI/CD에서 도는 에이전트는 자격증명 스코프를 특히 좁게.

저는 이 사건을 이렇게 봐요

솔직히 말하면, 이건 특정 버그 하나의 문제가 아니라 '자율성의 청구서'가 날아온 느낌이에요. 우리가 에이전트한테 "알아서 고쳐줘"라고 맡길수록, 그 '알아서'의 범위 안으로 공격이 파고들 자리가 생기는 거니까요. 편리함하고 위험이 같은 손잡이를 잡고 있는 셈이죠.

아 근데 생각해보니, 그렇다고 "AI 코딩 이제 다 끊자"는 얘기는 절대 아니에요. 그건 오버예요. 이번 건 어디까지나 'Sentry MCP + 자동 실행'이라는 특정 조합이 만든 구멍이지, AI 코딩 자체가 뚫렸다는 뜻은 아니거든요. 승인 게이트 하나만 살려둬도 시나리오 대부분이 무너져요.

공평하게 반대편도 열어둘게요. 어떤 분은 "이 정도 위험이면 감수하고 속도를 택하겠다"고 할 수 있어요. 팀 성격에 따라 그 선택이 틀린 것도 아니고요. 다만 그럴 거면 최소한 어떤 자격증명이 그 머신에 살아 있는지는 알고 있어야 해요. 털렸을 때 뭐가 나가는지 모르는 게 제일 무서운 거니까요.

최종 정리

에이전트재킹은 대단한 해킹 기술이라기보다, 우리가 AI 에이전트를 너무 순진하게 믿었다는 걸 찌른 공격이에요. 공개 DSN 하나로 가짜 에러를 심고, 에이전트가 사람 검토 없이 그걸 실행하는 흐름. 2,388곳 노출에 85% 성공률이라는 숫자가 이게 이론이 아니라는 걸 말해주고요. 오늘 딱 하나만 한다면, 에이전트의 자동 명령 실행부터 꺼두시길 권해요. 속도를 조금 내주는 대신, 내 계정 열쇠 뭉치를 지키는 거니까 남는 장사예요.

⚠️ 본 글은 정보 제공 목적이며, 특정 제품의 안전성이나 취약 여부를 단정하지 않습니다. 에이전트재킹 관련 수치·대응 내용은 작성 시점(2026년 7월, Tenet Security·보안매체 공개 자료) 기준이며, 벤더 패치와 권고는 계속 갱신될 수 있어요. 실제 대응은 Sentry·각 에이전트 공식 보안 문서와 사내 보안팀 지침을 다시 확인하시고, 운영 환경 적용의 최종 책임은 본인에게 있습니다.

이 포스팅에는 쿠팡 파트너스 활동의 일환으로 일정 수수료를 제공받을 수 있습니다.

반응형

▲ TOP