TL;DR

  • Cluely의 2025년 7월 분석에서 메인 창의 탐색 차단 누락, 광범위한 IPC 브리지, 비활성화된 샌드박스가 결합해 악성 링크를 클릭한 사용자에게 화면·오디오 노출과 원격 코드 실행 위험을 초래함.
  • AI 응답의 링크를 클릭하면 메인 Electron 창이 임의의 URL로 이동하며, 악성 페이지가 Cluely의 렌더러 프로세스에서 실행됨.
  • 프리로드 스크립트가 IPC 채널을 제한하지 않아 악성 페이지가 화면 캡처와 오디오 녹음·마이크 모니터링 기능을 호출할 수 있음.
  • 렌더러 샌드박스가 비활성화돼 있어 V8 익스플로잇이 완전한 원격 코드 실행으로 이어질 수 있으며, 이는 Discord에서 사용된 공격 유형과 같음.
  • 악성 링크는 프롬프트 인젝션이나 사회공학으로 유도할 수 있으며, 문제의 취약점은 발견 당시 공개 제보 프로그램이 없는 상태에서 보고된 뒤 조용히 패치됨.

Cluely를 악성코드로 바꾸기

  • 2025년 7월에 발견한 취약점을 당시에는 공개하지 않았고, 수개월이 지난 뒤 Electron 기반 AI 에이전트를 만드는 개발자를 위한 교육 자료로 공유함.
  • 이 글의 분석은 당시 Cluely 버전에 한정되며, 이후 개발 상황은 추적하지 않았으므로 보안 체계와 관행이 크게 개선됐을 가능성이 있음.
  • AI 에이전트 해킹 시리즈의 일환으로, 화면을 보고 마이크를 듣는 AI 보조 앱 Cluely의 취약점을 살펴봄.
  • AI 에이전트는 코드 작성, 화면 감시, 마이크 청취를 수행하며 설계상 기기에 깊이 접근함. 이 접근 권한은 공격자에게도 매력적인 표적이 됨.
  • Electron 앱이 시스템에 폭넓게 접근하면서 기본 보안 조치를 갖추지 못하면 어떤 문제가 생기는지 설명함.
  • Electron 보안 연구 경험이 있으며, DEF CON 30에서 당시 주요 Electron 앱 대부분을 침해할 수 있는 연구를 발표했고 Discord도 포함됨.

Cluely란?

  • Cluely는 화면 위에 AI 오버레이를 표시하는 Electron 기반 데스크톱 앱임.
  • 면접과 회의 등에서 실시간 AI 지원을 제공하기 위해 화면과 마이크 오디오를 캡처함.
  • 화면 공유, Mission Control, 작업 표시줄에서 보이지 않도록 설계됨.
  • 내부 구성은 React 프런트엔드와 AI 응답 렌더링용 react-markdown, 실시간 전사용 @deepgram/sdk를 사용하는 일반적인 Electron 앱임.

공격 표면

  • 화면과 마이크에 접근하도록 설계된 Electron 앱에서 렌더러 프로세스의 코드 실행은 특히 위험함. 공격자가 렌더러에서 코드를 실행하면 해당 기능에 접근할 수 있음.

1단계: 메인 창의 탐색 차단 누락

  • Cluely는 AI 응답을 react-markdown으로 렌더링하며, 분석 당시 마크다운 렌더러는 출력을 적절히 정화해 명백한 교차 사이트 스크립팅(XSS)은 확인되지 않음.
  • 그러나 링크는 클릭 가능한 <a> 태그로 표시됨.
  • Electron 앱은 will-navigate 이벤트 처리기로 렌더러의 임의 URL 이동을 막아야 함. DisplayOverlay 클래스에는 이 보호 기능과 새 창 차단 처리가 있었음.
  • 반면 AI 응답의 클릭 가능한 링크를 렌더링하는 메인 창에는 will-navigate 처리기가 없었음. 새 창 열기는 차단하고 HTTP 또는 HTTPS 링크를 외부 브라우저로 여는 처리가 있었지만, 메인 창 자체의 탐색은 막지 않았음.
  • 따라서 사용자가 AI 마크다운 응답의 링크를 클릭하면 링크가 시스템 브라우저에서 열리는 대신 Cluely 앱 전체가 해당 URL로 이동함. 악성 페이지가 Cluely의 렌더러 프로세스 안에서 실행됨.

