GitHub Actions 비보안 명령 허용

GitHub Actions의 비보안 명령 허용 설정을 제거하고 환경 파일을 사용하세요.

설명

ACTIONS_ALLOW_UNSECURE_COMMANDS를 true로 설정하면 사용 중단된 set-env와 add-path 명령을 다시 허용합니다. 신뢰할 수 없는 입력이 작업의 표준 출력에 섞이면 공격자가 환경 변수나 PATH를 조작할 수 있습니다.

잠재적 영향

  • 의도하지 않은 환경 변수나 실행 경로가 후속 단계에 적용될 수 있습니다.
  • 변경된 환경을 사용하는 작업에서 공격자가 의도한 명령이 실행될 수 있으며, 영향은 작업의 권한과 비밀정보 접근 범위에 따라 달라집니다.

해결 방법

ACTIONS_ALLOW_UNSECURE_COMMANDS: true 설정을 제거하고, set-env와 add-path 대신 GITHUB_ENV와 GITHUB_PATH 환경 파일을 사용하세요. 신뢰할 수 없는 값을 스크립트에 직접 삽입하지 말고 워크플로 권한과 비밀정보 접근도 제한하세요.

예시

변경 전 예시는 비보안 명령을 허용하면서 GitHub 컨텍스트를 Python 코드에 직접 삽입하므로 그대로 사용하면 안 됩니다. 변경 후에는 해당 플래그 없이 환경 파일에 고정 값을 기록합니다. 이벤트 변경만으로 모든 외부 입력 위험이 해결되는 것은 아닙니다.

변경 전

yaml
name: Vulnerable workflow

on:
  pull_request_target

env:
  ACTIONS_ALLOW_UNSECURE_COMMANDS: true
  ENVIRONMENT_NAME: prod

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - run: |
          print("""${{ toJSON(github) }}""")
        shell: python

변경 후

yaml
name: Safe workflow
on:
  pull_request:
    types: [opened, synchronize, edited, reopened]
    branches:
      - master
jobs:
  review-comment:
    runs-on: ubuntu-latest
    steps:
      - name: Set review flag
        run: echo "REVIEW_STARTED=true" >> "$GITHUB_ENV"

GITHUB_ENV에 쓴 값은 같은 작업의 후속 단계에서 사용할 수 있습니다. 신뢰할 수 없는 여러 줄 값을 환경 파일에 기록할 때도 공식 구문에 맞게 처리해야 합니다.

참조