FixVibe
Covered by FixVibemedium

next.config.js의 Next.js 보안 헤더 구성 오류

헤더 관리를 위해 next.config.js를 사용하는 Next.js 애플리케이션은 경로 일치 패턴이 정확하지 않은 경우 보안 허점에 취약합니다. 이 연구에서는 와일드카드 및 정규식 구성이 잘못되어 민감한 경로에서 보안 헤더가 누락되는 방식과 구성을 강화하는 방법을 살펴봅니다.

CWE-1021CWE-200

영향

누락된 보안 헤더는 클릭재킹, 크로스 사이트 스크립팅(XSS)을 수행하거나 서버 환경 [S2]에 대한 정보를 수집하는 데 악용될 수 있습니다. Content-Security-Policy(CSP) 또는 X-Frame-Options와 같은 헤더가 경로 전체에 일관되게 적용되는 경우 공격자는 보호되지 않은 특정 경로를 표적으로 삼아 사이트 전체 보안 제어 [S2]를 우회할 수 있습니다.

근본 원인

Next.js를 사용하면 개발자는 headers 속성 [S2]를 사용하여 next.config.js에서 응답 헤더를 구성할 수 있습니다. 이 구성은 와일드카드 및 정규식 [S2]를 지원하는 경로 일치를 사용합니다. 보안 취약점은 일반적으로 다음과 같은 이유로 발생합니다.

  • 불완전한 경로 적용 범위: 와일드카드 패턴(예: /path*)은 의도한 모든 하위 경로를 포함하지 않아 보안 헤더 [S2] 없이 중첩된 페이지를 남길 수 있습니다.
  • 정보 공개: 기본적으로 Next.js에는 X-Powered-By 헤더가 포함될 수 있습니다. 이 헤더는 poweredByHeader 구성 [S2]를 통해 명시적으로 비활성화하지 않는 한 프레임워크 버전을 표시합니다.
  • CORS 잘못된 구성: headers 어레이 내에서 Access-Control-Allow-Origin 헤더를 부적절하게 정의하면 중요한 데이터 [S2]에 대한 출처 간 무단 액세스가 허용될 수 있습니다.

구체적인 수정

  • 감사 경로 패턴: next.config.js의 모든 source 패턴이 적절한 와일드카드(예: /:path*)를 사용하여 필요한 [S2]에 전역적으로 헤더를 적용하는지 확인하세요.
  • 핑거프린팅 비활성화: X-Powered-By 헤더가 [S2]로 전송되는 것을 방지하려면 next.config.js에서 poweredByHeader: false를 설정합니다.
  • CORS 제한: headers 구성 [S2]에서 와일드카드가 아닌 신뢰할 수 있는 특정 도메인으로 Access-Control-Allow-Origin를 설정합니다.

FixVibe가 이를 테스트하는 방법

FixVibe는 애플리케이션을 크롤링하고 다양한 경로의 보안 헤더를 비교하여 활성 게이트 프로브를 수행할 수 있습니다. FixVibe는 다양한 경로 깊이에 걸쳐 X-Powered-By 헤더와 Content-Security-Policy의 일관성을 분석함으로써 next.config.js의 구성 격차를 식별할 수 있습니다.