[프롬프트] 보안 취약점 탐지 프롬프트 - 최적 프롬프트 레시피
💡 한 줄 요약: "이 코드 보안 취약점 찾아줘"라는 단순 질의 시 발생하는 피상적인 "입력값을 검증하세요" 수준의 원론적 조언을 탈피하고, Principal AppSec Architect 및 수석 보안 감사관 관점에서 OWASP Top 10, CWE 매핑, 실증 가능한 익스플로잇 PoC, 심층 방어(Defense-in-Depth) 패치 코드, API BOLA/IDOR 및 테넌트 격리 결함까지 완벽히 적발하는 실전 보안 감사 프롬프트 레시피입니다.
1. 페인포인트 & 작업 목표
2. 프롬프트 레시피 비교
❌ 레시피 A: 기본형 (단순 질의 초안)
역할 정의, 공격 벡터 분석 기준, 패치 요구사항 없이 단순 취약점 탐지만 요청하는 초안입니다.
[영문 프롬프트 (복사용)]
Find security vulnerabilities in this code:
[PASTE_SOURCE_CODE_HERE][한글 프롬프트 (1:1 매칭 복사용)]
이 코드에서 보안 취약점을 찾아줘:
[여기에_소스_코드_붙여넣기]⚡ 레시피 B: Principal AppSec Architect 실무 종결형 보안 취약점 감사 프롬프트
파일 업로드, 외부 URL 처리, 시스템 명령어, 역직렬화 등 고위험 I/O 로직에서 Path Traversal, SSRF, 원격 코드 실행(RCE), XSS 취약점을 전방위로 적발하고 심층 방어 코드를 도출하는 종합 레시피입니다.
[영문 프롬프트 (복사용)]
You are a Principal Application Security (AppSec) Architect and Offensive Security Certified Professional (OSCP) conducting a white-box penetration audit.
Perform a rigorous vulnerability assessment on the target source code according to OWASP Top 10 and CWE standards.
### Target Environment & Technology Stack:
- Runtime & Language: [e.g., Node.js 20 LTS / TypeScript 5.4 / Python 3.12 / Go 1.22]
- Framework & Web Server: [e.g., Express.js, FastAPI, Spring Boot, Nginx reverse proxy]
- Source Code to Audit:
[PASTE_SOURCE_CODE_HERE]
### Security Audit Directives:
1. VULNERABILITY TAXONOMY: Identify all flaws with accurate CWE-ID, OWASP Category, and estimated CVSSv3 base score.
2. ATTACK VECTOR & PROOF OF CONCEPT (PoC):
- Provide the exact HTTP request, malicious payload, or sequence of actions needed to exploit each flaw.
- Detail the exploit chain impact (e.g., Local File Inclusion -> Remote Code Execution).
3. ROOT CAUSE ANALYSIS: Pinpoint the exact line numbers and architectural mistakes enabling the bypass.
4. DEFENSE-IN-DEPTH REMEDIATION:
- Provide production-ready, idiomatic patch code replacing vulnerable calls.
- Enforce multi-layered defense: strict schema validation, canonicalization, principle of least privilege, and safe standard APIs.
5. SECURITY UNIT TEST: Write a test asserting that the malicious PoC payload is rejected with appropriate HTTP status/exception.[한글 프롬프트 (1:1 매칭 복사용)]
당신은 화이트박스 모의해킹 감사를 수행하는 수석 애플리케이션 보안 아키텍트(Principal AppSec Architect)이자 OSCP 공인 침투 시험관입니다.
OWASP Top 10 및 CWE 표준에 의거하여 제공된 대상 소스 코드에 대해 철저한 보안 취약점 감사를 수행하십시오.
### 대상 환경 및 기술 스택:
- 런타임 및 언어: [예: Node.js 20 LTS / TypeScript 5.4 / Python 3.12 / Go 1.22]
- 프레임워크 및 웹 서버: [예: Express.js, FastAPI, Spring Boot, Nginx 역방향 프록시]
- 감사 대상 소스 코드:
[여기에_감사_대상_소스_코드_붙여넣기]
### 보안 감사 필수 지침:
1. 취약점 분류 체계화: 정확한 CWE-ID, OWASP 분류, 추정 CVSSv3 기본 점수를 명시하여 결함을 식별하십시오.
2. 공격 벡터 및 실증 PoC(Proof of Concept):
- 각 결함을 공격하기 위해 필요한 구체적 HTTP 요청, 악성 페이로드 또는 작업 시퀀스를 작성하십시오.
- 공격 체이닝 영향도(예: 로컬 파일 인클루전 -> 원격 코드 실행)를 상세히 서술하십시오.
3. 근본 원인 분석: 보안 우회를 허용한 정확한 코드 라인과 아키텍처적 결함을 적시하십시오.
4. 심층 방어(Defense-in-Depth) 조치 코드:
- 취약한 호출부를 완전히 대체하는 실무 프로덕션급 관용적 패치 코드를 제시하십시오.
- 다층 방어 강제: 엄격한 스키마 검증, 경로 정규화(Canonicalization), 최소 권한 원칙, 안전한 표준 API 적용.
5. 보안 회귀 테스트 코드: 악성 PoC 페이로드가 적절한 HTTP 상태 코드 및 예외로 차단되는지 검증하는 테스트 코드를 작성하십시오.🚀 레시피 C: API BOLA/IDOR 및 인증/인가 결함 특화 (Auth & Tenant Isolation Auditor)
REST/GraphQL API 환경에서 가장 치명적인 수평적 권한 상승(IDOR/BOLA), 테넌트 간 데이터 침범, JWT 클레임 검증 부재, 대량 할당(Mass Assignment) 결함을 정밀 타격하는 레시피입니다.
[영문 프롬프트 (복사용)]
You are a Principal Security Engineer specializing in Cloud API Security, Zero-Trust Architecture, and OAuth2/OIDC authorization models.
Audit the provided multi-tenant API handler specifically for Broken Object-Level Authorization (BOLA/IDOR), tenant data leakage, and authentication bypasses.
### Target Specifications:
- Framework & ORM/Database: [e.g., NestJS / Express with Prisma / Django with PostgreSQL RLS]
- Identity & Session Model: [e.g., JWT Bearer Token with tenant_id, role, sub claims]
- Target API Endpoint Code:
[PASTE_API_HANDLER_CODE_HERE]
### Specialized Audit Directives:
1. OBJECT-LEVEL AUTHORIZATION AUDIT:
- Trace whether database lookups verify the resource's owner against the authenticated session context (tenant_id, user_id).
- Identify horizontal privilege escalation vectors where User A manipulates resource identifiers to access User B's data.
2. MASS ASSIGNMENT & SCOPE CHECK:
- Inspect request DTOs/body bindings to ensure sensitive fields (e.g., is_admin, role, tenant_id) cannot be overwritten.
3. TENANT ISOLATION HARDENING:
- Implement repository-level or database-level (Row-Level Security) isolation guards instead of relying solely on controller-level checks.
4. EXPLICIT PATCH CODE:
- Provide the complete, hardened handler code with strict authorization policies and domain-level guard clauses.[한글 프롬프트 (1:1 매칭 복사용)]
당신은 클라우드 API 보안, 제로 트러스트 아키텍처, OAuth2/OIDC 인가 모델을 전문으로 하는 수석 보안 엔지니어(Principal Security Engineer)입니다.
제공된 멀티테넌트 API 핸들러에 대해 객체 수준 권한 결함(BOLA/IDOR), 테넌트 간 데이터 누출, 인증 우회 취약점을 정밀 감사하십시오.
### 대상 사양:
- 프레임워크 및 ORM/DB: [예: NestJS / Express + Prisma / Django + PostgreSQL RLS]
- 인증 및 세션 모델: [예: tenant_id, role, sub 클레임을 포함하는 JWT Bearer 토큰]
- 감사 대상 API 엔드포인트 코드:
[여기에_API_핸들러_코드_붙여넣기]
### 특화 감사 필수 지침:
1. 객체 수준 인가(BOLA/IDOR) 감사:
- 데이터베이스 조회 시 인증된 세션 컨텍스트(tenant_id, user_id)와 리소스 소유권을 철저히 교차 검증하는지 추적하십시오.
- 사용자 A가 식별자(ID) 변조를 통해 사용자 B의 리소스에 무단 접근하는 수평적 권한 상승 벡터를 찾아내십시오.
2. 대량 할당(Mass Assignment) 및 스코프 검증:
- 요청 바디 바인딩 시 민감 필드(is_admin, role, balance, tenant_id 등)가 클라이언트 임의로 덮어써질 위험을 검증하십시오.
3. 테넌트 격리 아키텍처 강화:
- 컨트롤러 계층의 단일 IF문에 의존하지 않고, 레포지토리 또는 DB 레벨(Row-Level Security) 격리 가드를 적용하십시오.
4. 완전한 패치 코드 제시:
- 엄격한 인가 정책과 도메인 가드 절이 적용된 프로덕션급 방어 코드를 작성하십시오.orderId나 fileId를 세션 사용자 ID/테넌트 ID와 대조하지 않는 흔한 BOLA 취약점을 직격합니다.where: { id }만 실행되더라도 DB 계층에서 다른 테넌트의 행 조회를 원천 차단하는 엔터프라이즈급 방어 설계를 강제합니다.3. 실행 결과 비교: 레시피 A vs B vs C 실전 대조
❌ 레시피 A 실행 결과: [단순 질의의 한계] 원론적이고 피상적인 답변
사용자 프로필 이미지 다운로드 및 처리 엔드포인트를 레시피 A에 입력했을 때의 결과입니다.
이 코드에는 몇 가지 보안 문제가 있을 수 있습니다:
1. 사용자가 업로드하는 파일 이름을 믿으면 안 됩니다. 파일 이름에 특수문자가 들어갈 수 있으니 검증하세요.
2. 사용자가 다른 사람의 이미지를 요청할 수 있으니 올바른 인증을 적용하세요.
3. 이미지 처리 시 서버 부하가 발생할 수 있으니 적절한 크기 제한을 두세요.⚡ 레시피 B 실행 결과: [실전 사례 1] 파일 업로드 및 이미지 처리 API 취약점 전면 감사
외부 URL을 받아 이미지를 다운로드하고 서버 로컬 디렉터리에 저장한 뒤 썸네일을 생성하는 Express 엔드포인트를 레시피 B로 감사한 결과입니다.
AI 생성 출력 결과 (핵심 발췌)
[취약점 평가 요약]
- 취약점 1: CWE-918 서버 측 요청 위조 (SSRF) | CVSSv3: 9.1 (Critical) | OWASP A10:2021
- 취약점 2: CWE-22 경로 조작 (Path Traversal) | CVSSv3: 8.6 (High) | OWASP A01:2021
- 취약점 3: CWE-79 악성 SVG를 통한 저장형 XSS | CVSSv3: 7.2 (High) | OWASP A03:2021
[공격 시나리오 및 PoC]
1. SSRF: imageUrl에 "http://169.254.169.254/latest/meta-data/iam/security-credentials/" 전달 시 AWS 클라우드 메타데이터 토큰 탈취 가능.
2. Path Traversal: filename 파라미터에 "../../../etc/passwd" 주입 시 임의 파일 덮어쓰기 또는 민감 시스템 파일 유출.심층 방어(Defense-in-Depth) 패치 코드 (TypeScript / Express)
import path from 'path';
import crypto from 'crypto';
import { Request, Response } from 'express';
import { z } from 'zod';
import ipaddr from 'ipaddr.js';
import sharp from 'sharp';
// 1. 입력 스키마 및 URL 화이트리스트 검증 (Zod)
const DownloadSchema = z.object({
imageUrl: z.string().url(),
category: z.enum(['avatar', 'cover', 'attachment']),
});
const STORAGE_ROOT = path.resolve('/var/app/secure_storage');
// SSRF 방어: 사설 IP 대역(RFC 1918, Link-local, Loopback) 원천 차단 함수
function validatePublicIp(targetIp: string): boolean {
const addr = ipaddr.parse(targetIp);
const range = addr.range();
const forbiddenRanges = ['loopback', 'private', 'linkLocal', 'carrierNat', 'reserved'];
return !forbiddenRanges.includes(range);
}
export async function secureImageProcessor(req: Request, res: Response) {
const parsed = DownloadSchema.safeParse(req.body);
if (!parsed.success) {
return res.status(400).json({ error: 'INVALID_REQUEST_PAYLOAD', details: parsed.error.issues });
}
const { imageUrl, category } = parsed.data;
const parsedUrl = new URL(imageUrl);
// 프로토콜 제한 (HTTP/HTTPS만 허용, gopher://, file:// 차단)
if (!['http:', 'https:'].includes(parsedUrl.protocol)) {
return res.status(400).json({ error: 'UNSUPPORTED_PROTOCOL' });
}
// 2. Path Traversal 원천 방지: 사용자 입력 파일명 폐기 -> UUID 기반 안전한 파일명 강제
const safeFilename = `${crypto.randomUUID()}.webp`;
const targetDir = path.join(STORAGE_ROOT, category);
const finalPath = path.resolve(targetDir, safeFilename);
// 정규화된 경로가 STORAGE_ROOT 하위인지 검증 (Canonicalization Guard)
if (!finalPath.startsWith(STORAGE_ROOT)) {
return res.status(403).json({ error: 'PATH_TRAVERSAL_DETECTED' });
}
// 3. 이미지 리사이징 및 버퍼 재인코딩을 통한 악성 SVG/WebShell 무력화
const response = await fetch(imageUrl, { signal: AbortSignal.timeout(5000) });
const rawBuffer = Buffer.from(await response.arrayBuffer());
await sharp(rawBuffer)
.resize(500, 500, { fit: 'inside' })
.webp({ quality: 80 })
.toFile(finalPath);
return res.status(201).json({ message: 'PROCESSED_SUCCESSFULLY', resourceId: safeFilename });
}후속 체이닝: S3 프리사인드(Presigned) 업로드 및 Snyk 취약점 감사 연동
4단계 워크플로우
../../ 주입 및 메타데이터 IP 요청 시 400/403 차단 단언.🚀 레시피 C 실행 결과: [실전 사례 2] 멀티테넌트 SaaS 주문 조회 API의 IDOR/BOLA 수평 권한 탈취 격리
테넌트 간 데이터가 섞일 위험이 있는 SaaS 주문 단건 조회 API 핸들러를 레시피 C로 감사한 결과입니다.
AI 생성 출력 결과 (핵심 발췌)
[BOLA/IDOR 아키텍처 결함 발견]
- 취약점: CWE-639 사용자 제어 키를 통한 인가 우회 (BOLA / IDOR) | CVSSv3: 8.5 (High)
- 문제 라인: prisma.order.findUnique({ where: { id: req.params.orderId } })
- 결함 원인: 주문 PK(orderId)만으로 단건 조회를 수행하며, 세션 토큰의 tenantId 및 userId와의 소유권 일치 여부를 대조하지 않음.
- 공격 시나리오: 테넌트 A의 사용자가 테넌트 B의 orderId(UUIDv4 브루트포스 또는 유출된 ID)를 파라미터로 넘기면 테넌트 B의 결제 내역과 개인정보가 평문 반환됨.소유권 검증 및 RLS 격리 패치 코드 (TypeScript + Prisma)
import { Request, Response } from 'express';
import { prisma } from '../lib/prisma';
import { ForbiddenError, NotFoundError } from '../errors';
// 세션 토큰에서 추출된 인증 컨텍스트 인터페이스
interface AuthenticatedUser {
userId: string;
tenantId: string;
role: 'ADMIN' | 'MEMBER';
}
export async function getOrderSecurely(req: Request, res: Response) {
const user = req.user as AuthenticatedUser;
const { orderId } = req.params;
// 1. BOLA 원천 차단: ID 단독 조회가 아닌 [tenantId + orderId] 복합 조건 강제
const order = await prisma.order.findFirst({
where: {
id: orderId,
tenantId: user.tenantId, // 테넌트 격리 보장
// 일반 사용자는 본인이 생성한 주문만 열람 가능 (권한 세분화)
...(user.role !== 'ADMIN' ? { customerId: user.userId } : {})
},
select: {
id: true,
orderNumber: true,
totalAmount: true,
status: true,
createdAt: true,
// 민감한 결제 카드 토큰 등은 명시적으로 제외(Mass Exposure 방어)
}
});
if (!order) {
// 테넌트가 다르거나 존재하지 않는 리소스에 대해 동일한 404를 반환하여 ID 존재 유무 탐색(Enum Attack) 차단
return res.status(404).json({ error: 'RESOURCE_NOT_FOUND' });
}
return res.status(200).json({ data: order });
}후속 체이닝: PostgreSQL Row-Level Security (RLS) 정책 자동 생성
where: { tenantId } 절을 실수로 누락하더라도 DB 레벨에서 트랜잭션별 app.current_tenant_id 세션 변수와 매칭되지 않는 행은 원천적으로 조회되지 않도록 차단하는 PostgreSQL Row-Level Security(RLS) DDL 쿼리를 생성해줘."3단계 워크플로우
4. 보안 취약점 탐지를 위한 4대 엔지니어링 원칙
5. 실전 투입용 플레이스홀더 템플릿
[역할 정의]
당신은 엄격한 화이트박스 코드 감사와 침투 테스트를 전문으로 하는 Principal AppSec Architect입니다.
[대상 환경 및 아키텍처 사양]
- 언어 및 런타임: [예: Node.js 20 / Python 3.12 / Java 21 / Go 1.22]
- 프레임워크 및 DB: [예: Express + Prisma / FastAPI + SQLAlchemy / Spring Boot + JPA]
- 배포 인프라: [예: AWS ECS / Kubernetes / Lambda / Cloudflare Workers]
[감사 대상 소스 코드][여기에 보안 검토를 진행할 코드를 붙여넣으십시오]
[보안 감사 요구사항]
1. OWASP Top 10 및 CWE 기준으로 식별된 취약점을 분류하고 CVSSv3 점수를 추정할 것.
2. 해당 결함을 실제 악용할 수 있는 공격 페이로드(HTTP 요청 / 입력값 PoC)를 제시할 것.
3. 취약 코드를 안전한 표준 API 및 심층 방어 원칙으로 전면 수정한 프로덕션 패치 코드를 작성할 것.
4. 악성 입력을 주입했을 때 안전하게 차단되는지 검증하는 보안 단위 테스트를 작성할 것.6. 프롬프트 활용 팁 & 주의사항
npm audit이나 Trivy 같은 전용 SCA 도구에 맡기고, AI 프롬프트로는 비즈니스 인가 결함(BOLA)과 커스텀 데이터 파이프라인의 설계상 결함을 발굴하는 데 집중하십시오.