GuardTrailby GenAI Labs · Agent EDR
자료실 · 이달의 이슈 · 2026년 9월
취약점 분석

SalesBleed: 공개 웹 양식 하나로 Salesforce Agentforce의 CRM 데이터를 유출한 제로클릭 공격

Zenity Labs가 9월 24일 공개한 SalesBleed는 Salesforce Agentforce의 취약점 세 가지를 연결한 공격이다. 외부인이 공개 웹 양식에 리드 정보를 한 번 제출하는 것만으로, 이후 에이전트가 정상 업무로 그 리드를 처리할 때 CRM 데이터가 외부로 유출됐다. 피해 조직 쪽의 클릭이나 자격증명 탈취는 필요하지 않았다.

핵심 요약
  • 공격자는 Salesforce의 Web-to-Lead 공개 양식에 숨은 지시를 넣어 리드를 등록한다. 이 리드는 CRM에 그대로 저장된다.
  • Agentforce 에이전트가 업무 중 리드를 처리하면 지시가 실행되어 회사명, 거래 규모 등 CRM 필드를 조회하고, DNS 기반 기법으로 Trusted URLs 마스킹을 우회해 외부로 보냈다.
  • 에이전트는 Slack에서 자신의 이름으로 정교한 피싱 메시지를 보내는 데에도 악용될 수 있었다.
  • Zenity는 6월 제보했고 Salesforce는 8월 18일 우회 문제를 수정했다. Salesforce는 고객 대상 악용 증거가 없다고 밝혔다.

1.개요

Salesforce Agentforce는 CRM 데이터를 다루는 업무 자동화 에이전트다. 영업 리드를 분류하고, 고객 정보를 조회하고, 사내 메신저로 결과를 알린다. SalesBleed는 이 업무 흐름 자체를 공격 경로로 바꿨다. Zenity는 이 패턴이 Agentforce에 국한되지 않으며, 신뢰할 수 없는 외부 입력을 처리하면서 풍부한 콘텐츠를 렌더링하고 백엔드 데이터에 접근하는 모든 에이전트에 적용된다고 강조했다.

SalesBleed 경과
2026-06 Zenity, Salesforce에 제보 2026-08-18 URL 마스킹 우회 수정 2026-09-24 Zenity 공개 2026-06 Zenity, Salesforce에 제보 2026-08-18 URL 마스킹 우회 수정 2026-09-24 Zenity 공개
Salesforce는 고객을 대상으로 한 악용 증거가 없다고 밝혔다.

2.공격 구성

구성 요소내용
Web-to-Lead 양식의 프롬프트 인젝션외부인이 제출할 수 있는 공개 양식에 숨은 지시를 넣는다
리드 내용에 대한 에이전트의 신뢰에이전트가 신뢰할 수 없는 리드의 링크와 이미지를 렌더링했다
민감한 도구에 대한 에이전트 접근에이전트의 권한으로 CRM 데이터를 조회할 수 있었다
SalesBleed 공격 흐름
공개 양식 제출 Web-to-Lead CRM에 리드 저장 정상 리드로 에이전트의 업무 처리 리드 분류·조회 숨은 지시 실행 에이전트 권한 CRM 데이터 조회 회사명·거래 규모 DNS 기반 유출 Trusted URLs 우회 공개 양식 제출 Web-to-Lead CRM에 리드 저장 정상 리드로 에이전트의 업무 처리 리드 분류·조회 숨은 지시 실행 에이전트 권한 CRM 데이터 조회 회사명·거래 규모 DNS 기반 유출 Trusted URLs 우회
피해 조직의 클릭이나 자격증명 탈취 없이 리드 제출만으로 성립했다.

3.분석: 업무 에이전트의 '치명적 세 요소'

보안 연구자들은 비공개 데이터 접근, 신뢰할 수 없는 콘텐츠 노출, 외부 통신 능력이 한 에이전트에 모이는 상태를 '치명적 세 요소(lethal trifecta)'라 부른다. 세 요소가 갖춰지면 프롬프트 인젝션은 곧 데이터 유출이 된다. SalesBleed는 이 조건이 기업 업무 에이전트에서 기본 구성으로 성립함을 보여 줬다. 리드 양식은 외부인에게 열려 있어야 하고, 에이전트는 CRM을 읽어야 하며, 결과를 어딘가로 전달해야 한다.

