cloudflare/security-audit-skill — A coding-agent skill for multi-phase security audits with independently verified, machine-readable findings
Cloudflare, 코딩 에이전트용 다단계 보안 감사 스킬 공개 — 독립 검증된 기계 판독 가능한 결과물 생성
Cloudflare가 코딩 에이전트를 보안 감사자로 바꿔주는 오픈소스 스킬 security-audit-skill을 공개했습니다. 정찰, 커버리지 기반 탐색, 후보 검증, 구조화된 출력, 독립 기록 검증, 보고서 생성의 6단계 파이프라인을 통해 취약점을 찾아내며, 발견한 에이전트와 검증하는 에이전트를 분리하는 적대적 검증 방식이 특징입니다. Cloudflare의 사내 취약점 발견 하니스를 만든 원조 스킬로, MIT 라이선스로 배포됩니다.
- 주제
본문
Cloudflare가 코딩 에이전트(coding agent)를 보안 감사자로 전환해주는 스킬인 security-audit-skill을 GitHub에 공개했습니다. 이 스킬은 Cloudflare가 블로그 글 'Build your own vulnerability harness'에서 소개한 취약점 발견 하니스의 시드가 된 프로젝트로, 사내에서 멀티스테이지·플릿 단위 시스템으로 성장한 대규모 파이프라인의 단일 리포지토리 출발점에 해당합니다. AI 코딩 에이전트에게 구조화된 보안 감사 절차를 부여한다는 점에서, AI 기반 보안 도구에 관심 있는 개발자에게 의미가 큽니다.
6단계 감사 파이프라인
스킬이 수행하는 감사는 여섯 단계로 구성됩니다. 첫째, 정찰(Reconnaissance) 단계에서 아키텍처, 신뢰 경계, 입력 지점, 기존 증거를 매핑하고 architecture.md와 coverage-ledger.json에 확정적 커버리지를 기록합니다. 둘째, 커버리지 기반 탐색(Coverage-led hunting)에서는 원장(ledger) 단위로 격리된 헌터 에이전트를 배정해 점검을 수행하고, 커버리지 비평가(coverage critic)로 공백을 찾아냅니다. 셋째, 후보 검증 단계에서는 모든 고유 후보를 새로운 검증자 에이전트에 넘겨 반증을 시도하게 합니다. 넷째, 구조화된 출력 단계에서 confirmed, needs_validation, rejected 세 가지 판정을 findings.json에 기록하고 report-schema.json으로 검증합니다. 다섯째, 독립 기록 검증 단계에서는 새 에이전트가 최종 소스 주장을 다시 확인하며, 중요한 교체가 발생하면 또 다른 독립 검증자가 투입됩니다. 마지막으로 대상 중립적 보고 단계에서 검증된 기록과 커버리지 원장으로부터 REPORT.md, FINDINGS-DETAIL.md, NEEDS-VALIDATION.md를 도출합니다.
적대적 검증과 판정 체계
이 스킬의 핵심 원칙은 '발견한 에이전트가 검증하지 않는다'는 적대적 검증입니다. 판정은 세 가지로 구분되는데, confirmed는 완전한 소스 추적과 범위가 한정된 관찰 결과가 있는 경우, needs_validation은 해소되지 않은 정확한 사실 하나가 있되 심각도가 부여되지 않은 경우, rejected는 반증된 후보를 기록합니다. 심각도는 체크리스트 이탈이 아니라 '가능성 × 영향'으로 산정하며, 심층 방어 공백 자체는 취약점으로 취급하지 않습니다. 즉 A 계층이 공격을 막는다면 B 계층의 부재는 취약점이 아닌 하드닝 노트로 분류됩니다. 또한 확립된 경계 실패만 확정하고, 소스에 근거한 차단된 리드는 해소되지 않은 사실과 함께 needs_validation으로 유지합니다.
실행 방식과 요구 사항
부모 에이전트는 원장 생성 직후와 이후 갱신마다 validate-coverage-ledger.cjs를 실행하고, Phase 4와 Phase 5 교체 후마다 validate-findings.cjs를 실행합니다. 두 검증기 모두 외부 의존성이 없는(zero-dependency) Node.js 스크립트이며 테스트 파일도 함께 제공됩니다. 설치는 'npx skills add' 명령으로 Skills CLI를 통해 가능하고, 사용자 수준 설치에는 --global 옵션을 씁니다. 에이전트에게 'security audit this codebase' 같은 요청을 하면 트리거 조건에 맞아 스킬이 자동 활성화되며, 출력 디렉터리 미지정 시 기본값은 ~/security-audit-skill/<repo-name>/run-<N>입니다. 대상이 제어하는 빌드·테스트·프로세스·퍼저 등을 실행하려면 외부 네트워크 차단, 허용 목록 기반 환경 변수, 리소스 제한, 지정 스크래치 경로 외 쓰기 금지를 강제하는 OS 수준 샌드박스가 필요하며, 이 조건이 없으면 대상 코드 실행 없이 리드를 needs_validation으로 유지합니다. 흥미로운 수치로, 같은 리포지토리에 대한 반복 실행은 누적적으로 작동해 커버리지가 향상되는데, Cloudflare의 테스트 실행에서는 단일 실행이 반복 실행 전체가 찾은 취약점의 약 절반만 발견했다고 밝혔습니다.
공격 클래스 문서 구성
스킬은 대상 유형별 사냥 프롬프트를 별도 문서로 제공합니다. 메모리 안전·바이너리·커널 클래스, 프롬프트 인젝션·에이전트/도구·출력 처리를 다루는 AI/LLM 클래스, HTTP 요청 프레이밍·캐시·인증 프로토콜 클래스, DOM 인젝션·메시징 신뢰·UI 레드레싱·프로토타입 오염을 다루는 클라이언트 사이드 클래스, 의존성·CI·릴리스·서명·업데이트를 다루는 서플라이 체인 클래스, IAM·IaC·컨테이너·서버리스·인그레스를 다루는 클라우드 클래스, RPC·직렬화·큐·브로커·웹훅 클래스, 리소스 고갈·가용성 클래스, 테넌트 격리·백업·삭제·복원을 다루는 데이터 생명주기 클래스, 딥링크·웹뷰·로컬 IPC를 다루는 데스크톱/모바일 클래스까지 폭넓게 커버합니다.
원문: GitHub / 번역·요약: Trawling