Node.js ha publicado actualizaciones para una vulnerabilidad de alta gravedad que los atacantes podrían aprovechar para corromper el proceso y provocar comportamientos inesperados, como fallos de la aplicación y ejecución de código potencialmente remoto (RCE).

La vulnerabilidad use-after-free, identificada como CVE-2021-22930, tiene que ver con la forma en que se manejan las transmisiones HTTP2 en este lenguaje de programación. Las vulnerabilidades de uso después de la liberación ocurren cuando un programa intenta acceder a un recurso en una dirección de memoria que se ha liberado previamente y ya no contiene el recurso. A Eran Levin se le ha atribuido el mérito de informar sobre esta vulnerabilidad.

Esto puede provocar daños en los datos o comportamientos inesperados como fallas de la aplicación o incluso ejecución remota de código (RCE) en algunos casos.

Las correcciones son para la última versión 16.6.0 de Node.js y también para las versiones anteriores 12.22.4 (LTS) y 14.17.4 (LTS).

El lanzamiento de la actualización se explica por el hecho de que las discusiones sobre la vulnerabilidad ya eran públicas: «Normalmente nos gusta avisar con anticipación y proporcionar versiones en las que los únicos cambios son correcciones de seguridad, pero dado que esta vulnerabilidad ya era pública, sentimos que era más importante obtener esta corrección rápidamente en versiones que ya estaban planificadas», anunció Daniel Bevenius, ingeniero de software principal y miembro del Comité Directivo Técnico (TSC) de NodeJS.

La vulnerabilidad se desencadena en los casos en que Node.js analiza los marcos entrantes RST_STREAM, sin código de error o un código de cancelación. En aplicaciones basadas en el protocolo HTTP/2, la trama RST_STREAM es enviada por cualquiera de los hosts con la intención de terminar una conexión. Por ejemplo, en una arquitectura cliente-servidor, si una aplicación cliente desea finalizar la conexión, enviaría una trama RST_STREAM al servidor.

Al recibir la trama, el servidor dejará de responder al cliente y eventualmente abortará la conexión. Cualquier trama de «DATOS» que el servidor estuviera a punto de enviar al cliente, podría descartarse.

Pero en el caso de las versiones vulnerables de Node.js, cuando el servidor recibe una trama RST_STREAM con un código de «cancelación» (nghttp2_cancel), el receptor intenta «forzar la purga» de los datos recibidos. Y, una vez hecho esto, una devolución de llamada automática ejecutaría adicionalmente la función «close», intentando liberar la memoria por segunda vez, que ya se había liberado en el último paso.

Este error, que antes se consideraba un «error» en lugar de una vulnerabilidad explotable, fue informado el 8 de junio de 2021 por Matthew Douglass en un hilo público. Douglass pudo reproducir el error el 100% del tiempo en su sistema, lo que provocó fallas en la aplicación.

Los usuarios de Node.js deben actualizar a la última versión 16.6.0, o una versión actualizada parcheada.

Fuente y redacción: segu-info.com.ar

Compartir