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

AI와 기술을, 사실부터

강좌 강좌

CSRF 입문: 요청 위조가 왜 위험한지 AgentForger 사례로 이해하기

the-decoder.com · SecurityWeek · theregister.com

CSRF는 로그인된 사용자를 속여 원치 않는 행동을 대신 실행시키는 공격입니다. 이 강좌는 실제로 보고된 'AgentForger' 사례로 그 원리와 조건, 한계를 설명합니다.

이 강좌를 마치면 CSRF의 뜻을 한 문장으로 말하고, CSRF가 성립하는 조건과 성립하지 않는 조건을 구분하며, 실제 보고 사례인 AgentForger에 개념을 적용할 수 있게 됩니다. 인터넷 링크를 클릭하는 경험과 ‘로그인 상태’라는 말의 뜻 정도만 알면 충분합니다. CSRF는 ‘사이트 간 요청 위조(Cross-Site Request Forgery)‘의 약어로, 다른 곳에서 만든 요청을 진짜 사용자의 요청인 것처럼 위조한다는 뜻입니다.

한 문장으로 이해하기

CSRF는 이미 로그인한 사용자가 조작된 링크나 페이지를 통해 자신이 의도하지 않은 ‘인증된 행동’을 자기 권한으로 실행하게 되는 공격입니다. 여기서 ‘인증된 행동’이란 로그인한 사용자의 권한으로 처리되는 행동을 말합니다.

왜 필요한가

입력 출처가 설명한 일반적인 CSRF에서는 사용자가 서비스에 로그인해 있고 그 서비스가 조작된 요청을 인증된 행동으로 받아들이는 조건이 필요합니다. 이 조건이 갖춰지면, 공격자는 사용자의 비밀번호를 몰라도 사용자가 조작된 링크를 누르게 만드는 것만으로 요청을 보낼 수 있습니다. 그러면 서비스는 그 요청을 로그인한 사용자의 행동으로 처리할 수 있습니다. 이 개념을 알아야 ‘로그인 상태에서 조작된 요청이 왜 문제가 될 수 있는가’를 스스로 판단할 수 있습니다.

어떻게 이루어지는가

  1. 사용자가 어떤 서비스에 로그인해 둔 상태입니다.
  2. 공격자가 특정 행동을 일으키도록 조작한 링크나 페이지를 만듭니다.
  3. 사용자가 그 링크를 클릭하거나 페이지를 엽니다.
  4. 사용자가 의도하지 않은 인증된 행동을 일으키는 요청이 서비스로 전달됩니다.
  5. 서비스가 로그인 상태만으로 요청을 신뢰하면, 정상 요청으로 여기고 실행합니다.

하나의 예시로 따라가기

보안회사 Zenity Labs는 OpenAI의 ChatGPT Workspace Agents에서 ‘AgentForger’라는 취약점을 찾아 맞춤형 CSRF로 설명했습니다. 여기서 이용된 것은 에이전트 빌더 주소에 있던 template_name과 initial_assistant_prompt라는 두 개의 URL 매개변수입니다. URL 매개변수란 주소 뒤에 값을 실어 서비스로 전달하는 항목을 말합니다. 이 가운데 initial_assistant_prompt에 담긴 지시는 자동으로 제출되고 실행됐습니다. 이 공격에는 몇 가지 전제 조건이 확인됐습니다. 피해자가 ChatGPT에 로그인해 있고, Workspace Agents에 접근할 수 있으며, 하나 이상의 연결(커넥터)을 이미 허용해 둔 상태였습니다. 이미 허용된 커넥터가 있었기 때문에 새로운 권한 동의 화면이 나타나지 않았습니다. 시연에서는 조작된 링크가 5분마다 실행되며 제목이 TASK로 시작하는 공격자 메일을 확인하는 에이전트를 만들었습니다. 즉 클릭 한 번이 단발 행동을 넘어 자동으로 움직이는 에이전트를 만들어 낸 것입니다.

언제 쓰고 언제 쓰지 않는가

이 강좌의 입력 출처가 설명한 일반적인 CSRF에서는 사용자가 로그인해 있고, 서비스가 조작된 요청을 인증된 행동으로 받아들이는 조건이 필요합니다. AgentForger 사례에서도 조건이 분명했습니다. 이미 허가된 커넥터가 없거나 로그인 상태가 아니면 이 공격은 성립하지 않았습니다. 또한 AgentForger에서는 이미 허용된 커넥터 덕분에 별도의 동의 절차가 생략됐는데, 이는 이 사례에 한정된 조건일 뿐 모든 CSRF를 막거나 일으키는 일반 규칙은 아닙니다. OpenAI는 2026년 6월 4일 보고를 받고 6월 8일 문제의 URL 매개변수를 제거해 취약점을 수정했습니다. 다만 Zenity는 정당한 사용자 신원으로 움직이는 자율 에이전트는 기존 보안 도구가 다루기 어렵다는 점을 함께 지적했습니다.

핵심 정리와 확인문제

CSRF는 로그인된 사용자를 속여 원치 않는 행동을 사용자 권한으로 실행시키는 공격이며, AgentForger는 그 결과가 자율 에이전트 생성으로 커진 사례입니다.

확인문제

  1. 이 강좌에서 설명한 CSRF가 성립하려면 사용자가 해당 서비스에서 어떤 상태여야 하나요?
  2. 입력 출처가 설명한 일반적인 CSRF와 AgentForger의 결과는 어떻게 달랐나요?
  3. AgentForger에서 새 권한 동의 화면이 뜨지 않은 이유는 무엇인가요?

정답과 해설

  1. 정답: 사용자가 해당 서비스에 로그인해 있는 상태여야 합니다. 해설: 입력 출처가 설명한 공격에서는 조작된 요청이 로그인된 사용자의 인증된 행동으로 처리될 수 있기 때문입니다.
  2. 정답: 일반적인 CSRF는 한 번의 행동을, AgentForger는 자율 에이전트 생성을 일으켰습니다. 해설: 입력 출처가 설명한 일반적인 CSRF는 한 번의 의도하지 않은 행동을 실행하지만, AgentForger는 도구·권한·지시·일정과 기존 커넥터 접근권을 가진 자율 에이전트를 만들어 냈습니다.
  3. 정답: 사용자가 이미 커넥터를 허용해 둔 상태였기 때문입니다. 해설: 이미 연결(커넥터)을 허용해 둔 상태여서 새 권한 동의 절차가 필요 없었기 때문입니다.

참고자료