SHA 핀닝의 위안이 되는 거짓말
GitHub Actions의 SHA 핀닝은 일반적으로 의존성의 불변성을 보장한다고 알려져 있으나, 실제로는 커밋 SHA가 참조하는 저장소 소속 여부를 검증하지 않아 보안상 큰 허점이 존재합니다.
공격자는 포크한 저장소에서 악성 코드를 포함한 커밋을 만들어, 원본 저장소 이름을 그대로 유지한 채 SHA만 변경하는 방식으로 악성 워크플로우를 주입할 수 있으며, GitHub는 이를 구분하지 않고 실행합니다.
이는 기존에 권장되던 태그 대신 SHA 핀닝을 사용하는 보안 관행이 오히려 **신뢰를 과도하게 부여하는 ‘안전한 거짓말’**임을 보여주며, 단순히 SHA를 사용하는 것만으로는 공급망 공격을 방어하기에 불충분하다는 점을 시사합니다.
따라서, SHA 핀닝과 함께 SHA가 올바른 저장소에 속하는지 검증하는 출처 확인(provenance check)과 태그 불변성 강제 등의 추가적인 보안 조치가 필요하며, 인간의 실수를 줄이기 위한 체계적인 검토가 병행되어야 합니다.
이 사례는 소프트웨어 공급망의 취약성과, 자동화된 워크플로우에서 제3자 코드 실행 시 발생하는 심각한 보안 리스크를 명확히 드러냅니다.
