Next.js 보안 패치 나온 날, 서비스 3개 업그레이드한 기록
인증 없이 원격 코드가 실행되는 취약점 패치 소식에 Next.js를 16.3.3으로 올린 과정이에요. 1인 개발자가 저장소 3곳을 같은 날 업그레이드하며 확인한 것들을 정리했어요.
혼자 서비스 여러 개를 운영하다 보면 제일 긴장되는 알림이 있어요. 새 기능 요청도 아니고 서버 비용 청구서도 아니고, 프레임워크 보안 공지예요. 혹시 패치 노트를 열었다가 "인증 없이"라는 문구에 잠이 확 깬 적 없나요?
새벽 0시 48분의 커밋
이번 Next.js 패치 노트에는 인증 없이 원격 코드가 실행될 수 있는 취약점 수정이 들어 있었어요. 인증이 필요 없다는 건 공격자가 로그인하지 않아도 노려 볼 수 있다는 뜻이라, 이런 패치는 미룰 이유가 없어요.
그래서 그날 바로 세 서비스의 Next.js를 16.3.3으로 올렸어요. 커밋 시각을 보니 새벽 0시 48분이네요. 혼자 운영하면 이런 일은 결국 자기 전에 해치우게 되더라고요.
왜 3개를 같은 날 올렸나요
라이프케어로그에서 만드는 무료 금융계산기 플랜씨(plan-c), 법령·판례 검색 플랜엘(plan-l), 농구 동호회 운영 매니저 플랜비(plan-b)가 모두 같은 프레임워크 위에 있어요.
하나만 올리고 "나머지는 내일" 하면 그 내일이 잘 안 와요. 직접 해 보니 보안 패치는 저장소 3곳을 한 번에 도는 쪽이 오히려 부담이 적었어요. 같은 커밋 메시지를 그대로 쓰면 되니까 손도 덜 가고요.
업그레이드하면서 확인한 것들
버전 숫자만 바꾸고 끝내지 않았어요. 저장소마다 바뀐 파일은 package.json, pnpm-lock.yaml, pnpm-workspace.yaml 세 개예요.
lockfile diff를 열어 보면 내가 올린 패키지 말고 뭐가 딸려 왔는지 보여요. 패치 버전이라도 전이 의존성이 같이 움직일 수 있어서, 커밋 전에 한 번 훑는 습관을 들였어요.
빌드도 저장소마다 돌려 본 다음 커밋했어요. 깨질 가능성은 낮지만, 확인 없이 올린 커밋은 나중에 더 비싸게 돌아오더라고요.
커밋 메시지에 이유를 남겨요
커밋 제목은 버전만 적지 않고 "unauthenticated RCE fixes"처럼 왜 올렸는지를 붙였어요.
몇 달 뒤 이 lockfile 변경을 다시 만나면 제목 한 줄로 급했던 사정이 바로 읽혀요. 혼자 일하면 과거의 내가 남긴 기록이 유일한 동료거든요.
보안 패치는 미루면 이자가 붙는 빚이에요. 운영 중인 프로젝트가 있다면 프레임워크 보안 공지를 받아 보는 채널부터 하나 만들어 두세요. 새벽에 올리는 커밋이라도, 안 올리고 자는 것보다는 나았어요.
관련 글
댓글
아직 댓글이 없어요. 첫 댓글을 남겨주세요.