Почему ваш сайт на Node.js может внезапно «лечь»? Всё дело в баге, который разработчики V8 даже не считают за ошибку
NewsMakerВ зоне риска оказались системы, работающие на каждом втором проекте.
Разработчики Node.js выпустили обновления для устранения критической уязвимости, которая способна привести к отказу в обслуживании на большинстве приложений, работающих в продакшене. Проблема связана с некорректной обработкой переполнения стека при включённом модуле async_hooks — механизме, используемом для отслеживания жизненного цикла асинхронных операций.
Ошибка проявляется только при использовании async_hooks. В этом случае при достижении лимита глубины рекурсии из-за неочищенного пользовательского ввода Node.js аварийно завершает работу с кодом 7, не позволяя обработать исключение средствами самого приложения. Такой сбой делает уязвимыми системы, где глубина рекурсии может быть непредсказуемой, особенно если она зависит от внешних данных.
Особую обеспокоенность вызывает тот факт, что модуль AsyncLocalStorage, построенный на базе async_hooks, применяется во множестве популярных фреймворков и средств мониторинга, включая React Server Components, Next.js, а также инструменты от Datadog, New Relic, Dynatrace, Elastic и OpenTelemetry. Проблема затрагивает все версии Node.js, начиная с 8.x (первая с поддержкой async_hooks) и до 18.x включительно. Эти версии уже не поддерживаются, поэтому обновления для них не предусмотрены.
Уязвимость была устранена в версиях Node.js 20.20.0, 22.22.0, 24.13.0 и 25.3.0. Реализация исправления позволяет перехватывать переполнение стека и повторно выбрасывать ошибку в пользовательский код, вместо того чтобы воспринимать её как фатальную.
Разработчики Node.js выпустили обновления для устранения критической уязвимости, которая способна привести к отказу в обслуживании на большинстве приложений, работающих в продакшене. Проблема связана с некорректной обработкой переполнения стека при включённом модуле async_hooks — механизме, используемом для отслеживания жизненного цикла асинхронных операций.
Ошибка проявляется только при использовании async_hooks. В этом случае при достижении лимита глубины рекурсии из-за неочищенного пользовательского ввода Node.js аварийно завершает работу с кодом 7, не позволяя обработать исключение средствами самого приложения. Такой сбой делает уязвимыми системы, где глубина рекурсии может быть непредсказуемой, особенно если она зависит от внешних данных.
Особую обеспокоенность вызывает тот факт, что модуль AsyncLocalStorage, построенный на базе async_hooks, применяется во множестве популярных фреймворков и средств мониторинга, включая React Server Components, Next.js, а также инструменты от Datadog, New Relic, Dynatrace, Elastic и OpenTelemetry. Проблема затрагивает все версии Node.js, начиная с 8.x (первая с поддержкой async_hooks) и до 18.x включительно. Эти версии уже не поддерживаются, поэтому обновления для них не предусмотрены.
Уязвимость была устранена в версиях Node.js 20.20.0, 22.22.0, 24.13.0 и 25.3.0. Реализация исправления позволяет перехватывать переполнение стека и повторно выбрасывать ошибку в пользовательский код, вместо того чтобы воспринимать её как фатальную.