Resumen
El renderer Nunjucks de TypeScript incluido en el paquete @prompty/core evaluaba cuerpos de plantillas .prompty no confiables con acceso irrestricto a miembros JavaScript. Una plantilla controlada por un atacante podía recorrer las propiedades constructor y prototype para ejecutar código JavaScript arbitrario dentro del proceso Node.js anfitrión.
Paquetes afectados
- npm
@prompty/coreversiones<= 0.1.4 - npm
@prompty/coreversiones<= 2.0.0-beta.4
Descripción técnica
La vulnerabilidad reside en la forma en que el renderer Nunjucks del runtime TypeScript de Prompty procesaba las plantillas .prompty. Nunjucks, por diseño, permite el acceso a propiedades de objetos JavaScript durante la evaluación de plantillas. En ausencia de restricciones adecuadas, un atacante podía aprovechar este comportamiento para traversar la cadena de prototipos de JavaScript, accediendo a propiedades como constructor y prototype.
Mediante esta técnica, conocida como contaminación de prototipo o traversal de constructor, el atacante podía escalar el acceso desde el contexto de datos de la plantilla hasta el entorno de ejecución de Node.js, logrando ejecución de código arbitrario con los privilegios del proceso anfitrión. Este tipo de ataque es especialmente crítico porque no requiere vulnerabilidades adicionales en el sistema operativo: el código malicioso se ejecuta directamente en el contexto del proceso Node.js con todos sus permisos asociados.
Impacto
Las aplicaciones que renderizan archivos .prompty no confiables mediante el runtime TypeScript quedan expuestas a ejecución de código controlado por el atacante con los privilegios del proceso Node.js anfitrión. Los vectores de ataque incluyen:
- Plantillas
.promptysuministradas por la comunidad sin revisión previa. - Archivos
.promptyobtenidos mediante clonado de repositorios externos. - Plantillas generadas por un LLM que incluyan contenido malicioso incrustado.
- Cualquier flujo de trabajo que procese plantillas
.promptyde origen no verificado.
El impacto potencial abarca desde la exfiltración de datos y credenciales del entorno de ejecución hasta la toma de control completa del servidor o contenedor donde se ejecute la aplicación afectada.
Remediación
Actualizar @prompty/core a la versión 2.0.0-beta.5 o posterior. El renderer parcheado aplica las siguientes medidas de mitigación:
- Sanitiza las entradas de renderizado limitándolas a valores de datos propios del objeto, sin acceso a la cadena de prototipos.
- Rechaza explícitamente el traversal de miembros
constructoryprototype. - Deshabilita las llamadas a funciones dentro de las plantillas.
Las funcionalidades habituales de Nunjucks permanecen disponibles tras el parche: interpolación de variables, condicionales, bucles y acceso a propiedades anidadas propias del objeto de datos siguen siendo compatibles.
Detalles del parche
La corrección fue integrada en el PR #404 del repositorio oficial e incluye cobertura de regresión para los siguientes escenarios:
- Renderizado Nunjucks por defecto.
- Uso explícito del renderer.
- Lookups de miembros no seguros.
- Intentos de llamadas a funciones desde plantillas.
Recomendaciones adicionales
Además de actualizar el paquete, se recomienda revisar cualquier pipeline de procesamiento de plantillas .prompty para garantizar que los archivos de origen externo sean validados antes de su renderizado. En entornos de producción, considerar la ejecución del renderer en un contexto aislado (sandbox) como medida de defensa en profundidad, independientemente de la versión instalada.