방어의 관점에서 주목할 점은 Salesforce가 이미 Trusted URLs라는 출구 통제를 갖추고 있었다는 사실이다. 공격자는 이를 DNS 질의라는 다른 출구로 우회했다. 출구 통제가 목적지 목록에만 의존하면, 목록이 다루지 않는 통로가 남는다. 판정에는 목적지뿐 아니라 어떤 데이터가 얼마나 나가는지가 함께 반영되어야 한다.

4.위협 분류 매핑

이 사건의 공격 단계를 OWASP 에이전트 애플리케이션 Top 10(2026)과 MITRE ATLAS 기법에 대응시키면 다음과 같다. GuardTrail은 판정 결과에 같은 분류의 태그를 붙여 기록하고, SIEM으로 내보낼 때 함께 전달한다.

체계항목이 사건에서
OWASP ASIASI01 목표 탈취리드에 숨긴 지시가 에이전트의 업무를 바꿨다
OWASP ASIASI02 도구 오용CRM 조회 도구가 유출에 쓰였다
MITRE ATLASAML.T0051.001 LLM Prompt Injection: Indirect공개 웹 양식을 통한 간접 프롬프트 인젝션
MITRE ATLASAML.T0086 Exfiltration via AI Agent Tool InvocationDNS 기반 CRM 데이터 유출

5.젠아이랩스 GuardTrail의 대응

젠아이랩스(GenAI Labs) GuardTrail은 AI 에이전트의 도구 호출을 실행 직전에 가로채 기록·판정·차단하는 Agent EDR이다. 개발자 PC의 코딩 에이전트(Claude Code 훅, stdio 래퍼)와 사내 MCP 서버(게이트웨이)에 설치되며, 차단 판정은 언어 모델이 아닌 결정적 정책으로 내린다. 제품 소개 · 위협 차단 · 도입 방식

GuardTrail은 조직의 에이전트가 MCP로 CRM과 메신저, 외부 서비스에 접근할 때 그 호출을 실행 직전에 판정한다.

  • 데이터 분류와 목적지를 함께 판정한다. 도구 인자와 결과에서 개인정보와 기밀 데이터를 분류하고, 조직 밖 목적지로 향하는 호출이면 고객 정책으로 차단하거나 승인 대상으로 지정한다.
  • 세션 단위 반출량을 제한한다. 고객 정책의 volume.min_records_out 조건은 같은 세션에서 이미 외부로 나간 데이터 건수에 이번 호출을 더해 판정한다. 분할 전송 방식의 유출도 누적 건수로 탐지한다.
  • 조회 후 전송 순서를 분석한다. 같은 세션에서 고객 데이터를 조회한 뒤 외부로 전송하는 흐름은 위험 점수의 순서 신호로 반영된다.
  • 에이전트별로 권한을 나눈다. 정책의 agent 조건으로 외부 입력을 처리하는 에이전트에서 고객 데이터 내보내기 도구를 금지할 수 있다. 치명적 세 요소가 한 에이전트에 모이지 않게 하는 방식이다.
젠아이랩스 GuardTrail 적용 구성: 업무 자동화 에이전트
입력 원천 공개 웹 양식 (리드 제출) 영업 담당자 요청 리드 처리 에이전트 도구 호출 생성 젠아이랩스 GuardTrail 훅 · stdio 래퍼 · MCP 게이트웨이 하드 정책 고객 정책 위험 점수(ATR) 관리자 승인 도구 · MCP 서버 CRM MCP 서버 메일 · 메신저 외부 웹 콘솔 · 감사 기록 · SIEM 차단 지점: 외부 입력 처리 에이전트의 고객 데이터 반출 공개 웹 양식 (리드 제출) 영업 담당자 요청 리드 처리 에이전트 도구 호출 생성 젠아이랩스 GuardTrail 하드·고객 정책 · 위험 점수 · 승인 CRM MCP 서버 메일 · 메신저 외부 웹 차단 지점: 외부 입력 처리 에이전트의 고객 데이터 반출
외부 입력을 처리하는 에이전트와 고객 데이터를 내보내는 도구를 정책으로 분리해 치명적 세 요소가 한 에이전트에 모이지 않게 한다.

