제공 서비스
웹 보안 점검 소스코드 분석 (SAST) 외부 공격표면 진단 (EASM)
요금제 스토어 블로그 파트너 마이페이지 무료 보안 점검
CI/CD 보안 2026.05.27 · 조회 4

GitHub Actions 시크릿 누설 5패턴 — 로그·포크 PR·OIDC 탈취 막는 법 [2026]

GitHub Actions 워크플로는 로그 출력·포크 PR·서드파티 액션·OIDC 오설정으로 시크릿이 샌다. 2026년 tj-actions 사고로 본 5패턴과 표준 차단법, 30초 자가진단을 정리했다.

GitHub Actions 시크릿 누설은 CI/CD 워크플로가 저장된 배포 키·클라우드 자격증명을 로그·아티팩트·포크 PR·OIDC 토큰 경로로 외부에 노출하는 공급망 보안 결함이다.
CI/CD 파이프라인은 클라우드 루트 권한급 자격증명을 다루므로, 시크릿 한 번의 누설이 인프라 전체 장악으로 직결된다.
이 글은 자주 발생하는 실수 패턴, 표준 구현 코드, 30초 자가진단, 24시간 패치 순서를 정리했다.

한눈에 보는 핵심

Q. 포크에서 온 PR이 왜 위험한가요? A. pull_request_target 트리거는 베이스 저장소 컨텍스트에서 시크릿 접근이 가능한데, 여기서 포크의 코드를 체크아웃해 실행하면 외부 기여자의 코드가 시크릿을 읽을 수 있습니다. Q. 서드파티 액션은 어떻게 고정하나요? A. 이동 가능한 태그(@v4)가 아니라 커밋 SHA로 핀 고정해야 합니다. 2025년 tj-actions(CVE-2025-30066) 사고처럼 태그가 악성 커밋으로 재지정되면 태그 참조는 그대로 오염됩니다. Q. OIDC를 쓰면 시크릿이 필요 없나요? A. 장기 클라우드 키를 없앨 수 있지만, 클라우드 측 신뢰 정책에서 sub·audience 조건을 좁히지 않으면 다른 저장소가 토큰을 발급받아 역할을 탈취할 수 있습니다.

자주 발생하는 실수 패턴

#패턴위험도
1echo/set-output으로 시크릿 값을 로그에 출력치명
2pull_request_target + 포크 코드 체크아웃 동시 사용치명
3서드파티 액션을 태그(@v4)로만 참조 — SHA 미고정치명
4OIDC 클라우드 신뢰 정책에 sub·aud 조건 미설정(repo:*)치명
5self-hosted 러너를 공개 저장소에 연결 — 포크 PR이 러너 오염높음

표준 구현 코드

name: ci
on:
  pull_request:            # pull_request_target 대신 pull_request 사용
permissions:
  contents: read           # 워크플로 기본 권한을 최소로
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      # 서드파티 액션은 태그가 아니라 커밋 SHA로 핀 고정
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  # v4.2.2
      - name: build
        env:
          TOKEN: ${{ secrets.DEPLOY_TOKEN }}   # 필요한 스텝에만 주입
        run: ./build.sh    # echo "$TOKEN" 금지 — 로그로 새어나감

핵심은 "동작하는 코드"와 "안전한 코드"가 다르다는 점이다.
AI 코딩 도구는 기능 충족 코드를 우선 출력하므로 보안 분기는 별도로 강제해야 한다.
미들웨어·정책·CI 게이트로 모든 경로에 일괄 적용하는 것이 표준이다.

지금 1분만 — CodeScan 무료 스캔으로 내 서비스의 노출 패턴을 자동 점검하세요.

30초 자가진단

# 1. 위험 트리거 검색
grep -rn "pull_request_target" .github/workflows/

# 2. SHA 미고정(이동 태그 참조) 액션 검색
grep -rnE "uses:.*@v[0-9]" .github/workflows/

# 3. 시크릿 로그 노출 흔적
grep -rnE "echo .*(secrets|TOKEN|KEY|PASSWORD)" .github/workflows/
# 하나라도 걸리면 결함

위 시그널이 발견되면 결함이다. GitHub Actions 보안 하드닝 공식 가이드를 함께 참조하라.

24시간 패치 절차

순위조치
1pull_request_target 제거 또는 포크 코드 체크아웃 분리
2모든 서드파티 액션을 커밋 SHA로 핀 고정
3워크플로/스텝 permissions 최소화(contents: read 기본)
4OIDC 신뢰 정책에 repository·ref·audience 조건 명시
5self-hosted 러너는 비공개 저장소 전용 + 격리

지금 해야 할 것

실무자: CodeScan 무료 스캔으로 30초 점검 후 우선순위대로 패치.
CISO·임원: 조직 전체 점검·규제 대응은 SENTRIX 30분 1:1 상담으로.
결함은 발견 즉시, 늦어도 24시간 안에 패치하는 것이 표준이다.

관련 글

{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"포크에서 온 PR이 왜 위험한가요?","acceptedAnswer":{"@type":"Answer","text":"pull_request_target 트리거는 베이스 저장소 컨텍스트에서 시크릿 접근이 가능한데, 여기서 포크의 코드를 체크아웃해 실행하면 외부 기여자의 코드가 시크릿을 읽을 수 있습니다."}},{"@type":"Question","name":"서드파티 액션은 어떻게 고정하나요?","acceptedAnswer":{"@type":"Answer","text":"이동 가능한 태그(@v4)가 아니라 커밋 SHA로 핀 고정해야 합니다. 2025년 tj-actions(CVE-2025-30066) 사고처럼 태그가 악성 커밋으로 재지정되면 태그 참조는 그대로 오염됩니다."}},{"@type":"Question","name":"OIDC를 쓰면 시크릿이 필요 없나요?","acceptedAnswer":{"@type":"Answer","text":"장기 클라우드 키를 없앨 수 있지만, 클라우드 측 신뢰 정책에서 sub·audience 조건을 좁히지 않으면 다른 저장소가 토큰을 발급받아 역할을 탈취할 수 있습니다."}}]}
GitHub Actions CI/CD 보안 시크릿 관리 OIDC 공급망 보안

내 사이트도 점검해보세요

CodeScan으로 보안 취약점을 무료로 점검할 수 있습니다.

무료 스캔 시작하기 →
🛒
추천 상품
웹서비스 런칭 전 보안 세팅
런칭 전에 반드시 해야 하는 보안 설정을 원격으로 직접 해드립니다. HTTPS, 환경변수 분리, 보안 헤더…
220,000원 150,000원

🔒 바이브코딩 보안 체크리스트 받기

바이브코딩 보안 체크리스트(PDF)를 무료로 받아보세요.