AgentSkillsCN

security-scan

扫描代码及依赖项,识别安全漏洞。 执行依赖项审计与代码层面的安全模式检查。 可通过诸如“安全扫描”、“安全检测”、“漏洞检测”、“security-scan”或任何关于漏洞或安全问题扫描的请求触发。

SKILL.md
--- frontmatter
name: security-scan
description: |
  Scans code and dependencies for security vulnerabilities.
  Runs dependency audits and code-level security pattern checks.
  Triggers on: "보안 스캔", "보안 검사", "취약점 검사", "security-scan",
  or any request to scan for vulnerabilities or security issues.
argument-hint: "<대상 디렉토리 또는 파일 (기본: 프로젝트 루트)>"
user-invocable: true
context: fork
agent: coder

Security Scan Skill

입력

$ARGUMENTS: 스캔 대상 디렉토리 또는 파일. 비어있으면 프로젝트 루트 전체.

프로세스

1. 프로젝트 타입 감지

루트 설정 파일로 프로젝트 타입을 판별한다:

code
감지 순서:
- package.json → Node.js (npm audit)
- pyproject.toml / requirements.txt → Python (pip audit)
- Cargo.toml → Rust (cargo audit)
- go.mod → Go (govulncheck)
- pom.xml / build.gradle → Java (dependency-check)

2. 의존성 취약점 검사

프로젝트 타입에 맞는 의존성 audit 도구를 실행한다. 도구가 설치되지 않은 경우 사용자에게 알리고 건너뛴다.

3. 코드 레벨 보안 패턴 검사

Grep으로 일반적인 보안 안티패턴을 검색한다:

code
검색 패턴:
- 하드코딩된 시크릿: API_KEY, SECRET, PASSWORD, TOKEN + 할당문
- SQL 인젝션: 문자열 연결로 쿼리 구성 (f-string, template literal, +)
- eval/exec 사용: eval(, exec(, Function(
- 안전하지 않은 역직렬화: pickle.loads, yaml.load (Loader 없이)
- 경로 조작: 사용자 입력이 파일 경로에 직접 사용
- 안전하지 않은 랜덤: Math.random() (보안 목적 사용 시)

4. 인증/인가 로직 검토

인증 관련 코드가 있으면 패턴을 검사한다:

code
검색:
- 인증 미들웨어 적용 누락 (라우트에 auth 미들웨어 없음)
- 비밀번호 해싱 (bcrypt/argon2 사용 여부)
- JWT 검증 (만료 확인, 알고리즘 지정)
- CORS 설정 (와일드카드 * 사용 여부)

5. 결과 리포트 생성

docs/security-scan-{date}.md 파일에 결과를 저장한다.

출력

markdown
## 보안 스캔 결과

**대상**: [스캔 대상]
**일시**: [날짜]

### 의존성 취약점
| 패키지 | 심각도 | CVE | 설명 |
|--------|--------|-----|------|
| [패키지명] | [Critical/High/Medium/Low] | [CVE-ID] | [설명] |

또는: "취약점 없음" / "audit 도구 미설치"

### 코드 레벨 보안 이슈
| 위치 | 유형 | 심각도 | 설명 |
|------|------|--------|------|
| [path:line] | [유형] | [심각도] | [설명] |

또는: "이슈 없음"

### 인증/인가
[검토 결과 또는 "인증 관련 코드 없음"]

### 권장 조치
1. [조치 1]
2. [조치 2]

REVIEW 연동

스캔 결과에 High/Critical 이슈가 있으면 security 에이전트에게 상세 평가를 요청한다:

code
Task(security): "보안 스캔에서 발견된 이슈를 평가하라: [이슈 목록]. 실제 위험인지, 오탐인지 판단하라."