원문 캡처 · theregister.com
원문 캡처 · theregister.com

Radware 연구진은 공개 GitHub 저장소 61곳에서 악성 페이로드가 담긴 이슈·풀 리퀘스트·댓글 등 83건을 확인했다. 공격자는 HTML 주석에 명령을 숨겨 CI/CD 워크플로를 실행시키고, 환경 변수와 인증 정보를 빼내려 한 것으로 연구진은 보고했다.

Radware 위협 헌터들에 따르면 악성 게시물 77건은 9월 1일 43분 동안 올라왔고 나머지 6건은 그 뒤 2분 안에 게시됐다. 연구진은 서로 다른 GitHub 계정 74개가 같은 유형의 페이로드를 비슷한 시간대에 같은 인프라를 통해 올린 점을 들어, 한 사람이 주도한 조직적 캠페인일 가능성이 있다고 봤다. 계정 다수는 정상적인 개발 이력이 있어 탈취됐을 가능성이 있다.

공격자는 이슈나 풀 리퀘스트, 댓글에 HTML 주석으로 악성 명령을 숨겼다. 페이지를 렌더링해 볼 때는 내용이 보이지 않지만, 저장소가 해당 이벤트에 반응하도록 설정돼 있으면 GitHub 이벤트가 워크플로를 자동으로 실행할 수 있다. 워크플로가 공격자가 관리하는 내용을 셸 코드에 직접 넣으면 숨겨진 명령이 실행돼 환경 변수를 수집하고 공격자 서버로 전송하려 한다.

연구진은 실제 실행 로그에서 악성 명령이 자동화 환경 안에서 실행된 증거를 두 사례에서 확인했다. 다만 공격자가 저장소 쓰기 권한을 얻었는지, 소스 코드를 변경했는지, 후속 소프트웨어를 침해했는지는 확정하지 못했다.

영향받은 저장소와 대응

10월 13일 기준 확인된 대상에는 AI 프레임워크, 보안 도구, 개발 인프라, 데이터베이스 등 여러 분야의 오픈소스 프로젝트가 포함됐다. Google LangExtract, Trivy, Brave 브라우저, MLflow도 대상이었다. 그 밖에 agno-agi/agno, ToolJet/ToolJet, QwenLM/qwen-code, discordjs/discord.js, cilium/cilium, dotnet/maui, Homebrew/homebrew-cask, github/docs 등이 보고됐다.

Radware 연구진은 영향을 받은 프로젝트의 유지관리자들에게 결과를 알렸다. 대부분의 저장소는 닫히거나 수정됐지만, 모든 저장소가 조치됐는지는 확인하지 못했다고 밝혔다. Radware의 연구 보고서에서 캠페인에 관한 내용을 확인할 수 있다.

연구진은 CI/CD 워크플로에 최소 권한 원칙을 적용하고, 외부 이벤트로 실행되는 워크플로와 높은 권한이 필요한 작업을 가능한 한 분리하라고 권고했다. 개발자는 외부에서 들어오는 내용을 신뢰할 수 없는 입력으로 취급하고, 워크플로에서 사용할 수 있는 비밀 정보와 환경 변수도 제한해야 한다.