뉴스 목록
The Hacker News2026. 09. 23.

심각한 Next.js ImageResponse 취약점, 조작된 SVG 입력을 통한 서버 코드 실행 가능

한 줄 요약

Next.js의 소셜 미리보기 이미지 생성 기능인 ImageResponse에서 심각한 취약점(CVE-2026-94545, CVSS 9.5)이 발견됐습니다. 공격자가 URL 등을 통해 제어할 수 있는 값을 앱이 이미지 생성에 그대로 사용할 경우, 서버에서 임의의 코드를 실행(RCE, 원격에서 서버를 마음대로 조작할 수 있는 공격)할 수 있습니다. Next.js 16.2.0~16.3.5 버전(Node.js 런타임)이 영향을 받으며, 2026년 9월 22일 배포된 16.3.6 버전으로 즉시 업그레이드해야 합니다. 패치 전까지는 사용자 입력값이 SVG 콘텐츠·속성·스타일에 삽입되지 않도록 코드를 수정하는 것이 임시 대응책입니다.

사건

Next.js의 ImageResponse 기능에서 CVE-2026-94545 취약점이 발견됐다. 내부적으로 사용하는 Satori 라이브러리가 SVG 출력 시 특정 값을 제대로 이스케이프하지 않아, 조작된 입력값이 SVG 코드로 해석될 수 있다.

영향

공격자가 제어하는 값(예: URL 파라미터)이 이미지 생성 코드에 전달되는 경우 서버에서 임의 코드 실행이 가능하다. CVSS 9.5로 심각 등급이며, Next.js 16.2.0~16.3.5의 Node.js 런타임 환경이 모두 대상이다.

원인

Satori 라이브러리가 SVG를 생성하는 과정에서 외부 입력값을 충분히 검증·이스케이프하지 않았고, Next.js는 이 SVG를 의존하는 다른 라이브러리로 전달해 코드 실행으로 이어질 수 있다.

대응

2026년 9월 22일 Next.js 16.3.6이 패치 버전으로 출시됐다(`npm install next@16.3.6`). Satori를 직접 사용하는 개발자는 Satori 0.33.5로 업데이트해야 한다. 즉시 업그레이드가 어려우면 사용자 입력값이 SVG 콘텐츠·속성·스타일로 전달되지 않도록 코드를 수정해야 한다.

실무 포인트

`next/og`에서 ImageResponse를 import해 사용하는 라우트 핸들러와 opengraph-image 파일을 우선 점검해야 한다. `npm audit`은 이 취약점을 탐지하지 못하므로 직접 Next.js 버전을 확인해야 하며, 16.2 라인의 수정 버전은 별도 제공되지 않으므로 반드시 16.3.6으로 이전해야 한다.

본문

Swati Khandelwal · 2026년 9월 23일 · 취약점 / 웹 보안

Next.js의 새로운 보안 취약점으로 인해, 공격자가 소셜 미리보기 이미지(Open Graph 등)를 생성하는 기능인 ImageResponse를 통해 서버에서 코드를 실행할 수 있다고 Vercel이 밝혔다.

이 위험은 앱이 요청 URL에서 읽은 텍스트처럼 공격자가 제어할 수 있는 값을 이미지 생성에 사용할 때 발생한다. Next.js를 개발한 Vercel은 9월 22일 버전 16.3.6에서 이 결함을 수정했다.

CVE-2026-94545로 추적되는 이 취약점은 ImageResponse가 기본적으로 사용되는 Node.js 런타임 환경에서 실행될 때 Next.js 16.2.0~16.3.5 버전에 영향을 미친다. Vercel의 보안 권고는 이를 심각(critical) 등급으로, CVSS 점수는 9.5로 평가한다. Edge 버전의 ImageResponse와 Next.js 15는 영향을 받지 않는다.

ImageResponse는 Vercel의 라이브러리인 Satori를 사용해 이미지 레이아웃을 SVG 코드로 변환한 뒤 최종 PNG를 생성한다. 권고에 따르면, 영향을 받는 앱은 이미지 생성 중 "공격자가 제어하는 값을 SVG 콘텐츠, 속성 또는 스타일에 전달"하는 경우다.

