읽는 데 6분
GitHub 공개 저장소, pull_request_target 쓰면 12월 전에 확인하세요
외부 기여자가 보낸 코드 변경 요청(PR)에 라벨을 붙이거나 테스트를 돌리는 자동화가 있나요? GitHub Actions에서는 이런 자동화 절차를 워크플로라고 부르고, PR 생성 같은 사건(이벤트)을 계기로 실행해요. 설정에 pull_request_target이 있다면 다음 달이 되기 전에 확인할 일이 생겼어요.
GitHub는 2026년 12월 2일부터 공개 저장소에서 이 이벤트를 기본 차단한다고 공지했어요. 적용 가능한 Actions 이벤트 정책에서 명시적으로 허용한 경우는 예외예요. 당초 11월 2일로 잡았던 시행일을 미룬 일정이고, 비공개(private)와 내부(internal) 저장소는 이번 변경 대상이 아니에요.
12월 전에 두 번 잠깐 막혀요
정식 적용에 앞서 기본 차단을 잠시 켜는 시간이 있어요. 공지의 UTC 시간을 한국 시각으로 바꾸면 다음과 같아요.
| 구분 | 한국 시각(KST) |
|---|---|
| 첫 임시 차단 | 11월 10일 오전 1~3시 |
| 두 번째 임시 차단 | 11월 17일 오전 1~3시 |
| 기본 차단 정식 적용 | 12월 2일부터, 공지에 정확한 시각 없음 |
임시 차단 시간에는 대상 워크플로가 실행되지 않고, 오류 주석이 달린 실패 실행 기록이 만들어져요. 시간이 지나면 다시 평가 모드로 돌아가 실행은 허용하되 경고를 남긴다고 해요.
이번 변경은 GitHub Free, Team, Enterprise Cloud의 공개 저장소에 적용돼요. 직접 서버를 운영하는 GitHub Enterprise Server는 대상이 아니에요.
PR 코드를 누구 권한으로 돌리느냐의 차이예요
pull_request_target은 PR을 받는 원래 저장소 쪽의 신뢰를 바탕으로 실행돼요. API 키 같은 저장소의 비밀값에 접근할 수 있어서 라벨 부착 같은 관리 자동화에 쓸 수 있죠. 기본적으로는 원래 저장소의 기본 브랜치에 있는 워크플로가 실행돼요. 코드를 작업 환경으로 가져오는 actions/checkout도 별도 코드 위치(ref) 지정이 없으면 그쪽 코드를 가져와요.
위험해지는 건 그 상태에서 외부 PR의 코드를 따로 가져와 실행할 때예요. 예를 들어 PR 작성자가 바꾼 빌드 스크립트로 테스트를 돌리면, 그 스크립트에 숨긴 명령도 원래 저장소의 비밀값과 토큰을 가진 환경에서 실행될 수 있어요. 코드를 가져오는 것과 실행하는 것은 다른 단계지만, 설치나 빌드 명령도 외부 코드를 실행하는 통로가 될 수 있거든요.
일반 pull_request 이벤트는 외부 기여자가 저장소를 복사한 포크에서 PR을 보내면, 기본적으로 읽기 전용 접근 권한을 담은 토큰만 받고 다른 비밀값은 받지 못해요. 비밀값이 필요 없는 테스트라면 이쪽으로 바꿀 수 있는지 검토할 만해요. 다만 이벤트 이름만 기계적으로 바꾸면 기존 자동화에 필요한 권한이나 동작이 달라질 수 있어요.
먼저 영향 목록부터 확인하세요
공식 문서는 저장소나 조직의 Settings → Actions → Policies, 그리고 그 아래 Policy insights에서 정책과 실행 영향을 살펴보도록 안내해요. 현재 기본 정책은 평가 모드라, 실제 차단 전에 어떤 실행이 걸리는지 확인할 수 있어요.
영향받는 작업마다 선택은 달라요.
- 이 이벤트가 필요 없으면 더 안전한 이벤트로 옮길 수 있는지 검토해요.
- 필요하고 안전하게 사용한다면 적용 가능한 이벤트 정책에서 명시적으로 허용해요. 공지는 워크플로 파일을 대상으로 지정해 필요한 작업만 허용하는 방법도 안내해요.
- 허용할 필요가 없으면 기본 차단을 유지해요.
기존에 적용 가능한 이벤트 정책을 설정해 뒀다면 기본 정책이 이를 대체하지 않는다는 점도 확인해야 해요. 허용 설정은 실행을 가능하게 할 뿐, 외부 PR 코드를 비밀값과 함께 실행해도 안전하다는 판정은 아니에요. 공식 보안 안내도 꼭 필요한 경우에만 허용하고 토큰 권한과 비밀값 사용을 최소화하라고 권고해요.
확인한 범위
- 기준일: 2026년 11월 3일.
- 읽은 것: GitHub 변경 공지, 워크플로 실행 정책 안내,
pull_request_target보안 문서. 공지와 정책 문서의 시행일 및 적용 대상을 대조했어요. - 별도 확인: 임시 차단의 UTC 시간을 KST로 변환했어요. 12월 2일 정식 적용의 정확한 시각은 공지에 없어 환산하지 않았어요.
- 직접 해보지 못한 것: 계정에 로그인하거나 실제 저장소 정책을 변경하지 않았어요. 개별 저장소의 영향 여부는 확인하지 않았어요.
출처

