넥스트JS, 테넌트 간 캐시 노출 등 보안 7건 수정
넥스트JS(Next.js) 팀이 11월 3일 보안 릴리스를 내놨습니다. 수정판은 v16.4.5(Active LTS)와 v15.5.29(Maintenance LTS) 두 갈래로 나왔고, 이번에 고쳐진 취약점은 모두 7건입니다. 이 가운데 1건이 High 등급이고 나머지는 Medium입니다. 대부분 Cache Components를 쓰는 애플리케이션에서 캐시가 엉뚱한 요청에 재사용되면서 생기는 문제라, 멀티테넌트 서비스를 올려둔 쪽이라면 먼저 확인해야 합니다.
High 등급은 unstable_cache와 use cache를 함께 쓸 때 테넌트 간 캐시 내용이 새는 문제(GHSA-mfr8-8qww-v76h)입니다. 같은 public use cache 함수를 직접 호출하기도 하고 unstable_cache 안에서도 호출하는 구조에서, 콜드 캐시가 채워지는 순간 unstable_cache 경로로 들어온 동시 요청이 다른 요청의 결과를 그대로 받아버립니다. 그 값이 캐시에 저장되고, 이후 같은 인자로 들어온 호출에게 재검증이나 축출 전까지 계속 나갑니다. 테넌트 식별자 같은 root parameter로 데이터를 가르는 서비스라면 다른 테넌트의 데이터가 그대로 노출될 수 있습니다.
Medium 쪽도 성격이 비슷합니다. 중첩된 use cache 함수에서 root parameter 경계를 넘어 콘텐츠가 섞이는 문제, 서로 다른 바이너리 인자가 같은 캐시 식별자로 묶여 다른 사용자 결과를 받는 문제, 자체 호스팅으로 next start를 돌릴 때 인증 없는 요청이 공유 셸을 오염시키는 문제가 포함됐습니다. 여기에 HTTP/1.1 리버스 프록시 뒤에서 압축 응답 프레이밍이 어긋나 응답이 다른 클라이언트에게 전달되는 문제, Edge 라우트에서 NextResponse.cookies.set()으로 설정한 쿠키가 내부 헤더 x-middleware-set-cookie로 노출돼 HttpOnly 쿠키까지 같은 오리진 자바스크립트가 읽을 수 있는 문제, 이미지 최적화에서 SVG 거부 설정을 우회하는 문제도 함께 고쳐졌습니다.
대응은 의존성 버전만 올리면 됩니다.
npm install next@15.5.29(15.5 계열)npm install next@16.4.5(16.x 계열)
공지에는 실제 악용이 확인됐다는 언급은 없습니다. 다만 Cache Components를 켜고 멀티테넌트나 로케일별로 캐시를 나눠 쓰는 앱, 그리고 자체 호스팅으로 next start를 돌리는 환경이 영향 범위라 영향도가 작지 않습니다. 운영 중인 서비스가 여기에 해당하면 패치를 미루지 말고 올리는 편이 좋아 보입니다.
로그인 후 답글을 남길 수 있습니다.