GitLost는 Noma Labs가 공개한 GitHub Agentic Workflows 프롬프트 인젝션 사례다. 공격자는 public repository의 issue 본문에 숨긴 지시를 넣었고, GitHub AI 에이전트가 같은 조직의 private repository 내용을 읽어 public issue 댓글로 노출했다.
공격 조건
취약한 workflow는 다음 특성을 가졌다.
issues.assigned같은 issue 이벤트로 실행- issue title/body를 읽음
- 댓글 작성 도구를 사용할 수 있음
- 같은 조직의 다른 repository에 read 권한을 가짐
- AI agent가 issue 본문을 신뢰해야 할 지시와 낮은 권한 데이터로 분리하지 못함
공격자는 계정 권한이나 코드 실행 권한 없이 public repo에 issue를 열기만 하면 됐다. issue가 자동 할당되자 agentic workflow가 실행됐고, agent가 private repository의 README를 가져와 public 댓글에 붙였다.
핵심 원인
문제는 prompt-injection-role-confusion에서 설명하는 역할 혼동과 같다. issue 본문은 외부 사용자가 제어하는 낮은 권한 데이터다. 그러나 에이전트는 그 텍스트를 작업 지시로 받아들였고, 자신이 가진 repository read 권한과 comment 권한을 조합해 데이터를 외부로 보냈다.
전통적인 보안 모델에서는 권한 경계가 코드로 강제된다. 에이전트 시스템에서는 모델이 읽은 텍스트가 실행 계획에 영향을 주므로, 컨텍스트 창 자체가 공격 표면이 된다.
방어 원칙
| 위험 | 대응 |
|---|---|
| 사용자 입력을 지시로 해석 | issue, PR, comment, file content를 untrusted data로 태깅 |
| 과도한 repository 권한 | workflow별 최소 권한, cross-repo read 제한 |
| 공개 출력 채널 | agent가 외부로 게시할 수 있는 내용에 정책 검사 적용 |
| guardrail 우회 | 키워드 차단보다 정보 흐름 제어와 출력 DLP 적용 |
특히 “읽기 권한”과 “공개 댓글 작성 권한”이 동시에 있을 때 데이터 유출 경로가 열린다. 에이전트 권한은 사람 계정보다 더 좁게 설계해야 한다.
참고 자료
- GitLost: How We Tricked GitHub’s AI Agent into Leaking Private Repos — Noma Security (2026-07-06)