Next.js 보안 이슈(CVE-2025-29927)


최근 Next.js에서 꽤 심각한 보안 취약점이 발견되었어요. 이름은 조금 어렵게 느껴지는 CVE-2025-29927, 해당 보안 취약점의 내용을 쉽게 풀어보면 **"우리가 보호하려고 만든 인증 시스템을 우회할 수 있는 구멍이 생겼다"**는 내용이에요.
이번 글에서는 “이게 무슨 문제였는지”, “어떤 피해가 발생할 수 있는지” 그리고 “해결하려면 어떻게 해야 하는지” 등을 이해하기 쉽도록 공유하려고 해요.
어떤 문제가 있었던 걸까?
Next.js에서는 내부적으로 사용하는 x-middleware-subrequest
라는 **특별한 헤더(header)**가 있어요. 이건 미들웨어(Middleware)에서 요청을 구분할 때 쓰이는 내부 용도인데요, 평소에는 외부에서 건드릴 수 없게 설계되어 있어야 해요.
그런데 문제는…
공격자가 이 x-middleware-subrequest
라는 헤더를 직접 추가해서 요청을 보내면, Next.js가 **"이건 내부 요청이야~"**라고 착각해서 미들웨어를 건너뛰게 된다는 점이에요. 😱
실생활에 비유하면?
마치 이런 상황과 비슷해요:
제가 근무하는 회사 건물에는 사원증을 태그 해야만 열리는 보안 게이트가 있어요.
출입 권한이 있는 직원만 게이트를 통과할 수 있죠.
그런데 어떤 사람이 내부 시스템에 등록되지 않은 가짜 사원증을 들고 와서
가짜 사원증 안에 “이건 내부 사원증입니다”라는 정보를 강제로 삽입해서 게이트에 태그했더니,
시스템이 그걸 그대로 믿고 게이트를 열어준 상황이에요.
왜 문제가 될까?
원래 이 게이트는 내부 시스템에서 등록된 사원증에만 열리도록 설계되어 있었어요. 하지만 지금은 외부에서 만든 가짜 사원증에 진짜 사원증인 것처럼 정보만 삽입해도 게이트가 열리는 상태인 거죠.
즉,
보안 게이트 = 인증 미들웨어
사원증 = 로그인된 세션이나 토큰
가짜 사원증 =
x-middleware-subrequest
헤더보안 게이트가 열리는 상황 = 미들웨어 우회
어떤 피해가 생길 수 있나요?
이 취약점을 악용하면
로그인하지 않아도 로그인된 사용자처럼 민감한 페이지에 접근할 수 있어요.
인증, 권한 체크를 미들웨어에서 처리했다면 그걸 완전히 우회할 수 있어요.
/dashboard
,/admin
,/settings
같은 인증이 필요한 페이지에 무단 접근이 가능해져요.
영향 받는 대상은?
이 취약점은 다음 조건에 해당하면 영향을 받을 수 있어요:
Next.js 11.1.4 ~ 13.5.6, 14.0 ~ 14.2.24, 15.0 ~ 15.2.2 버전 사용 중
next start
로 직접 서버를 띄우는 경우output: 'standalone'
설정을 사용하는 경우→ 즉, 자체 서버에서 Next.js를 돌리고 있다면 위험합니다!
반면, Vercel이나 Netlify 같은 호스팅 서비스를 이용하고 있다면 걱정을 안 해도 돼요.
이미 Vercel, Netlify에서 차단 처리를 조치해놨어요.
해결 방법
1. 🔄 업데이트하세요
Next.js 팀이 아래 버전에서 이 취약점을 패치했어요:
15.x → 15.2.3
14.x → 14.2.25
13.x → 13.5.9
12.x → 12.3.5
npm install next@latest
# 또는
yarn add next@latest
2. 🧱 임시 차단도 가능해요
지금 당장 업데이트할 수 없는 상황이라면, 외부에서 들어오는 요청 중 x-middleware-subrequest
라는 헤더를 가진 요청은 모두 차단하는 것도 방법이에요.
// Express 예시
app.use((req, res, next) => {
if (req.headers['x-middleware-subrequest']) {
return res.status(403).send('Forbidden');
}
next();
});
개발할 때 주의할 점
앞으로 이런 보안 이슈에 주의하기 위해서는 다음과 같은 조치를 취해야 해요:
인증/권한 체크를 꼭 미들웨어뿐 아니라 서버 핸들러에서도 추가해 주세요.
headers, cookies 등 사용자가 조작 가능한 정보에는 항상 검증 로직이 필요해요.
next start
로 직접 띄우는 프로덕션 환경이라면 정기적인 보안 점검도 중요해요.
개발 커뮤니티의 여론
이번 CVE-2025-29927 보안 취약점은 구조적으로 꽤 치명적인 문제였음에도, 공식 패치가 적용되기까지 2주 이상이 소요되었다는 점에서 커뮤니티에서는 적잖은 우려가 있었어요.
Hacker News에서는 다음과 같은 목소리가 나왔어요:
"이 정도로 심각한 이슈라면, 보안 공지와 임시 패치라도 먼저 나왔어야 하는 것 아닌가?"
"Next.js 같은 대규모 프레임워크에서 인증 우회가 가능한 상태가 2주간 방치된 건 굉장히 위험하다."
특히 자가 호스팅 중인 개발자나 기업들은 Vercel과 같은 플랫폼에서는 이미 차단된 문제를 스스로 막아야 했기 때문에, 사전 안내나 경고가 부족했다는 점을 지적하기도 했어요.
이런 상황은 단순한 개발 이슈가 아니라 서비스의 신뢰성과도 연결되기 때문에, 앞으로는 보안 리스크가 발견됐을 때 더 빠르고 투명한 커뮤니케이션이 필요하다는 공감대가 형성되고 있어요.
결론
저 역시 회사와 개인 프로젝트 모두에서 Next.js를 자주 활용하고 있는 개발자로서, 이번 보안 이슈를 접한 후 신속하게 대응 조치를 취해 별다른 문제는 없었지만, Next.js에 대한 신뢰감이 일부 훼손된 것은 부정할 수 없는 사실이에요.
이번 취약점은 단순히 기술적 결함을 넘어, Next.js가 내포한 구조적 리스크와 함께 보안 이슈에 대한 대응 체계 전반을 재점검해볼 필요가 있어 보여요.
더불어, 우리 역시 이러한 보안 이슈를 빠르게 캐치하고 신속하게 대응할 수 있는 체계를 갖추는 것이 중요하다고 생각해요. 단순히 문제가 발생한 후 해결하는 것을 넘어서, 유사한 취약점이 발생해도 실제 서비스 운영에는 영향을 주지 않도록 사전에 방어할 수 있는 보안 설계와 점검 체계를 마련해야 해요.
참고 자료
Subscribe to my newsletter
Read articles from 박정환 directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
