최종 업데이트 07:21
소개 검색
SEOUL AI PRESS

AI와 기술을, 사실부터

강좌 강좌

ClaudeBleed 입문: '누가 요청했는지'를 확인하지 않은 결함 이해하기

The Hacker News · SecurityWeek

AI가 브라우저에서 내 계정을 대신 다룰 때 '누가 시켰는지'를 확인하지 않으면 어떤 일이 생기는지 배웁니다. ClaudeBleed 사례로 원래 결함과 그 뒤에 남은 별개의 위험을 구분해 살펴봅니다.

한 문장으로 이해하기

ClaudeBleed는 크롬 확장 프로그램(브라우저에 기능을 더하는 작은 프로그램)인 Claude for Chrome의 보안 결함입니다. 이 확장은 사용자의 계정을 대신 다루는 ‘AI 에이전트’(사람 대신 작업을 수행하는 프로그램)입니다. 문제의 핵심은, Claude가 요청이 claude.ai라는 출처(origin)에서 왔다는 사실만 믿고 ‘실제로 어떤 스크립트가 요청했는지’는 구분하지 못했다는 점입니다. 그래서 다른 확장이 Claude의 권한을 대신 이용할 수 있었습니다. 보안업체 LayerX는 이를 ‘혼동된 대리자(confused deputy)’ 문제라고 설명했습니다. 권한을 가진 프로그램이 잘못된 요청자를 위해 행동하는 상황이라는 뜻입니다.

이 강좌를 마치면 (1) ClaudeBleed가 요청자를 확인하지 않은 결함이라는 점, (2) 그 작동 단계, (3) 원래 결함과 그 뒤에 남은 별개의 위험을 구분하는 법을 설명할 수 있습니다. 브라우저와 확장 프로그램이 무엇인지 정도만 알면 따라올 수 있습니다.

왜 필요한가

이 사례에서 Claude for Chrome는 로그인된 계정과 연결된 기능을 사용할 수 있었습니다. 그래서 ‘누구의 지시인지’를 잘못 판단하면 사용자가 원치 않은 데이터 접근이 일어날 수 있습니다. ClaudeBleed는 바로 이 판단이 어긋난 사례입니다. 그래서 초보자가 ‘AI에게 권한을 줄 때 무엇을 조심해야 하는가’를 배우기에 좋은 예입니다.

어떻게 이루어지는가

원래 ClaudeBleed 결함은 다음 단계로 성립합니다.

  1. Claude는 claude.ai라는 출처에서 온 요청을 신뢰하도록 만들어져 있습니다.
  2. 그러나 그 페이지 안에서 실제로 어떤 스크립트가 요청하는지는 구분하지 않습니다.
  3. 그래서 claude.ai에서 스크립트를 실행할 수 있는 다른 확장이 Claude에게 지시를 건넬 수 있습니다.
  4. Claude는 그 지시를 사용자의 의도로 오해해, Claude가 노출한 기능 범위를 다룹니다.

이 결함에 대한 완화 조치는 외부에서 전달할 수 있는 임의의 프롬프트를 미리 허용된 고정 작업으로 제한하는 것이었습니다. 그런데 완화 뒤에도 별개의 위험이 보고됐습니다. Manifold에 따르면, claude.ai에서 스크립트를 실행할 수 있는 다른 확장은 가짜 클릭을 만들어 허용된 작업을 작동시킬 수 있습니다.

하나의 예시로 따라가기

가상 예시입니다. 여기서는 원래 ClaudeBleed 결함만 따라갑니다. 초보 사용자 ‘민수’가 Claude for Chrome와, 화면 색깔을 바꿔주는 다른 확장을 함께 설치했다고 합시다. 이 색깔 확장은 claude.ai 페이지 안에서 스크립트를 실행할 수 있는 확장입니다. 이 스크립트가 Claude에게 요청을 보냅니다. Claude는 ‘요청이 claude.ai에서 왔다’는 것만 보고, 실제로 누가 요청했는지는 구분하지 못해 민수의 지시로 오해합니다. 그 결과 색깔 확장이 Claude의 권한을 빌려 Claude가 노출한 기능 범위를 대신 굴릴 수 있는 통로가 열립니다. 권한을 가진 Claude가 잘못된 요청자를 위해 행동하는 이 모습이 바로 ‘혼동된 대리자’입니다.

언제 쓰고 언제 쓰지 않는가

이 위험은 ‘언제나’ 성립하지는 않습니다. 우선 Claude for Chrome뿐 아니라, claude.ai에서 스크립트를 실행할 수 있는 또 다른 확장이 함께 있어야 성립합니다. 다음 두 가지는 원래 결함과 후속 결함을 구분해서 이해해야 합니다. 첫째, 원래 ClaudeBleed에 대한 완화 조치는 외부에서 전달할 수 있는 임의 프롬프트의 범위를 미리 허용된 고정 작업으로 줄였습니다. 이 고정 작업에는 Gmail, Google 문서와 댓글, 캘린더를 읽는 작업이 포함됐는데, 이는 제품 전체 기능이 아니라 출처에서 확인되는 허용 작업의 범위입니다. 둘째, 완화 뒤에 남은 가짜 클릭 경로는 이 허용된 작업 범위 안에서만 작동합니다. 이 후속 결함은 기본 설정에서는 민감한 작업 전에 사용자 승인을 요구하지만, ‘Act without asking(묻지 않고 실행)’ 모드에서는 승인 없이 진행될 수 있습니다. 이 승인 모드 차이는 후속 가짜 클릭 결함에 관한 설명이며, 원래 ClaudeBleed에서 확인된 동작이 아닙니다. 이 강좌는 개념 이해용이며 특정 제품 사용 권고가 아닙니다.

핵심 정리와 확인문제

ClaudeBleed의 핵심은 ‘출처는 믿었지만 요청자는 구분하지 않았다’는 한 가지입니다. 완화 뒤에 남은 가짜 클릭 위험은 이와 별개의 문제로 나누어 보아야 합니다.

  1. ClaudeBleed 원래 결함에서 Claude가 구분하지 못한 것은 무엇인가요? 정답·해설: 실제로 어떤 스크립트가 요청했는지입니다. Claude는 claude.ai라는 출처만 믿고 요청자는 구분하지 못했습니다.

  2. 완화 조치 뒤에 보고된 가짜 클릭 결함은 원래 ClaudeBleed와 어떻게 다른가요? 정답·해설: 원래 결함은 요청자를 구분하지 못한 문제였고, 완화 조치가 임의 프롬프트를 고정 작업으로 제한했습니다. 후속 결함은 그 허용된 작업 범위 안에서 가짜 클릭으로 작업을 작동시키는 별개의 경로입니다.

  3. 후속 가짜 클릭 결함에서 기본 모드와 ‘Act without asking’ 모드는 어떻게 다른가요? 정답·해설: 기본 설정에서는 민감한 작업 전에 사용자 승인을 요구하지만, ‘Act without asking’ 모드에서는 승인 없이 작업이 진행될 수 있습니다. 이 차이는 후속 결함에 관한 것입니다.

참고자료