dev.to

Your GitHub profile shows your follower count. It also shows attackers your whole attack surface.

GitHub 프로필 자동화가 공격자에게 보여주는 것들

프로필 README를 자동 갱신하는 GitHub Actions 워크플로에는 토큰 권한, 액션 버전, 외부 코드 실행 방식이 드러납니다. 글은 최소 권한 설정, 액션 SHA 고정, 토큰 범위 제한으로 자동화 기능을 유지하면서 공격 표면을 줄이는 방법을 설명합니다.

AI 요약

DEV 팔로워 수나 최신 블로그 글을 GitHub 프로필 README에 자동 반영하는 워크플로는 편리합니다. 하지만 공개 저장소에 설정 파일을 올리면 비밀 정보 처리 방식과 권한 범위, 신뢰하는 외부 액션까지 공개됩니다. 글은 공격자가 이를 계정의 보안 상태를 살피는 단서로 읽을 수 있다고 지적합니다.

기본 권한을 명시합니다

예시 워크플로는 매시간 실행해 통계를 가져오고 README를 갱신합니다. 이 작업에 필요한 권한은 파일을 저장소에 쓰는 정도지만, permissions:를 지정하지 않으면 저장소나 조직의 기본 GITHUB_TOKEN 권한이 적용됩니다. 글은 이 경우 토큰이 작업 시간 동안 저장소 전체에 읽기·쓰기 권한을 가질 수 있다고 설명합니다. 통계를 가져오는 외부 코드도 같은 토큰이 제공된 상태로 실행됩니다.

작업 수준에 permissions:를 선언하고 contents: write만 허용하면 필요한 범위로 권한을 줄일 수 있습니다. 이 설정은 이슈나 패키지 등 다른 영역에 토큰이 접근하지 못하게 합니다. 권한을 생략한 설정도 공개된 정보이므로, 공격자는 기본값을 쓰는지 추측할 필요가 없다는 것이 글의 주장입니다.

액션은 태그가 아니라 커밋 SHA로 고정합니다

actions/checkout@v3처럼 메이저 버전 태그를 지정하면 그 태그가 가리키는 코드가 바뀔 수 있습니다. 액션 공급망이 침해되면 다음 예약 실행 때 악성 코드가 자동으로 실행될 수 있고, 해당 작업에 토큰을 넘겼다면 토큰도 노출될 위험이 있습니다. 글은 tj-actions/changed-files 사건을 2025년 사례로 언급합니다.

버전 태그와 전체 커밋 SHA는 다릅니다. 태그는 관리자가 옮길 수 있지만, SHA를 지정하면 워크플로가 실행할 커밋을 고정합니다. 글은 actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11처럼 전체 SHA를 적는 방법을 제안합니다.

다른 워크플로와 비밀 토큰도 살핍니다

프로필 자동화 자체가 안전한 트리거를 쓰더라도, 공개된 다른 워크플로가 공격 대상이 될 수 있습니다. 특히 pull_request_target은 포크에서 온 PR을 처리하면서 저장소 비밀 정보를 사용할 수 있습니다. 여기에 신뢰할 수 없는 PR 코드를 체크아웃해 실행하면 공격자가 비밀 정보를 유출하도록 만들 수 있다고 설명합니다.

또한 API_TOKEN을 스크립트의 환경 변수로 전달하면 스크립트와 그 의존성 전체가 토큰에 접근할 수 있습니다. 따라서 공개 정보 조회에는 읽기 전용의 단일 목적 토큰을 쓰고, 비밀을 다루는 스크립트는 장식용 코드가 아니라 보안 검토 대상으로 취급해야 합니다. 글이 제시하는 점검 항목은 명시적 최소 권한, 액션의 SHA 고정, 용도에 맞는 토큰, pull_request_target과 신뢰할 수 없는 코드 체크아웃의 결합 금지입니다.

dev.to 반응

  • @respect17 — “태그는 다른 사람이 옮길 수 있는 라벨이고, SHA는 그렇지 않습니다”라는 문장이 액션 고정 논쟁을 끝내야 합니다. 권한 블록 누락을 단순히 모범 사례를 놓친 일이 아니라 공격자에게 기본 권한을 쓴다고 알리는 행동으로 설명한 점이 글의 메시지를 설득력 있게 만듭니다.
    • @rudratosh — 맞습니다. 고정은 버전 안정성만을 위한 일이 아닙니다. 다른 사람이 워크플로 실행 내용을 몰래 바꾸지 못하게 합니다. permissions:도 같은 원리입니다. 명시하지 않은 설정도 여전히 밖으로 드러납니다. 짚어줘서 감사합니다.
  • @itsaarrctic — 좋은 지적입니다. 이런 관점은 생각해보지 못했는데, 주말 프로젝트로 만들 수도 있겠습니다. GitHub Actions에 뭔가 추가하는 정도가 아니라, 책상 위에 놓고 상태를 보여주는 실제 E-Ink 기기를 말하는 겁니다.
    • @rudratosh — E-Ink 아이디어가 정말 좋네요. 저는 소프트웨어와 보안 쪽을 생각했는데, 책상 위에 상태를 보여주는 작은 기기가 있으면 훨씬 흥미롭겠습니다. 주말 프로젝트로 딱이네요. 하드웨어 버전도 만들고 싶어졌습니다.

원문: dev.to / 번역·요약: Trawling