2단계: 프리로드를 통한 민감한 IPC 노출

  • 렌더러에서 할 수 있는 일을 조사한 결과, 프리로드 스크립트가 Electron IPC 인터페이스를 직접 노출함.
  • contextBridge를 통해 window.electron.ipcRenderer에 send, invoke, on이 제공되며 채널 이름을 제한하는 허용 목록이 없음.
  • 따라서 렌더러에 로드된 모든 페이지가 임의의 채널 이름으로 IPC 메시지를 보내거나 호출할 수 있음.
  • 메인 프로세스에는 전체 화면 캡처, 네이티브 화면·오디오 녹음 시작 및 중지, 마이크 모니터링 시작 및 중지에 사용하는 IPC 핸들러가 등록돼 있음.
  • 악성 페이지는 이를 통해 사용자에게 알리지 않고 다음 작업을 수행할 수 있음.
  • 사용자 화면 전체 캡처
  • 네이티브 녹음기를 통한 오디오 녹음
  • 마이크 모니터링을 통한 발언 수집
  • 수집한 내용을 공격자 서버로 반출할 수 있음.

3단계: 샌드박스 비활성화로 원격 코드 실행

  • 창의 webPreferences에 sandbox: true가 설정돼 있지 않아 렌더러가 Chromium 샌드박스 밖에서 실행됨.
  • 샌드박스가 없으면 렌더러의 V8 익스플로잇이 피해자 기기의 완전한 원격 코드 실행(RCE)으로 이어질 수 있음.
  • 이 글에서는 해당 익스플로잇 체인을 자세히 설명하지 않지만, Discord에서 같은 공격 유형을 사용한 사례를 공개함: [Discord Desktop 원격 코드 실행 전체 분석](Remote Code Execution on Discord Desktop).
  • Discord RCE 영상에서는 Electron 앱 안에서 리버스 셸을 실행하는 장면을 보여주며, 같은 공격이 Cluely에도 적용될 수 있다고 설명함.
  • will-navigate 처리기 누락은 화면·오디오 유출로 이어지는 쉬운 경로를 제공하고, V8 익스플로잇은 완전한 원격 코드 실행으로 이어질 수 있음.

진입점으로서의 프롬프트 인젝션

  • 실제 공격에는 회의 중인 사용자의 Cluely 창에 악성 링크가 렌더링되도록 해야 함. 간접 프롬프트 인젝션은 이를 달성하는 방법 중 하나임.
  • 예를 들어 면접에서 면접관이 제시한 과제나 질문에 조작된 프롬프트 인젝션을 넣어 AI가 https://attacker.com/exploit로 연결되는 링크를 표시하게 할 수 있음.
  • 사용자가 이를 과제의 일부로 생각해 클릭하면 Cluely 앱 전체가 악성 페이지로 이동하고 익스플로잇이 실행됨.

익스플로잇

  • 제시된 개념 증명(PoC)은 페이지가 Cluely 안에서 로드될 때 화면을 캡처하고 10초 동안 오디오를 녹음함.
  • PoC는 페이지 로드 시 capture-screenshot IPC를 호출해 화면 캡처를 가져오고, mac-set-native-recorder-enabled 채널로 녹음을 시작한 뒤 10초 후 중지함.
  • 녹음 데이터는 24kHz, 모노, 16비트 PCM을 WAV 형식으로 변환해 페이지에 재생 가능한 오디오로 표시함.
  • 해당 페이지가 Cluely 안에서 로드되면 window.electron.ipcRenderer 브리지를 사용할 수 있음. 화면 캡처와 오디오 녹음은 별도의 사용자 확인이나 권한 대화상자 없이 수행됨.

