Cursor CLI를 사용해서 저장소의 보안 취약점과 시크릿 노출을 자동으로 감사해보자. 이 워크플로우는 잠재적인 시크릿을 스캔하고, 위험한 워크플로우 패턴을 감지하며, 보안 수정 사항을 제안한다.
name: Auto Secrets Audit

on:
  schedule:
    - cron: "0 4 * * *"
  workflow_dispatch:

permissions:
  contents: write
  pull-requests: write
  actions: read

jobs:
  secrets-audit:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install Cursor CLI
        run: |
          curl https://cursor.com/install -fsS | bash
          echo "$HOME/.cursor/bin" >> $GITHUB_PATH

      - name: Configure git identity
        run: |
          git config user.name "Cursor Agent"
          git config user.email "cursoragent@cursor.com"

      - name: Scan and propose hardening
        env:
          CURSOR_API_KEY: ${{ secrets.CURSOR_API_KEY }}
          MODEL: gpt-5
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          BRANCH_PREFIX: audit
        run: |
          cursor-agent -p "GitHub Actions 러너에서 실행 중입니다.

          GitHub CLI는 `gh`로 사용할 수 있으며 `GH_TOKEN`으로 인증됩니다. Git을 사용할 수 있습니다. 저장소 콘텐츠에 대한 쓰기 권한이 있고 풀 리퀘스트에 댓글을 달 수 있지만, PR을 직접 생성하거나 편집하면 안 됩니다.

          # 컨텍스트:
          - 저장소: ${{ github.repository }}
           - 보안 강화 브랜치 접두사: ${{ env.BRANCH_PREFIX }}

          # 목표:
          - 예약된 시간에 저장소 시크릿 노출 및 워크플로우 보안 강화 감사를 수행하고, 최소한의 안전한 수정 사항을 제안한다.

          # 요구사항:
          1) 추적된 파일과 최근 히스토리에서 잠재적인 시크릿을 스캔한다. 허용 목록 패턴이 있는 경우 지원한다(예: .gitleaks.toml).
          2) 위험한 워크플로우 패턴을 감지한다: 버전이 고정되지 않은 액션, 과도하게 넓은 권한, 안전하지 않은 pull_request_target 사용, 포크된 PR 컨텍스트의 시크릿, 더 이상 사용되지 않는 안전하지 않은 명령, 누락된 권한 블록.
          3) 컨텍스트의 보안 강화 브랜치 접두사를 사용하여 이 실행을 위한 지속적인 브랜치를 유지한다. 브랜치가 없으면 생성하고, 있으면 업데이트하여 origin에 변경 사항을 푸시한다.
          4) 최소한의 편집을 제안한다: 안전한 곳에서 리터럴을 수정하고, 무시 규칙을 추가하고, 액션을 SHA로 고정하고, 권한을 줄이고, 워크플로우에 보안 가드레일을 추가하고, 변경 사항과 수정 지침을 요약한 SECURITY_LOG.md를 추가한다.
          5) origin에 푸시한다.
          6) 저장소에 열린 PR이 하나 이상 있는 경우, 가장 최근에 업데이트된 열린 PR에 보안 강화 변경 사항을 간략히 설명하고 PR을 빠르게 생성할 수 있는 인라인 비교 링크를 포함하는 자연어 댓글(1-2문장)을 게시하거나 업데이트한다.
          7) 중복 댓글을 피한다. 기존 봇 댓글이 있으면 업데이트한다. 변경 사항이 없거나 열린 PR이 없으면 아무것도 게시하지 않는다.

          # 입력 및 규칙:
          - `gh`를 사용하여 PR을 나열하고 댓글을 게시한다. 중복 댓글을 피한다.

          # 업데이트가 발생할 때의 결과물:
           - 이 실행을 위한 지속적인 보안 강화 브랜치에 커밋을 푸시한다.
          - 위의 비교 링크가 포함된 단일 자연어 PR 댓글(열린 PR이 있는 경우에만).
          " --force --model "$MODEL" --output-format=text