- 공격자는 Salesforce의 Web-to-Lead 공개 양식에 숨은 지시를 넣어 리드를 등록한다. 이 리드는 CRM에 그대로 저장된다.
- Agentforce 에이전트가 업무 중 리드를 처리하면 지시가 실행되어 회사명, 거래 규모 등 CRM 필드를 조회하고, DNS 기반 기법으로 Trusted URLs 마스킹을 우회해 외부로 보냈다.
- 에이전트는 Slack에서 자신의 이름으로 정교한 피싱 메시지를 보내는 데에도 악용될 수 있었다.
- Zenity는 6월 제보했고 Salesforce는 8월 18일 우회 문제를 수정했다. Salesforce는 고객 대상 악용 증거가 없다고 밝혔다.
1.개요
Salesforce Agentforce는 CRM 데이터를 다루는 업무 자동화 에이전트다. 영업 리드를 분류하고, 고객 정보를 조회하고, 사내 메신저로 결과를 알린다. SalesBleed는 이 업무 흐름 자체를 공격 경로로 바꿨다. Zenity는 이 패턴이 Agentforce에 국한되지 않으며, 신뢰할 수 없는 외부 입력을 처리하면서 풍부한 콘텐츠를 렌더링하고 백엔드 데이터에 접근하는 모든 에이전트에 적용된다고 강조했다.
2.공격 구성
| 구성 요소 | 내용 |
|---|---|
| Web-to-Lead 양식의 프롬프트 인젝션 | 외부인이 제출할 수 있는 공개 양식에 숨은 지시를 넣는다 |
| 리드 내용에 대한 에이전트의 신뢰 | 에이전트가 신뢰할 수 없는 리드의 링크와 이미지를 렌더링했다 |
| 민감한 도구에 대한 에이전트 접근 | 에이전트의 권한으로 CRM 데이터를 조회할 수 있었다 |
3.분석: 업무 에이전트의 '치명적 세 요소'
보안 연구자들은 비공개 데이터 접근, 신뢰할 수 없는 콘텐츠 노출, 외부 통신 능력이 한 에이전트에 모이는 상태를 '치명적 세 요소(lethal trifecta)'라 부른다. 세 요소가 갖춰지면 프롬프트 인젝션은 곧 데이터 유출이 된다. SalesBleed는 이 조건이 기업 업무 에이전트에서 기본 구성으로 성립함을 보여 줬다. 리드 양식은 외부인에게 열려 있어야 하고, 에이전트는 CRM을 읽어야 하며, 결과를 어딘가로 전달해야 한다.
방어의 관점에서 주목할 점은 Salesforce가 이미 Trusted URLs라는 출구 통제를 갖추고 있었다는 사실이다. 공격자는 이를 DNS 질의라는 다른 출구로 우회했다. 출구 통제가 목적지 목록에만 의존하면, 목록이 다루지 않는 통로가 남는다. 판정에는 목적지뿐 아니라 어떤 데이터가 얼마나 나가는지가 함께 반영되어야 한다.
4.위협 분류 매핑
이 사건의 공격 단계를 OWASP 에이전트 애플리케이션 Top 10(2026)과 MITRE ATLAS 기법에 대응시키면 다음과 같다. GuardTrail은 판정 결과에 같은 분류의 태그를 붙여 기록하고, SIEM으로 내보낼 때 함께 전달한다.
| 체계 | 항목 | 이 사건에서 |
|---|---|---|
| OWASP ASI | ASI01 목표 탈취 | 리드에 숨긴 지시가 에이전트의 업무를 바꿨다 |
| OWASP ASI | ASI02 도구 오용 | CRM 조회 도구가 유출에 쓰였다 |
| MITRE ATLAS | AML.T0051.001 LLM Prompt Injection: Indirect | 공개 웹 양식을 통한 간접 프롬프트 인젝션 |
| MITRE ATLAS | AML.T0086 Exfiltration via AI Agent Tool Invocation | DNS 기반 CRM 데이터 유출 |
5.젠아이랩스 GuardTrail의 대응
젠아이랩스(GenAI Labs) GuardTrail은 AI 에이전트의 도구 호출을 실행 직전에 가로채 기록·판정·차단하는 Agent EDR이다. 개발자 PC의 코딩 에이전트(Claude Code 훅, stdio 래퍼)와 사내 MCP 서버(게이트웨이)에 설치되며, 차단 판정은 언어 모델이 아닌 결정적 정책으로 내린다. 제품 소개 · 위협 차단 · 도입 방식
GuardTrail은 조직의 에이전트가 MCP로 CRM과 메신저, 외부 서비스에 접근할 때 그 호출을 실행 직전에 판정한다.
- 데이터 분류와 목적지를 함께 판정한다. 도구 인자와 결과에서 개인정보와 기밀 데이터를 분류하고, 조직 밖 목적지로 향하는 호출이면 고객 정책으로 차단하거나 승인 대상으로 지정한다.
- 세션 단위 반출량을 제한한다. 고객 정책의
volume.min_records_out조건은 같은 세션에서 이미 외부로 나간 데이터 건수에 이번 호출을 더해 판정한다. 분할 전송 방식의 유출도 누적 건수로 탐지한다. - 조회 후 전송 순서를 분석한다. 같은 세션에서 고객 데이터를 조회한 뒤 외부로 전송하는 흐름은 위험 점수의 순서 신호로 반영된다.
- 에이전트별로 권한을 나눈다. 정책의
agent조건으로 외부 입력을 처리하는 에이전트에서 고객 데이터 내보내기 도구를 금지할 수 있다. 치명적 세 요소가 한 에이전트에 모이지 않게 하는 방식이다.
고객 정책 예시
외부 입력을 처리하는 리드 에이전트(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.점검 방법
- 입력 경로 점검: Web-to-Lead, 문의 양식, 지원 메일처럼 외부인이 쓸 수 있는 데이터를 처리하는 에이전트를 목록화한다.
- 리드 내용 점검: 최근 리드의 설명 필드에서 지시문 형태의 문장, 숨긴 텍스트, 이미지·링크 마크다운을 검색한다.
- 출구 점검: 에이전트 실행 환경에서 비정상적으로 긴 하위 도메인으로 향하는 DNS 질의를 확인한다.
7.권고 사항
- 외부인이 쓸 수 있는 입력(웹 양식, 문의, 메일)을 처리하는 에이전트를 목록화한다.
- 이 에이전트에서는 CRM 조회 권한과 외부 전송 수단을 분리한다.
- 에이전트 출력에서 링크와 이미지 렌더링을 제한하고, DNS 질의를 포함한 출구 통신을 감시한다.
- 세션 단위 데이터 반출량에 상한을 둔다.
참고 문헌
- Infosecurity Magazine, Zero-Click Vulnerabilities in Salesforce Agentforce Expose Wider AI Agent Risk. infosecurity-magazine.com
- DIGIT, Salesforce Agentforce bugs exposed wider AI agent risk, research finds. digit.fyi
관련 제품 · 보안 권고
- Salesforce Agentforce. salesforce.com
- Zenity Labs. labs.zenity.io
- 젠아이랩스 GuardTrail. guardtrail.gensapps.com · 표준 커버리지
수치와 경위는 각 출처가 공개한 내용을 따랐다. 접근 확인 2026-09-25.