FlawOpen

flawopen.com/AI Security/ghostjacking-ai-agent-poisoned-observability-logs-august-2026

● FlawOpen 매핑: CWE-1427 · 편집상 심각도: 보통
보안 연구 · FlawOpen

GhostJacking: 로그와 AI 에이전트

연구는 조작된 텔레메트리가 연동 에이전트에 영향을 주는 방식을 보여 줍니다. CVE나 확인된 피해자는 없습니다.[1], [2]

💡 알기 쉬운 설명 (ELI5)

접수 담당자가 수상한 배송을 막으면서 발신자의 메모를 사건 로그에 그대로 옮겨 적었다고 생각해 보세요. 나중에 담당자는 실제 티켓 번호와 테스트 구성의 DNS 정책에서 실제로 확인된 누락을 확인한 뒤, 같은 메모에 적힌 공격자 지정 주소까지 믿고 브라우저와 이메일에 회사 서비스의 위치를 알려 주는 공개 주소록(DNS)을 바꿉니다. 로그는 증거이지 변경 권한이 아닙니다. 별도의 정책 검사와 승인이 변경을 통제해야 합니다.[1]

핵심 개념 및 용어

GhostJacking
Tenet Security가 관측 가능성 이벤트의 공격자 제어 콘텐츠가 해당 도구와 연결된 AI 에이전트에 영향을 주는 시연에 붙인 이름입니다. 연구 명칭이며 CVE가 아닙니다.[1], [2]
간접 프롬프트 인젝션
사용자가 직접 제공하는 대신 모델이 검토하도록 받은 데이터에 삽입된 지시입니다.[1], [2], [4]
관측 가능성 이벤트
시스템 활동을 설명하는 로그, 경보, 추적 또는 오류 기록입니다. 일부 필드에는 외부 요청에서 온 텍스트가 들어갈 수 있습니다.[1], [2]
독립 권한 부여
모델 외부에서 도구가 중요한 동작을 하기 전에 주체, 대상, 요청된 변경 사항, 승인을 검증하는 정책 확인입니다.[2], [5]
CWE-1427
LLM 프롬프트 입력을 부적절하게 무력화하는 MITRE 약점 분류입니다. FlawOpen의 개념적 매핑이며 Tenet, ngCERT 또는 CVE 레코드가 GhostJacking에 지정한 번호가 아닙니다.[4], [1], [2]
편집상 심각도
ngCERT 권고문은 위험과 피해를 높음으로 평가합니다. FlawOpen은 시연에 관련 연동과 변경 권한을 가진 에이전트가 필요하고 확인된 피해 조직이 없으므로 이 요약을 중간으로 평가합니다. 이는 편집상 등급이며 공급업체 점수가 아닙니다.[2], [1]

프레임워크 매핑

단계별 공격 실행 흐름

단계 1

에이전트에 조사 권한이 부여됩니다

Tenet의 연구는 Cloudflare, Datadog, Sentry 같은 도구에 연결된 개발 또는 운영 에이전트를 설명합니다. 중요한 전제는 에이전트가 외부 이벤트 콘텐츠를 읽고 기존 권한으로 중요한 작업을 수행할 수 있다는 점입니다.[1]

단계 2

요청이 증거로 기록됩니다

Tenet의 Cloudflare 시연에서는 WAF가 요청을 차단하지만 공격자가 제어한 요청 필드의 텍스트가 이벤트 기록에 남습니다. 차단된 요청도 나중에 에이전트가 읽을 신뢰할 수 없는 텍스트를 남길 수 있습니다.[1], [2]

단계 3

그럴듯한 텔레메트리가 명시적 지시 방어를 우회함

Tenet은 테스트에서 노골적인 명령은 거부되었다고 보고합니다. 성공한 Cloudflare 시연에서는 티켓 참조, 규정 준수 인용, 측정값이 포함된 구조화된 스캐너형 텔레메트리를 사용했습니다. 에이전트는 일부 주장을 확인한 뒤 공격자가 제어하는 미검증 DNS 값을 신뢰했습니다. 이는 연구자가 보고한 간접 프롬프트 인젝션 시연이며 실제 피해자 침해의 증거는 아닙니다.[1], [2]

