CVE-2026-44578은 Next.js의 WebSocket 업그레이드 처리 경로를 통해 인증 없이 내부 자원·클라우드 메타데이터로 요청을 보낼 수 있는 SSRF 취약점이다.
2026년 5월 공개된 이 결함은 특정 버전대 Next.js를 쓰는 약 7.9만 개 앱에 영향을 준 것으로 보고됐으며, 클라우드 메타데이터 접근으로 자격증명 탈취까지 이어질 수 있다.
이 글은 자주 발생하는 실수 패턴, 표준 구현 코드, 30초 자가진단, 24시간 패치 순서를 정리했다.
한눈에 보는 핵심
Q. 우리 앱이 영향받는지 어떻게 아나요? A. Next.js 버전을 확인하고 공식 보안 권고의 영향 버전대와 대조하세요. 영향 버전이면 즉시 패치 릴리스로 업그레이드하는 것이 1순위입니다. Q. 개발 서버만 문제인가요? A. 개발용 WebSocket/HMR 경로가 외부에 노출된 배포에서 특히 위험합니다. 프로덕션에서 개발 엔드포인트 노출 여부를 반드시 점검해야 합니다. Q. 프레임워크 패치만 하면 끝인가요? A. 패치가 최우선이지만, 그와 별개로 서버 egress를 제한하고 메타데이터를 IMDSv2로 강제하면 유사 SSRF의 피해를 원천 축소할 수 있습니다.자주 발생하는 실수 패턴
| # | 패턴 | 위험도 |
|---|---|---|
| 1 | 영향 버전대 Next.js를 패치 없이 운영 | 치명 |
| 2 | 개발용 WebSocket/HMR 엔드포인트를 외부 노출 | 높음 |
| 3 | WebSocket 업그레이드 요청의 origin·host 미검증 | 높음 |
| 4 | 클라우드 메타데이터를 IMDSv1(토큰 불필요)로 방치 | 높음 |
| 5 | 앱 서버 egress 무제한 — 콜백·유출 통로 | 중간 |
표준 구현 코드
// 1) 최우선: 패치 버전으로 업그레이드
// package.json → next를 보안 권고가 지정한 최신 패치로
// 2) WebSocket 업그레이드 origin 검증(리버스 프록시/서버)
const ALLOW = new Set(["https://app.example.com"]);
server.on("upgrade", (req, socket, head) => {
const origin = req.headers["origin"];
if (!ALLOW.has(origin)) { // 허용 origin만 업그레이드
socket.destroy();
return;
}
// 개발용 HMR 경로는 프로덕션에서 비활성/차단
});
// 3) 클라우드단: 메타데이터 IMDSv2(토큰 필수)로 강제
핵심은 "동작하는 코드"와 "안전한 코드"가 다르다는 점이다.
AI 코딩 도구는 기능 충족 코드를 우선 출력하므로 보안 분기는 별도로 강제해야 한다.
미들웨어·정책·CI 게이트로 모든 경로에 일괄 적용하는 것이 표준이다.
30초 자가진단
# 1. Next.js 버전 확인 후 보안 권고 영향 버전과 대조
npm ls next
# 2. 개발용 WS/HMR 경로가 외부에서 열려 있는지
curl -i -H "Connection: Upgrade" -H "Upgrade: websocket" https://yourapp/_next/webpack-hmr
# 3. 메타데이터 접근 시도(내부에서)
curl http://169.254.169.254/latest/meta-data/ # 응답 오면 IMDSv1 방치
위 시그널이 발견되면 결함이다. Next.js 공식 배포 문서를 함께 참조하라.
24시간 패치 절차
| 순위 | 조치 |
|---|---|
| 1 | 보안 권고가 지정한 패치 버전으로 즉시 업그레이드 |
| 2 | 개발용 WebSocket/HMR 엔드포인트 프로덕션 차단 |
| 3 | WebSocket 업그레이드 origin·host 화이트리스트 |
| 4 | 클라우드 메타데이터 IMDSv2 강제 |
| 5 | 앱 서버 egress를 허용 도메인만으로 제한 |
지금 해야 할 것
실무자: CodeScan 무료 스캔으로 30초 점검 후 우선순위대로 패치.
CISO·임원: 조직 전체 점검·규제 대응은 SENTRIX 30분 1:1 상담으로.
결함은 발견 즉시, 늦어도 24시간 안에 패치하는 것이 표준이다.