- 연구자는 Nixpkgs의 취약점을 발견해 Nix 생태계 전체에 악성 코드를 주입할 수 있었던 경험을 공유함
-
GitHub Actions의 pull_request_target 트리거를 통해 외부 기여자 PR에서도 민감 권한과 시크릿이 노출되는 구조적 위험을 설명함
- 실제로 editorconfig-checker와 코드 오너스 검증 작업에서 명령어 삽입 및 심볼릭 링크 활용으로 권한 상승이 가능했음을 입증함
- 발견 즉시 Nixpkgs 관리팀이 신속하게 취약점을 수정하고, 취약한 워크플로를 비활성화 및 권한 운영을 재점검함
- 조직의 CI/CD 인프라에서 신뢰되지 않은 데이터와 민감 운영 분리, 최소권한 부여, 정책 강화가 중요함을 강조함
Nix 생태계 전체 해킹하기
소개 및 배경
- 지난 해 NixCon에서 연구자와 동료 Lexi는 Nixpkgs의 취약점을 발표함
- 발견된 이 취약점은 공급망 공격으로 Nix 전체 생태계에 악성 코드 삽입 가능성을 열었음
- 취약점 탐지에서 제보, 수습까지 단 하루 만에 이루어진 신속한 대응 경험임
- 연구자는 올해 NixCon 참석이 불가하여, 이번 글로 과정을 상세히 정리함
GitHub Actions: 취약한 타겟
-
GitHub Actions는 코드 저장소에서 다양한 자동화 작업(CI/CD)을 지원하는 시스템임
- 워크플로 파일에 접근 권한만 있으면 코드 삽입이 쉽고, 이로 인해 공급망 공격의 주요 표적이 됨
- 워크플로 파일은 YAML로 작성되며, 실행을 의도한 포맷이 아니기 때문에 예기치 못한 보안 취약점이 존재함
- 단순한 예시로, 코드를 푸시할 때 명령어를 실행하는 워크플로가 있음
위험한 pull_request_target 트리거
- GitHub Actions에는 여러 트리거가 있는데, 그중 pull_request_target은 일반 pull_request와 큰 차이가 있음
- pull_request_target은 포크(PR)로부터도 기본적으로 read/write 및 시크릿 접근권을 가짐
- 이 트리거의 잘못된 사용 시, 신뢰할 수 없는 외부 데이터가 민감 권한과 결합됨
- GitHub 공식 문서에서도 이 위험을 명확히 경고함
- 연구자는 Nixpkgs 저장소 내에서 pull_request_target을 사용하는 14개 워크플로를 점검함
editorconfig-checker 취약점
- 첫 번째로 발견된 취약 워크플로는 editorconfig 규칙 검사 목적임
- 변경 파일 리스트를 계산 후, xargs를 이용해 editorconfig-checker에 전달함
-
xargs명령의 보안 경고를 무시할 경우, 악의적으로 설계된 파일명(예: --help)을 삽입 가능한 취약점이 발생함
- 이렇게 하면 editorconfig-checker를 임의로 조작하거나, 추가적인 명령실행 가능성이 열림 (구체적 분석은 추가 검토 필요)
codeowners-validator 취약점: 로컬 파일 포함
- 두 번째, 더 심각한 취약점은 CODEOWNERS 파일 검증 워크플로에서 발견됨
- 이 프로세스는 PR 코드를 체크아웃 후, codeowners-validator로 파일을 점검함
- PR 제출자는 OWNERS 파일을 심볼릭 링크로 대체해, 러너 내 임의 파일을 참조 가능함 (예: 액션 크리덴셜)
- 결과적으로 검증시 해당 파일의 내용이 로그에 출력되어 read/write 권한이 있는 GitHub 토큰 노출임
- 이 토큰을 획득 시, Nixpkgs 저장소에 직접 푸시가 가능해짐
조치 및 교훈
- 취약점 제보 이후, Nixpkgs 메인테이너 infinisil이 즉시 대응함
- 취약 워크플로 일시 비활성화
- 비신뢰 데이터와 권한 연계 부분 수정 및 분리
- 보안 수정 후 워크플로명을 변경해 branch targeting 문제 완화
- 주요 교훈
-
신뢰되지 않은 데이터와 시크릿, 민감 작업 결합 절대 금지 또는 최대한 주의
-
최소 권한 운영 원칙 준수
- GitHub Actions 권한 관련 공식 가이드 숙지 필수
- 유사 취약점 발생 시, 조직 관리자가 정책에서 일괄로 Actions 비활성화 가능 (설정 방법 안내 있음)
결론
- 연구자는 하루 만에 Nix 생태계 전체를 위험에 빠뜨릴 수 있는 취약점을 발견, 제보, 수정 참여함
- 이를 통해 GitHub Actions, 특히 pull_request_target 사용시 각별한 주의의 필요성이 드러남
- 연구를 도운 KITCTF의 Intrigus와 신속히 대응한 infinisil에게 감사를 전함
- 관심 있는 독자는 발표 영상 및 추가 자료 참고를 권장함
- 전체적으로, GitHub Actions 보안 관리의 중요성과 실전적 교훈을 강조함