피드로 돌아가기
I Inherited a NestJS Codebase. The First Lint Run Found 6 Vulnerabilities.
Dev.toDev.to
Security

40K 라인 코드베이스의 6가지 보안 취약점을 12초 만에 식별한 정적 분석 전략

I Inherited a NestJS Codebase. The First Lint Run Found 6 Vulnerabilities.

Ofri Peretz2026년 5월 28일8intermediate

Context

CI, Test, TypeScript Strict Mode를 갖춘 환경에서도 인간 리뷰어가 인지하기 어려운 '부재(Absence)의 결함'이 존재함. 특히 NestJS의 Decorator 기반 구조에서 Guard, Pipe, Throttle 등의 설정 누락이 런타임 보안 취약점으로 이어지는 한계 확인.

Technical Solution

  • Structural Analysis 기반의 eslint-plugin-nestjs-security 도입을 통한 보안 설정 강제화
  • @Controller 및 Route Handler의 @UseGuards 누락을 감지하는 require-guards 룰 적용
  • class-transformer의 @Exclude() 데코레이터 미사용 필드 스캔을 통한 Sensitive Data Leakage 방지
  • @nestjs/throttler 연동 및 @Throttle 데코레이터 존재 여부를 검증하여 Rate Limiting 공백 제거
  • TypeScript 타입과 런타임 검증의 괴리를 해결하기 위한 Global ValidationPipe 등록 및 @Body() 파라미터 검증
  • debug/internal 경로의 Guard 부재 및 process.env 직접 반환 로직을 차단하는 엔드포인트 검사

- NestJS 프로젝트 내 eslint-plugin-nestjs-security 도입 및 6가지 핵심 보안 룰 활성화 - ValidationPipe의 whitelist 옵션을 활성화하여 DTO 외의 임의 필드 유입 차단 - 모든 Entity 필드 중 민감 정보에 @Exclude() 데코레이터 적용 여부 전수 조사 - 인프라 계층(Nginx 등)의 Rate Limit 설정과 애플리케이션 경로 일치 여부 교차 검증

원문 읽기