GitHub Actions 전체 커밋 SHA 미고정

외부 액션을 검증한 전체 커밋 SHA로 고정해 참조 코드의 예기치 않은 변경을 줄이세요.

설명

GitHub Actions 워크플로에서 외부 액션을 태그나 브랜치로만 참조하면 같은 이름이 다른 커밋을 가리키도록 바뀔 수 있습니다. 같은 워크플로 설정이라도 실행 시점에 따라 검토하지 않은 액션 코드가 실행될 수 있습니다.

전체 길이 커밋 SHA는 액션 저장소에서 참조하는 코드를 고정합니다. 액션이 실행 중 내려받는 다른 의존성이나 워크플로 권한까지 안전하게 만드는 것은 아닙니다.

잠재적 영향

  • 외부 액션 저장소가 변경되면 검토하지 않은 코드가 CI에서 실행될 수 있습니다.
  • 태그 재지정이나 악의적 변경으로 공급망 공격에 노출될 수 있습니다.
  • 실행 결과가 시점에 따라 달라져 재현성과 감사 가능성이 떨어질 수 있습니다.

해결 방법

외부 액션의 uses: 참조를 검증한 전체 길이 커밋 SHA로 고정하세요. SHA가 원본 저장소의 검토한 버전에 속하는지 확인하고, 업데이트는 검증 후 새 SHA로 명시적으로 교체하세요. 워크플로 권한과 액션의 다른 의존성도 별도로 검토하세요.

예시

다음은 과거 액션 버전의 참조 형식을 비교하는 발췌입니다. 실제 사용에는 지원되는 버전을 검토하고 필요한 메시지 입력과 토큰 권한 등을 별도로 구성해야 합니다.

변경 전

yaml
name: ci
on:
  pull_request:

jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
      - name: Add comment
        uses: thollander/actions-comment-pull-request@v2

변경 후

yaml
name: ci
on:
  pull_request:

jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
      - name: Add comment
        uses: thollander/actions-comment-pull-request@b07c7f86be67002023e6cb13f57df3f21cdd3411

변경 후에는 태그 대신 특정 커밋을 참조합니다. 그 커밋의 코드가 안전한지 검토해야 하며, SHA 고정이 이후의 보안 업데이트를 자동으로 적용하지는 않습니다.

참조