핵심 요약
- Rust의 코드 검사 도구인 Miri가 모든 환경변수를 target 폴더에 저장하면서, CI 캐시를 통해 외부 PR 기여자에게 시크릿이 유출될 수 있는 취약점이 발견되었습니다.
- 공격자가 캐시된 target 폴더에서 시크릿을 빼낸 뒤 새 커밋을 푸시해 흔적을 지우면 탐지조차 어렵다는 점에서 위험성이 제기되었습니다.
- Rust 팀은 필수 Cargo 환경변수 외 저장을 차단하는 패치를 배포하고 취약 저장소 관리자들에게 경고 조치를 완료했습니다.
요약 Rust의 미정의 동작(UB) 검사 도구인 Miri와 GitHub Actions의 캐시 기능이 맞물리면서 환경변수에 포함된 시크릿 키나 토큰이 외부로 유출될 수 있는 보안 취약점이 보고되었습니다.
발표에 따르면 `cargo miri`를 실행할 때 빌드 간 필요한 환경변수를 유지하기 위해 모든 환경변수를 `target/` 폴더 내에 저장하는 동작 방식이 원인이었습니다. 단독으로는 치명적이지 않을 수 있지만, CI 빌드 속도를 높이기 위해 `target/` 디렉터리를 캐싱하는 GitHub Actions 설정과 결합되면 심각한 문제가 발생합니다. 메인 브랜치에서 실행된 CI는 캐시에 데이터를 쓰고, 외부 기여자의 풀 리퀘스트(PR)는 이 캐시를 읽을 수 있는데, 과거에 커밋을 승인받은 적이 있는 기여자가 악의적인 PR을 올려 캐시된 `target/`에서 시크릿을 탈취할 수 있는 구조였기 때문입니다. 특히 공격자가 새 커밋을 덮어씌워 흔적을 감추면 GitHub UI 특성상 이를 탐지하기도 어렵습니다.
Rust 보안팀은 단기 조치로 Miri가 `CARGO_*`(토큰 제외) 및 `OUT_DIR` 환경변수만 저장하도록 제한하는 패치를 적용했으며, 장기적으로는 더 안전한 환경변수 전달 방식을 모색할 계획입니다. 아울러 OpenAI의 지원을 받아 GitHub 전체 저장소를 스캔한 결과 직접적인 영향이 확인된 1개 저장소와 주의가 필요한 7개 저장소 관리자에게 연락을 취했다고 밝혔습니다. Miri를 사용하는 프로젝트는 캐시를 비우고 유출 가능성이 있는 시크릿을 재발급받을 것이 권장됩니다.
Sponsored · 광고