단계 4

기존 권한이 영향으로 이어집니다

Tenet은 통제된 시연에서 연동된 Cloudflare 도구를 통해 에이전트가 DNS를 변경했다고 보고합니다. 결과는 에이전트 권한과 구성에 따라 달라지며 Cloudflare 자체가 침해되었거나 고객 시스템이 공격받았다는 증거는 아닙니다.[1]

단계 5

별도 정책 경계가 변경을 차단할 수 있습니다

애플리케이션은 모델의 제안을 신뢰할 수 없는 것으로 취급해야 합니다. 서버 측 권한 서비스는 정확한 리소스와 변경 사항을 독립적으로 확인하고, 필요한 경우 권한 있는 사람의 승인을 요구하며, 공급자 API를 호출하기 전에 결정을 기록해야 합니다.[2], [5]

소스 코드 비교: 취약한 구현 vs 보안 패치

이 코드는 애플리케이션을 설명하기 위한 예시이며 언급한 제품의 취약하거나 수정된 실제 소스 코드가 아닙니다. 취약한 형태는 신뢰할 수 없는 이벤트 텍스트를 읽는 에이전트에 변경 도구를 직접 제공합니다. 보호 형태는 제안과 실행을 분리합니다. 독립 서비스가 주체와 정확한 변경 사항에 묶인 일회성 승인을 사용하고 공급자를 호출하기 전에 정책을 적용합니다. 주체 ID는 호출자가 제어하는 필드가 아니라 인증된 서버 컨텍스트에서 가져오며 모델이 이를 선택할 수 없습니다. 프롬프트 지시만으로는 권한 부여가 되지 않습니다. 실제 코드에서는 스키마, 테넌트 및 리소스 소유권, 승인 만료, 재사용 방지, 감사 데이터의 영속성, 공급자 오류도 검증해야 합니다.[1], [2], [5]

취약한 구현
// 안전하지 않은 연동의 예시이며 Cloudflare, Datadog, Sentry, Tenet의 소스 코드가 아닙니다.
async function investigate(event: EventRecord) {
  return agent.run({
    context: event.message,
    tools: [cloudflare.updateDnsRecord]
  });
}
보안 강화 패치
// 제어 경계의 예시입니다. 모델은 제안할 수 있지만 승인하거나 적용할 수 없습니다.
type DnsProposal = { zoneId: string; name: string; value: string };

async function proposeDnsChange(event: EventRecord): Promise<DnsProposal> {
  return agent.propose({ evidence: markUntrusted(event.message) });
}

async function applyDnsChange(
  proposal: DnsProposal,
  approvalId: string
) {
  const actorId = auth.requireAuthenticatedActorId();
  const validatedProposal = DnsProposalSchema.parse(proposal);
  const approval = await approvals.consumeOnce(approvalId, { actorId });
  if (!approval || approval.actorId !== actorId ||
      approval.zoneId !== validatedProposal.zoneId ||
      approval.name !== validatedProposal.name ||
      approval.value !== validatedProposal.value ||
      !policy.canChangeDns(actorId, validatedProposal.zoneId, validatedProposal.name)) {
    throw new Error('DNS change is not independently authorized');
  }
  // 변경 전에 권한 부여 결정을 기록할 수 없으면 작업을 거부합니다.
  await audit.record({ actorId, approvalId, action: 'dns-change', decision: 'authorized' });
  try {
    await cloudflare.updateDnsRecord(validatedProposal);
  } catch (error) {
    await audit.record({ actorId, approvalId, action: 'dns-change', outcome: 'provider-failed' });
    throw error;
  }
  await audit.record({ actorId, approvalId, action: 'dns-change', outcome: 'succeeded' });
}

엔지니어링 및 시스템 보안 강화 체크리스트

출처

← AI Security Directory →