피드로 돌아가기
Mitigating Denial-of-Service Vulnerability from Unrecoverable Stack Space Exhaustion for React, Next.js, and APM Users
Node.js BlogNode.js Blog
Backend

Node.js가 async_hooks 활성화 시 스택 오버플로우 복구 경로 차단으로 인한 DoS 취약점을 January 2026 보안 릴리스를 통해 완화

Mitigating Denial-of-Service Vulnerability from Unrecoverable Stack Space Exhaustion for React, Next.js, and APM Users

2026년 1월 13일10advanced

Context

Node.js는 스택 공간 고갈에서 복구하기 위해 최선의 노력으로 캐치 가능한 에러를 던지는데, async_hooks가 활성화되면 이 복구 경로가 차단되어 프로세스가 즉시 exit code 7로 종료된다. React Server Components, Next.js, 그리고 대부분의 APM 도구(Datadog, New Relic, Dynatrace, Elastic APM, OpenTelemetry)가 AsyncLocalStorage 또는 async_hooks.createHook을 사용하므로 이 취약점이 광범위하게 노출된다.

Technical Solution

  • Node.js 런타임에서 async_hooks 활성화 시 스택 오버플로우 동작을 일관성 있게 처리: 미지정 동작을 더 예측 가능한 상태로 변경하여 재현 빈도 감소
  • 프레임워크 및 라이브러리에서 재귀 깊이 제한: 공격자가 제어할 수 있는 입력에 대해 재귀 깊이 상한을 명시적으로 제한하거나 재귀 회피
  • AsyncLocalStorage 사용 애플리케이션에서 입력 검증 강화: 깊게 중첩된 JSON 또는 데이터 구조에 대한 깊이 검증 로직 추가
  • APM 도구 및 프레임워크 사용자의 즉시 업그레이드: January 13, 2026 패치 버전으로 업데이트
  • 스택 오버플로우 복구를 보안 보장으로 간주하지 않기: 최선의 노력 동작에 의존하지 않고 명시적 방어 메커니즘 구현

Key Takeaway

언어 런타임의 미지정 동작(unspecified behavior)에 서비스 가용성을 의존하면 생태계 전체가 위험에 노출될 수 있으므로, 프레임워크와 라이브러리는 공격자 제어 입력에 대해 명시적인 경계값 검증 및 제한을 구현해야 한다.


React Server Components, Next.js, 또는 APM 도구를 사용하는 프로덕션 애플리케이션에서는 깊게 중첩된 입력 데이터(JSON 배열, 트리 구조 등)의 깊이를 검증하고 상한을 설정함으로써, async_hooks 활성화 환경에서 재귀 기반 스택 오버플로우로 인한 프로세스 강제 종료를 사전에 차단할 수 있다.

원문 읽기