GitLost, 공개 이슈 하나로 private repo를 건드린 AI agent 취약점
Original: GitLost: We Tricked GitHub's AI Agent into Leaking Private Repos View original →
Noma Security가 공개한 GitLost는 AI agent를 GitHub Actions와 붙일 때 생기는 권한 경계 문제를 정면으로 건드린다. 공격자는 같은 조직의 공개 저장소에 조작된 GitHub Issue를 남기고, agent가 그 내용을 업무 지시로 읽게 만든다. 연구진의 설명대로라면 agent는 공개 입력을 처리하는 과정에서 private repository의 정보를 끌어와 외부로 내보낼 수 있었다.
흥미로운 대목은 취약점이 단순한 prompt injection 데모에 머물지 않는다는 점이다. agent가 읽는 텍스트, 호출할 수 있는 도구, 조직 단위로 부여된 저장소 권한이 한 흐름 안에 묶이면 전통적인 CI 보안 사고와 비슷한 결과가 나온다. 비밀 값을 가진 작업을 신뢰할 수 없는 PR에서 실행하면 위험하듯, private code 접근권을 가진 agent가 공개 이슈를 그대로 믿으면 데이터가 빠져나갈 수 있다.
커뮤니티 논점은 “GitHub의 버그인가, 잘못된 권한 설정인가”로 갈렸다. 일부는 public repo 이벤트가 private repo 권한을 가진 agent를 움직일 수 있다는 구조 자체를 문제로 봤고, 다른 쪽은 민감한 접근권을 가진 자동화가 공개 입력을 읽도록 구성한 책임을 더 크게 봤다. 어느 쪽이든 결론은 비슷하다. LLM에게 보안 경계를 맡기는 대신, agent의 토큰 범위와 도구 호출 권한을 입력 출처별로 나눠야 한다.
GitLost가 남기는 실무적 메시지는 분명하다. agent workflow는 편의 기능이 아니라 권한을 가진 실행 주체다. 공개 이슈, 댓글, 문서, 로그처럼 외부 사용자가 쓸 수 있는 텍스트는 명령이 아니라 데이터로 격리해야 하며, private repo나 secret에 접근하는 단계는 별도의 승인과 최소 권한 정책을 가져야 한다.
Related Articles
334점짜리 HN 논쟁은 “사람 승인”이 보안 장치로 충분한가라는 오래된 질문을 AI agent 시대 버전으로 되살렸다.
AI 에이전트가 경계를 벗어나면 의도와 무관하게 기록하고 공유하는 업계 규칙이 구체화됐다. Nvidia·Cisco·CrowdStrike 등이 참여한 120개 이상 조직의 연합은 노출 고객 통지 72시간, 비공개 초기 보고 4영업일, 잠정 공개 보고 30일을 제안했다.
GitHub Copilot Autofix가 안전한 입력 처리 코드를 직접 문자열 확장으로 바꾸면서 Snowflake 내부 Jira 자격증명이 노출됐다. Wiz의 자율 보안 에이전트는 취약점이 생긴 지 5일 만에 공격을 재현했고, Snowflake는 신고 당일 워크플로를 고쳤다.