고객 정책 예시

외부 입력을 처리하는 리드 에이전트(agent:lead-*)는 내보내기·메일·메신저 도구를 쓰지 못하게 하고, 개인정보가 조직 밖으로 향하는 호출도 차단한다.

policies:
  - id: lead-agent-no-export
    name: 리드 처리 에이전트의 고객 데이터 내보내기 금지
    effect: BLOCK
    mode: enforce
    failure_mode: fail_closed
    reason: 외부 입력을 처리하는 에이전트는 고객 데이터를 내보낼 수 없습니다.
    match:
      agent: ["agent:lead-*"]
      tool: ["*:export_*", "send_email", "*:post_message"]
  - id: lead-agent-pii-out
    name: 리드 처리 에이전트의 개인정보 외부 전송 차단
    effect: BLOCK
    mode: enforce
    failure_mode: fail_closed
    reason: 외부 입력을 처리하는 에이전트는 개인정보를 조직 밖으로 보낼 수 없습니다.
    match:
      agent: ["agent:lead-*"]
      data:
        contains_pii: true
      destination:
        external: true

판정 결과

리드 에이전트의 내보내기와 외부 메일 발송은 차단되고, 같은 메일이라도 영업 담당 에이전트의 호출은 기록 후 진행된다. 개인정보는 인자에서 분류되어 판정과 기록에 함께 쓰인다. 아래 표는 위 정책을 GuardTrail 정책 엔진에 적용하고 guardtrail policy test --mode enforce로 각 호출을 판정한 실제 결과다. 인자에 넣은 키와 토큰은 공개 문서의 예시 값이다.

도구 호출 · 에이전트판정정책·사유
export_leads {"fields": ["company", "deal_size"]}
agent:lead-triage · 내장 정책 + 고객 정책
차단lead-agent-no-export
외부 입력을 처리하는 에이전트는 고객 데이터를 내보낼 수 없습니다.
send_email {"to": "collect@example.net", "body": "담당자 연락처: kim.minsu@acme-co…
agent:lead-triage · 내장 정책 + 고객 정책
차단lead-agent-no-export
외부 입력을 처리하는 에이전트는 고객 데이터를 내보낼 수 없습니다.
send_email {"to": "collect@example.net", "body": "담당자 연락처: kim.minsu@acme-co…
agent:sales · 내장 정책 + 고객 정책
허용적용 정책 없음
기록 후 실행

6.점검 방법

  1. 입력 경로 점검: Web-to-Lead, 문의 양식, 지원 메일처럼 외부인이 쓸 수 있는 데이터를 처리하는 에이전트를 목록화한다.
  2. 리드 내용 점검: 최근 리드의 설명 필드에서 지시문 형태의 문장, 숨긴 텍스트, 이미지·링크 마크다운을 검색한다.
  3. 출구 점검: 에이전트 실행 환경에서 비정상적으로 긴 하위 도메인으로 향하는 DNS 질의를 확인한다.

7.권고 사항

  1. 외부인이 쓸 수 있는 입력(웹 양식, 문의, 메일)을 처리하는 에이전트를 목록화한다.
  2. 이 에이전트에서는 CRM 조회 권한과 외부 전송 수단을 분리한다.
  3. 에이전트 출력에서 링크와 이미지 렌더링을 제한하고, DNS 질의를 포함한 출구 통신을 감시한다.
  4. 세션 단위 데이터 반출량에 상한을 둔다.

참고 문헌

  1. Infosecurity Magazine, Zero-Click Vulnerabilities in Salesforce Agentforce Expose Wider AI Agent Risk. infosecurity-magazine.com
  2. DIGIT, Salesforce Agentforce bugs exposed wider AI agent risk, research finds. digit.fyi

관련 제품 · 보안 권고

수치와 경위는 각 출처가 공개한 내용을 따랐다. 접근 확인 2026-09-25.