Qué es esta vulnerabilidad
El SDK JavaScript/TypeScript de LangSmith (langsmith) contiene una implementación incompleta de protección contra prototype pollution en su utilidad interna de lodash set(). La función baseAssignValue() implementa una protección que solo bloquea la clave __proto__, pero falla al prevenir el traversal a través de constructor.prototype.
Esta vulnerabilidad permite que un atacante que controle las claves en datos procesados por la API createAnonymizer() pueda contaminar Object.prototype, afectando todos los objetos en el proceso Node.js. El ataque funciona porque cuando set() es llamado con un path como "constructor.prototype.polluted", el sistema divide la ruta en ["constructor", "prototype", "polluted"] y navega desde obj.constructor hasta Object y luego Object.prototype, donde finalmente ejecuta Object.prototype.polluted = value.
Impacto y riesgo
La prototype pollution en un proceso Node.js puede habilitar múltiples vectores de ataque críticos. Un atacante puede lograr bypass de autenticación haciendo que verificaciones como if (user.isAdmin) sean exitosas en todos los objetos del sistema. También es posible conseguir ejecución remota de código (RCE) cuando la contaminación es explotable en motores de plantillas como Pug, EJS, Handlebars o Nunjucks, donde las propiedades contaminadas del prototipo pueden alcanzar sinks de eval() o Function().
Además, la vulnerabilidad permite ataques de denegación de servicio (DoS) sobrescribiendo métodos críticos como toString, valueOf o hasOwnProperty en todos los objetos. Los atacantes también pueden realizar exfiltración de datos contaminando métodos de serialización para inyectar valores controlados por el atacante en las respuestas del sistema.
A quién afecta
La vulnerabilidad afecta específicamente al paquete langsmith de npm en versiones <= 0.5.17, así como la rama main de GitHub del repositorio langchain-ai/langsmith-sdk. Los componentes vulnerables incluyen js/src/utils/lodash/baseAssignValue.ts y js/src/anonymizer/index.ts.
Importantemente, el SDK de Python (langsmith en PyPI) no está afectado ya que no utiliza lodash ni un patrón equivalente. El vector de ataque principal es a través de la API createAnonymizer() que es importable como langsmith/anonymizer, donde un atacante puede construir objetos anidados con paths que resuelven a constructor.prototype.X.
Esta vulnerabilidad es particularmente relevante en el ecosistema actual de IA donde los SDKs de LangSmith son ampliamente utilizados para el desarrollo y monitoreo de aplicaciones de inteligencia artificial. La capacidad de contaminar prototipos en aplicaciones que procesan datos de usuarios representa un riesgo significativo para la seguridad de sistemas de IA en producción, especialmente considerando que muchas aplicaciones de IA manejan datos sensibles y requieren controles de acceso robustos.
