보안업체 위즈가 스노우플레이크 공개 저장소의 워크플로에 이슈 제목으로 명령을 끼워 넣어 지라 토큰을 빼냈고, 그 토큰으로 엔지니어링·보안 규정 준수·버그 바운티 지라 프로젝트를 읽었어요. 그런데 커밋 이력을 열어 보면 코파일럿 자동 수정(Copilot Autofix)이 공동저자로 붙은 커밋은 다른 파일에서 ${{ }} 를 env 로 빼낸, 보안 검사가 지적한 대로 고친 쪽이에요 — 취약한 줄은 18일 뒤에 사람이 AI 표기 없이 넣었어요. 두 변경이 스쿼시 병합으로 한 커밋에 합쳐지면서 공동저자 표기만 남아, 이력상 코파일럿이 그 줄을 쓴 것처럼 보였어요.
용어 풀이
- env
- 깃허브 액션 워크플로에서 셸에 넘길 환경변수를 따로 선언하는 자리
- zizmor
- 깃허브 액션 워크플로 전용 정적 검사 도구. 명령 끼워 넣기 위험을 잡아낸다
- actionlint
- 깃허브 액션 워크플로의 문법·보안 문제를 검사하는 도구
- 스쿼시 병합
- 브랜치의 커밋 여러 개를 한 커밋으로 합쳐 본줄기에 넣는 방식. 공동저자 표기도 함께 합쳐진다
운영자 인사이트
내 저장소에서 run: 안에 ${{ }} 가 그대로 박힌 워크플로부터 훑어보세요 — 값은 env 로 넘기고 셸에선 따옴표 씌운 변수로 읽는 게 정석이고, zizmor·actionlint 를 자동 검사에 걸면 이번 줄은 그대로 잡혀요. 그리고 스쿼시 병합은 공동저자 표기를 뭉뚱그리니, 누가 썼는지는 병합 커밋 말고 원래 커밋에서 확인해야 해요.
여러 관점으로 보기
- 취약한 줄을 넣은 커밋 문제의 echo '${{ github.event.issue.title }}' 줄은 2025년 8월 25일 사람이 넣었고 AI 공동저자 표기가 없어요 GitHub
- 코파일럿이 실제로 한 일 코파일럿 자동 수정이 붙은 커밋은 다른 파일에서 ${{ }} 를 env 로 옮긴, 권장 방식대로 고친 쪽이에요 GitHub
- 매체 정정 더 레지스터도 하루 만에 '사람이 넣었을 수 있고 자동 수정이 그저 못 잡은 것'이라고 고쳐 붙였어요 The Register
- 해커뉴스 반응 댓글에선 진짜 원인은 액션의 ${{ }} 문자열 끼워 넣기라며 zizmor·actionlint 를 걸라는 조언이 모였어요 Hacker News