GitLost: GitHub AI 에이전트를 속여 비공개 저장소 유출

3 hours ago 1
  • Noma Labs는 GitHub Agentic Workflows에서 간접 프롬프트 인젝션 취약점 GitLost를 발견했으며, 공개 저장소 이슈만으로 같은 조직의 비공개 저장소 데이터를 공개 댓글에 노출시킬 수 있었음
  • 이 기능은 Markdown 워크플로를 YAML Actions 파일로 컴파일하고, Claude 또는 GitHub Copilot 기반 AI 에이전트가 이슈를 읽고 도구를 호출하며 조직 내 저장소에 접근하는 구조임
  • 취약한 워크플로는 issues.assigned 이벤트에서 이슈의 TitleBody를 읽고 add-comment로 응답했으며, 공개·비공개 저장소 읽기 권한을 가진 상태였음
  • 공격자는 코드, 접근 권한, 자격 증명 없이 공개 저장소에 그럴듯한 이슈를 열기만 하면 됐고, 테스트에서는 poc와 testlocal의 README.md 내용이 공개 이슈 댓글에 게시됨
  • GitHub의 가드레일은 “Additionally” 변형에서 의도대로 막지 못했고, 에이전트형 AI에서는 컨텍스트 창 자체를 공격 표면으로 보고 사용자 제어 콘텐츠를 신뢰된 지시문과 분리해야 함

GitLost가 노린 신뢰 경계

  • Noma Labs는 GitHub의 새 Agentic Workflows에서 GitLost라는 취약점을 발견함
  • 인증되지 않은 공격자가 같은 조직의 공개 저장소에 조작된 GitHub Issue를 게시하면, 에이전트가 조직 내 비공개 저장소 데이터를 가져오도록 유도될 수 있었음
  • 공격 방식은 AI 에이전트가 읽는 콘텐츠 안에 악성 지시를 숨기는 간접 프롬프트 인젝션에 해당함
  • 운영자가 의도한 지시보다 공격자가 숨긴 지시가 우선 처리되면, 비공개 데이터가 누구나 볼 수 있는 공개 이슈 댓글로 노출될 수 있음

GitHub Agentic Workflows의 동작 방식

  • GitHub Agentic Workflows는 팀이 저장소 자동화를 자연어로 작성할 수 있게 함
  • 워크플로는 Markdown .md 파일로 작성되고, YAML 형식의 GitHub Actions .yml 파일로 컴파일됨
  • 실행 시 Claude 또는 GitHub Copilot 기반 AI 에이전트가 설정된 권한 안에서 작업함
    • GitHub Issue 읽기
    • 도구 호출
    • 조직 내 다른 저장소 접근

취약한 워크플로 조건

  • Noma Labs가 확인한 취약한 설정은 공개 이슈와 에이전트 권한이 결합될 때 문제가 됨
    • GitHub의 issues.assigned 이벤트에서 워크플로 트리거
    • 이슈의 TitleBody 읽기
    • add-comment 도구로 댓글 게시
    • 조직 내 다른 저장소 읽기 권한 보유
      • 공개 저장소
      • 비공개 저장소
  • 공격자에게 별도의 코드 작성, 접근 권한, 자격 증명은 필요 없었음
  • 필요한 조건은 GitHub Agentic Workflow를 쓰는 조직의 공개 저장소에 이슈를 여는 것뿐이었음

공격 흐름

  • 연구진은 고객 미팅 이후 VP Sales가 요청하는 것처럼 보이는 그럴듯한 GitHub Issue를 작성함
  • 이슈가 할당되자 워크플로 액션이 트리거됐고, 테스트에서는 다른 GitHub workflow action에서도 같은 방식으로 동작함
  • GitHub 자동화가 이슈를 할당한 뒤, 이벤트로 실행된 워크플로가 에이전트에게 저장소 내용을 가져오게 함
  • 에이전트는 다음 저장소의 README.md 내용을 가져오도록 유도됨
    • poc 공개 저장소
    • testlocal 비공개 저장소
  • 이후 GitHub 에이전트가 해당 내용을 공개 저장소의 이슈 댓글로 게시해 누구나 읽을 수 있는 상태가 됨

“Additionally”로 가드레일 우회

  • GitHub에는 이 시나리오를 막기 위한 제한적 가드레일이 있었음
  • Noma Labs는 공격자처럼 여러 변형을 반복 테스트함
  • “Additionally”라는 키워드를 추가하자 모델이 거부하지 않고 출력을 재구성하는 의도치 않은 동작이 발생함
  • 이 우회로 GitHub의 가드레일은 의도대로 작동하지 않았고, 데이터 유출을 막지 못함

PoC와 노출된 데이터

에이전트형 AI에서 달라지는 보안 전제

  • 에이전트의 컨텍스트 창은 작업 공간인 동시에 공격 표면이 됨
  • 에이전트가 읽는 콘텐츠는 모두 무기화될 수 있음
    • 이슈
    • Pull Request
    • 댓글
    • 파일
  • 전통적인 보안 모델은 신뢰 경계가 코드로 강제된다고 가정하는 경우가 많음
  • 에이전트형 시스템에서는 신뢰 경계 일부가 모델의 동작에 의해 강제됨
  • 모델은 본질적으로 지시를 따르기 때문에, 프롬프트 인젝션은 에이전트형 AI에서 SQL 인젝션이 웹 애플리케이션에 가졌던 것과 같은 범주형 취약점이 됨
  • 이 취약점 유형에는 체계적인 전략과 방어가 필요함

권장 방어책과 공개 절차

  • 사용자 제어 콘텐츠를 AI 에이전트의 신뢰된 지시 입력으로 취급하지 않아야 함
  • 에이전트 권한은 필요한 최소 범위로 제한해야 함
    • 여러 저장소에 접근할 수 있는 에이전트는 특히 가치 높은 공격 대상이 됨
  • 이슈 콘텐츠에 응답하는 경우처럼, 에이전트가 공개적으로 게시할 수 있는 내용을 제한해야 함
  • 사용자 입력을 모델에 전달하기 전에 지시문 컨텍스트에서 정제하거나 격리해야 함
  • GitLost는 GitHub에 책임 있게 공개됐고, 취약점 세부사항은 GitHub가 인지한 상태에서 공유됨
Read Entire Article