영향

  • 악성 링크를 AI가 표시하도록 유도하고 사용자가 클릭하게 만들 수 있다면 모든 Cluely 사용자가 취약한 상태였음.
  • 공격자는 다음 작업을 수행할 수 있음.
  • 샌드박스가 없는 렌더러에서 V8 익스플로잇을 사용해 피해자 기기에서 셸을 확보하고, 백도어 설치·파일 유출·재부팅 후 지속성을 포함한 작업 수행
  • 민감한 문서, 자격 증명, 사적인 대화가 포함될 수 있는 사용자 화면 전체 캡처
  • 회의, 면접, 주변 대화가 포함된 시스템 오디오 녹음
  • Cluely를 은밀한 감시 도구로 바꾸는 마이크 모니터링
  • V8 익스플로잇을 사용하지 않아도 노출된 IPC 브리지만으로 화면과 마이크에 접근할 수 있음.
  • 사용자가 알아채지 못하도록 돕는 앱이 사용자를 감시하거나 기기 전체를 장악하는 실제 악성코드로 바뀔 수 있다는 점이 역설임.

근본 원인

  • 문제는 서로 결합된 세 가지임.
  • will-navigate 처리기 누락: 메인 창이 임의 URL로 이동하도록 허용함. 이벤트를 가로채 차단하거나 시스템 브라우저에서 URL을 열도록 처리하는 것이 해결책임.
  • 지나치게 허용적인 IPC 브리지: 프리로드가 채널 필터링 없이 send, invoke, on을 노출함. 렌더러가 정당하게 사용할 IPC 채널만 허용 목록에 넣어야 함.
  • 샌드박스 비활성화로 인한 RCE 위험: 렌더러가 샌드박스 없이 실행됨. 탐색 차단 누락과 결합하면 V8 익스플로잇을 통한 완전한 원격 코드 실행 경로가 됨. 이로 인해 취약점은 데이터 유출을 넘어 시스템 전체 침해로 확대됨.

공개 및 타임라인

  • 2025년 7월에 취약점을 발견함. 당시 Cluely에는 취약점 공개 제보 프로그램이 없었음.
  • 여러 경로로 연락을 시도해 결국 접촉했으며, 문제는 별도의 공개 인정이나 공로 표기 없이 조용히 패치됨.
  • AI 스타트업은 연구자가 버그를 신고할 수 있도록 취약점 공개 제보 프로그램을 운영하고, 제보를 인정과 선의로 다뤄야 한다고 강조함.
  • AI 에이전트를 만드는 기업이 늘고 있으며, 이들 에이전트는 화면, 마이크, 파일, 클립보드 등 기기에 폭넓게 접근할 수 있음. 출처가 불분명한 소프트웨어를 설치하지 말라는 경고도 덧붙임.
  • 이전에 조사한 제품으로 Windsurf, Perplexity Comet, OpenAI Atlas, Google Antigravity를 언급함.

소개

  • 연구팀의 자체 소개에 따르면 구성원은 상위권 CTF 경쟁자, DEF CON 발표 연구자, 버그 바운티 헌터이며 브라우저, 운영체제, 모바일 앱, 데스크톱 소프트웨어, 대형 웹 플랫폼을 조사해 왔음.
  • 해당 전문성을 Hacktron에 적용해 AI 에이전트와 협력하고 소프트웨어 생명주기의 각 단계에 공격 보안 역량을 제공한다고 설명함.
  • Hacktron 관련 링크: hacktron.ai, 문의 이메일, 문의 페이지.
  • Cluely, Cursor, Windsurf, Perplexity Comet, OpenAI Atlas, Google Antigravity 등을 조사했으며, 공격자가 먼저 발견하기 전에 에이전트 시스템을 보호하는 팀과 협력한다고 밝힘.