권고의 예시는 요청 URL에서 값을 가져와 SVG title 요소 안에 삽입하는 경우를 보여준다. div 내부의 제목처럼 일반 요소 안의 텍스트도 해당되는지는 명시하지 않는다.

앱에서 해당 기능이 사용되는 위치를 찾으려면, 예를 들어 라우트 핸들러와 opengraph-image 파일에서 next/og로부터 import된 ImageResponse를 확인하면 된다. 라우트 핸들러는 요청이 들어올 때 이미지를 생성하고, opengraph-image 파일은 빌드 시 또는 요청 시 이미지를 생성할 수 있다.

The Hacker News가 9월 23일 기준으로 확인한 결과, 이 취약점을 악용한 공격 사례나 공개된 익스플로잇 코드는 발견되지 않았다.

수정 버전은 Next.js 16.3.6이며, npm install next@16.3.6으로 설치한다. 9월 23일 기준 npm 레지스트리에는 16.2 라인에 대한 수정 릴리즈가 등록되어 있지 않으므로, 16.2를 사용하는 앱은 16.3.6으로 이전해야 한다. Next.js 15.5.26은 15.5 라인에서 next/og에 대한 추가적인 보안 강화를 제공한다.

업그레이드를 즉시 진행하기 어려운 경우, 권고의 임시 완화 방법은 Node.js ImageResponse가 렌더링하는 SVG 콘텐츠, 속성 및 스타일에 공격자가 제어하는 값이 전달되지 않도록 하는 것이다. 권고는 영향을 받지 않는 Edge 버전으로 전환을 제안하지 않으며, Next.js 문서에서도 Edge 런타임을 더 이상 사용되지 않는(deprecated) 기능으로 표시하고 있다.

The Hacker News가 9월 23일 확인한 결과, npm audit은 영향받는 버전인 Next.js 16.3.5를 탐지하지 못했다. 또한 권고는 GitHub Advisory Database에도 아직 등재되지 않았고, CVE-2026-94545에 대한 CVE 레코드도 게시되지 않았다.

Next.js 버전을 직접 확인해야 한다. Satori는 Next.js 패키지 내부에 번들로 포함되어 있으므로, 잠금 파일(lockfile)에 Next.js의 의존성으로 표시되지 않는다.

Vercel의 권고 및 공지에는 Vercel에 호스팅된 앱이 보호되는지 여부가 명시되어 있지 않다. 8월에 수정된 두 건의 심각한 Next.js 취약점에 대해서는, 호스팅된 앱이 보호되며 업그레이드가 필요 없다고 밝힌 바 있다.

Vercel의 권고 및 공지는 또한 패치 전에 영향받는 라우트가 악용되었는지 확인할 방법도 제공하지 않는다. 영향받는 버전은 Next.js 16.2가 출시된 3월 18일부터 사용 가능했다.

이 버그의 근본 원인은 Satori에 있다. 같은 날 게시된 Satori의 자체 권고에 따르면, 특정 값이 적절한 이스케이프 처리 없이 SVG 출력에 포함됐다. 특수하게 조작된 값은 이를 통해 일반 텍스트가 아닌 SVG 코드로 해석될 수 있다.

Vercel에 따르면, Next.js에서 이러한 값은 Next.js가 의존하는 다른 라이브러리의 취약점까지 도달해 코드 실행으로 이어질 수 있다. 해당 라이브러리의 이름은 공개하지 않았다.

Satori의 권고는 동일한 CVE를 보통(moderate) 등급, 점수 5.3으로 평가하며, 영향도는 SVG 출력이 어떻게 사용되는지에 따라 달라진다고 밝혔다. Satori를 직접 사용하는 개발자는 수정 사항이 포함된 버전 0.33.5로 업데이트해야 한다.

출처
The Hacker News · thehackernews.com
원문 보기

분야별 뉴스

관심 분야의 보안 이슈를 모아 보세요.

TORUN SECURITY

투런이 제공하는 보안 솔루션

공격 표면 관리부터 엔드포인트·내부정보 보호까지, 기업 환경에 맞는 보안 솔루션을 투런이 함께 설계합니다.