Nix 생태계 해킹하기

2 weeks ago 9

  • 연구자는 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 보안 관리의 중요성과 실전적 교훈을 강조함

Read Entire Article