{
  "task_id": "task-2111",
  "audited_at": "2026-04-23T11:22:00",
  "auditor": "loki (security-team)",
  "scope": "설정 변경 (.env + CORS + API URL 통일)",
  "findings": [
    {
      "id": "F-01",
      "severity": "INFO",
      "category": "CORS 설정",
      "file": "server/main.py (140~157줄)",
      "title": "CORS allow_origins에 프로덕션 도메인 추가 — 정상",
      "detail": "기존에는 Tailscale 내부망(aidevserver.tail2cdab6.ts.net) 및 localhost만 허용되어 있었으나, 이번 변경에서 'https://insuro.biz', 'https://www.insuro.biz' 2개 도메인을 추가함. 구체적인 도메인 목록 방식(allowlist)이므로 와일드카드(*) 대비 안전한 구성임.",
      "risk": "없음 — 추가된 도메인이 서비스 공식 도메인으로 최소 권한 원칙에 부합",
      "status": "PASS"
    },
    {
      "id": "F-02",
      "severity": "LOW",
      "category": "CORS 설정 — allow_methods / allow_headers",
      "file": "server/main.py (154~155줄)",
      "title": "allow_methods=['*'], allow_headers=['*'] 사용 (기존 설정)",
      "detail": "이번 변경사항은 아니지만 기존부터 모든 HTTP 메서드 및 헤더를 허용하고 있음. allow_credentials=True와 함께 사용 시 브라우저는 이미 구체적인 origin 목록이 있어야 하므로 직접적 위험은 낮음. 그러나 불필요한 메서드(예: TRACE, CONNECT)까지 허용될 수 있으므로 명시적 제한을 권고.",
      "risk": "낮음 — origin이 allowlist로 제한되어 있어 CORS 미스구성에 의한 직접 CSRF 위험은 제한적",
      "recommendation": "allow_methods=['GET','POST','PUT','PATCH','DELETE','OPTIONS'], allow_headers=['Authorization','Content-Type'] 로 명시 제한 권고",
      "status": "WARN (기존 설정, 이번 변경 범위 외)"
    },
    {
      "id": "F-03",
      "severity": "INFO",
      "category": "API URL 설정 통일",
      "file": "src/config/api.ts",
      "title": "INSURO_API_BASE 중앙화 — 보안 개선",
      "detail": "기존 각 파일에서 import.meta.env.VITE_API_URL || 'localhost:8001' 형태로 하드코딩된 fallback URL을 사용하던 패턴을 src/config/api.ts의 INSURO_API_BASE import로 통일함. Fallback도 localhost:8001에서 https://aidevserver.tail2cdab6.ts.net:10000(TLS 강제)으로 변경되어 평문 HTTP fallback이 제거됨. 보안 개선에 해당.",
      "risk": "없음 — URL 중앙화로 관리 단일화 및 HTTPS fallback 전환",
      "status": "PASS"
    },
    {
      "id": "F-04",
      "severity": "INFO",
      "category": "인증 처리 — API 호출",
      "file": "CrmMessenger.tsx, CopilotPanel.tsx, SummaryTab.tsx",
      "title": "모든 API 호출에 Authorization Bearer 토큰 포함",
      "detail": "변경된 3개 프론트 파일 모두 supabase.auth.getSession()으로 JWT를 가져와 Authorization: Bearer 헤더로 전달하고 있음. 토큰 없을 시 요청 차단 처리도 구현되어 있음.",
      "risk": "없음 — 인증 헤더 정상 구현",
      "status": "PASS"
    },
    {
      "id": "F-05",
      "severity": "INFO",
      "category": "XSS",
      "file": "CrmMessenger.tsx, CopilotPanel.tsx, SummaryTab.tsx",
      "title": "dangerouslySetInnerHTML 미사용 — XSS 위험 없음",
      "detail": "3개 파일 모두 메시지 내용을 {msg.content}, {analysis}, {summary.summary_text} 형태로 텍스트 바인딩 처리. React의 기본 이스케이프를 활용하며 dangerouslySetInnerHTML을 사용하지 않음.",
      "risk": "없음",
      "status": "PASS"
    },
    {
      "id": "F-06",
      "severity": "INFO",
      "category": "SSRF",
      "file": "src/config/api.ts, server/main.py",
      "title": "API URL이 환경변수로 고정 — SSRF 위험 없음",
      "detail": "프론트엔드에서 API URL은 빌드 타임 환경변수(VITE_INSURO_API_URL)로 결정되며 사용자 입력이 URL 구성에 사용되지 않음. 서버 측 외부 요청도 Naver API 등 고정 URL 사용.",
      "risk": "없음",
      "status": "PASS"
    },
    {
      "id": "F-07",
      "severity": "INFO",
      "category": "URL 인젝션 방어",
      "file": "src/components/crm/SummaryTab.tsx (120줄)",
      "title": "검색 쿼리 encodeURIComponent 처리 — 정상",
      "detail": "검색 API 호출 시 q=${encodeURIComponent(searchQuery)} 로 URL 인코딩 처리되어 있어 URL 인젝션 방지가 구현되어 있음.",
      "risk": "없음",
      "status": "PASS"
    },
    {
      "id": "F-08",
      "severity": "INFO",
      "category": ".env 환경변수",
      "file": ".env",
      "title": "VITE_INSURO_API_URL 추가 — 보안 문제 없음",
      "detail": "추가된 VITE_INSURO_API_URL=https://api.insuro.biz는 공개 URL로 민감정보에 해당하지 않음. VITE_ 접두사로 클라이언트 번들에 포함될 값이며 공개 API 도메인이므로 적절함.",
      "risk": "없음",
      "note": "기존 .env의 SERVICE_ROLE_KEY, VAPID_PRIVATE_KEY, NAVER_CLIENT_SECRET 등은 이번 변경과 무관한 기존 이슈로 별도 처리 필요",
      "status": "PASS"
    }
  ],
  "overall": "PASS",
  "note": "이번 task-2111의 변경사항(VITE_INSURO_API_URL 추가, CORS 도메인 2개 추가, API URL 중앙화)은 모두 보안적으로 적절함. CORS는 와일드카드 없이 구체적 origin allowlist 방식을 유지하고 있으며, API URL 통일로 평문 HTTP localhost fallback이 제거되어 오히려 보안이 개선됨. 기존 allow_methods=['*'] allow_headers=['*'] 설정(F-02)은 이번 변경 범위 외이나 향후 명시적 제한 권고. 기존 .env 민감정보 git 추적 문제는 이번 범위 외."
}
