¿Cómo obtengo detalles de un informe de vulnerabilidad de veracode?
Soy el mantenedor de una popular biblioteca JS, Ramda , y recientemente recibimos un informe de que la biblioteca está sujeta a una vulnerabilidad de contaminación prototipo. Esto se ha rastreado hasta un informe de veracode que dice:
ramda es vulnerable a la contaminación de prototipos. Un atacante puede inyectar propiedades en prototipos de construcción existentes a través de la función
_curry2y modificar atributos como__proto__,constructoryprototype.
Entiendo de qué están hablando de Prototype Pollution. Una buena explicación está en el artículo de snyk para lodash.merge . El diseño de Ramda es diferente, y el código obviamente análogo de Ramda no está sujeto a este tipo de vulnerabilidad. Eso no significa que ninguna parte de Ramda esté sujeta a ella. Pero el informe no contiene detalles, ningún fragmento de código y ningún medio para cuestionar sus hallazgos.
Los detalles de su descripción son claramente incorrectos. _curry2 posiblemente no podría estar sujeto a este problema. Pero como esa función se usa como envoltorio para muchas otras funciones, es posible que haya una vulnerabilidad real oculta por el malentendido del reportero.
¿Hay alguna manera de obtener detalles de este informe de error? ¿Un fragmento de código que demuestre el problema? ¿Cualquier cosa? He rellenado su formulario de contacto. Es posible que todavía llegue una respuesta, ya que fue hace solo 24 horas, pero no estoy conteniendo la respiración, parece ser principalmente un formulario de ventas. Toda la búsqueda que he hecho conduce a información sobre cómo usar su herramienta de seguridad y prácticamente nada sobre cómo se crean sus informes personalizados. Y no puedo encontrar esto en las bases de datos CVE.
Bien, para responder a mi propia pregunta, aquí le mostramos cómo obtener los detalles de un informe de vulnerabilidad de Veracode en menos de cuatro semanas y en solo cincuenta y cinco sencillos pasos.
Pídale a alguien que publique un problema en su biblioteca que sugiera que su función mapObjIndexed está sujeta a la vulnerabilidad de contaminación del prototipo .
Responda para decir que no cree que el usuario haya demostrado esa vulnerabilidad conocida, pero que profundizará más.
Escriba unapublicación detallada que describa lo que significa esa vulnerabilidad y demuestre que la biblioteca de hecho no está sujeta a ella, o al menos que el ejemplo proporcionado no lo demuestra.
Mantenga unabreve conversación conlas partes interesadas explicando el puntomás detalladamente y respondiendoa las objeciones .
Deje el tema abierto por un tiempo para que el reportero original pueda discutir el punto y responder. 1
Recibirun comentario sobre el problema que dice que el usuario ha recibido
un ticket VULN para corregir esta
Prototype Pollution vulnerability found in ramda.
Continúeuna discusión con respecto a este comentariopara saber que hay un informe que afirma que
ramda es vulnerable a la contaminación de prototipos. Un atacante puede inyectar propiedades en prototipos de construcción existentes a través de la función
_curry2y modificar atributos como__proto__,constructoryprototype.
y finalmente enterarse de que esto se debe a un informe de la empresa de seguridad de software Veracode .
Examine ese informe para encontrar que no tiene detalles, ninguna explicación de cómo desencadenar la vulnerabilidad y ninguna solución sugerida.
Examine el informe y otras partes del sitio de Veracode para encontrar que no existe un mecanismo público para impugnar dicho informe.
Informe al problema de la biblioteca que el informe debe ser incorrecto, ya que la función mencionada no podría generar el comportamiento descrito.
Publique un ejemplo real de la vulnerabilidad en discusión y un fragmento paralelo de la biblioteca para demostrar que no comparte el problema.
Encuentre el formulario de soporte en línea de Veracode y envíe una solicitud de ayuda. Mantenga sus expectativas bajas, ya que esto es probablemente para el departamento de ventas.
Publique una Pregunta 2 de StackOverflow preguntando cómo encontrar detalles de un informe de vulnerabilidad de Veracode, utilizando suficientes detalles que, si la comunidad tiene el conocimiento, debería ser fácil de responder.
Reciba una respuesta de una dirección de correo electrónico de soporte de Veracode que diga, en parte,
¿Está diciendo que nuestra vuln db no es correcta según su fuente de github? Si es así, puedo enviarlo a nuestro equipo de investigación para garantizar que se vea bien y, si no, para actualizarlo.
En cuanto a los fragmentos de código, no los proporcionamos.
Responda, explicando que encuentra que al informe le faltan los detalles necesarios para cuestionarlo, pero que sí, espera que sea incorrecto.
Reciba una respuesta de que esto ha sido "disparado en la cadena" y que pronto tendrá noticias de ellos.
Reciba un correo electrónico de Veracode:
Gracias por su interés en Seguridad de aplicaciones y Veracode.
¿Tienes tiempo la próxima semana para conectarte?
Además, para asegurarse de estar alineado con el representante correcto, ¿dónde tiene su sede la empresa?
Responde que no eres un cliente potencial y vuelve a explicar lo que estás buscando.
Agregue un comentario al StackOverflow para explicar dónde ha llegado el proceso y expresar su frustración.
Vea pasar otro fin de semana sin ninguna forma de abordar esta preocupación.
Participe en una discusión algo interesante sobre la contaminación de prototipos en los comentarios de la publicación de StackOverflow.
Reciba un correo electrónico realmente útil de Veracode, enviado por alguien nuevo, cuya firma dice que es un gerente de ventas. El correo electrónico se verá así:
Hola Scott, le pedí a mi equipo que me ayudara con tu pregunta, aquí está su respuesta:
Hemos basado este artefacto en la información disponible en https://github.com/ramda/ramda/pull/3192 . En la solicitud de extracción, hay un POC ( https://jsfiddle.net/3pomzw5g/2/ ) que demuestra claramente la vulnerabilidad de contaminación del prototipo en la función mapObjIndexed. En la demostración, el objeto de usuario se modifica mediante la
__proto__ y se
considerado una violación a la Integridad de la tríada de la CIA. Esto se ha reflejado en nuestra puntuación CVSS para esta vulnerabilidad en nuestra vuln db.También hay una solución no fusionada para la vulnerabilidad que también se ha
incluido en nuestro artefacto ( https://github.com/ramda/ramda/pull/3192/commits/774f767a10f37d1f844168cb7e6412ea6660112d )Infórmeme si hay una disputa contra el POC, y podemos investigar más a fondo.
Trate de evitar golpearse la cabeza contra la pared durante demasiado tiempo cuando se dé cuenta de que el problema que pensó que podría haber sido planteado por alguien que había visto el informe de Veracode era, en cambio, la fuente de ese informe.
Responda a esta persona servicial que sí tendrá una disputa por esto, y pregunte si puede ponerse en contacto directamente con las personas relevantes de Veracode para que no tenga que haber un intermediario.
Reciba un correo electrónico de esta persona útil, que necesita un nombre, llamémoslo "Kevin". Reciba un correo electrónico de Kevin que agrega a la cadena de correo electrónico al equipo de investigación. (¡Te dije que era útil!)
Responda a Kevin y al equipo con una breve nota de que dedicará algún tiempo a escribir una respuesta y se pondrá en contacto con ellos pronto.
Mire nuevamente el Informe Veracode y observe que la descripción se ha cambiado a
ramda es vulnerable a la contaminación de prototipos. Un atacante puede inyectar y modificar atributos de un objeto a través de la función
mapObjIndexeda través de la propiedad proto .
pero tenga en cuenta también que todavía no contiene detalles, fragmentos, ningún proceso de disputa.
Reciba una notificación de correo electrónico rebotado porque el correo electrónico de ese equipo de investigación es solo para uso interno de Veracode.
Reír porque la única otra opción es llorar.
Cuéntale a Kevin lo que pasó y asegúrate de que esté dispuesto a permanecer como intermediario. Una vez más, es útil y estará de acuerdo de inmediato.
Dedique varias horas a escribir una respuesta detallada, explicando qué es la contaminación del prototipo y cómo los ejemplos no muestran este comportamiento.Publíquelo con anticipación sobre el tema. (¿Recuerdas el problema? Esta es una historia sobre el problema. 3 ) Pide sugerencias a los lectores antes de enviar el correo electrónico... principalmente como una forma de asegurarte de que no estás enviando esto con ira.
Continúe y envíelo por correo electrónico de inmediato de todos modos; si dijiste algo demasiado enojado, probablemente no quieras que te disuadan ahora, de todos modos.
Tenga en cuenta que la recompensa no reembolsable de StackOverflow ha vencido sin que se haya ofrecido una sola respuesta.
Juega con tus pulgares durante una semana, pero mientras tanto...
Reciba un correo electrónico de marketing de Veracode, que nunca antes le había enviado uno.
Tenga en cuenta que Veracode ha actualizado nuevamente la descripción para decir
ramda permite la manipulación de prototipos de objetos. Un atacante puede inyectar y modificar atributos de un objeto a través de la función
mapObjIndexeda través de la propiedad proto . Sin embargo, debido al diseño de ramda donde la inmutabilidad del objeto es el valor predeterminado, el impacto de esta vulnerabilidad se limita al alcance del objeto en lugar del prototipo del objeto subyacente. No obstante, la posibilidad de manipulación de prototipos de objetos, como se demuestra en la prueba de concepto en Referencias, puede causar comportamientos inesperados en la aplicación. Actualmente no hay exploits conocidos.
Si eso no está claro, una traducción sería: "Oye, informamos esto y no queremos retroceder, así que vamos a decir que aunque el comportamiento que notamos en realidad no sucedió, el comportamiento que es todavía hay, umm, err, algo mal".
Tenga en cuenta que un fanático de la biblioteca cuyo empleador tiene una cuenta de Veracodepudo obtener más información de sus informes. Resulta que sus detalles están restringidos a los usuarios que han iniciado sesión, por lo que no está del todo claro cómo creen que se deben solucionar tales vulnerabilidades.
Envíe un correo electrónico de seguimiento a Kevin 4 diciendo
Me pregunto si hay alguna respuesta a esto.
Veo que el informe de vulnerabilidad se actualizó pero no se eliminó.
Todavía discuto la versión alterada de la misma. Si este comportamiento es una verdadera vulnerabilidad, ¿podría indicarme el informe equivalente sobreObject.assignde JavaScript que, como se demostró anteriormente, tiene exactamente el mismo problema que la función en cuestión?Mi objetivo inmediato es ver este informe retractado. Pero también quiero señalar el dolor que implica este proceso, dolor que creo que Veracode podría solucionar:
No soy un cliente, pero sus clientes acuden a mí como responsable de mantenimiento de Ramda para solucionar un problema que ha informado. Ese informe realmente debería tener suficiente información para permitirme confirmar la vulnerabilidad informada. He aprendido que dicha información está disponible para un cliente conectado. Eso no me ayuda ni a mí ni a otros en mi posición a encontrar la información. Recurrir al correo electrónico y filtrarlo a través de su departamento de ventas es un proceso bastante horrible. ¿Podría modificar sus informes públicos para contener o señalar una prueba de concepto de la vulnerabilidad?
¿Y podría ofrecer en el informe alguna pista sobre un proceso de disputa?
Reciba un correo electrónico del aún útil Kevin, que dice
Gracias por el seguimiento [ ... ], seguiré gestionando la comunicación con mi equipo, en este momento están investigando el asunto y se ha elevado a los niveles más altos.
Vuelva a comunicarse conmigo si no tiene una respuesta dentro de las 72 horas.
Gracias por su paciencia mientras investigamos el problema, este también es un proceso nuevo para mí.
Ríete a carcajadas ante la idea de que piensa que estás siendo paciente.
Responda, pidiéndole disculpas a Kevin porque está atrapado en el medio, y lea su amable respuesta.
Escuche de nuevo de Kevin que su objetivo principal se ha cumplido:
Hola Scott, quería brindar una actualización, mi equipo de ingeniería respondió
a mi con lo siguiente:"actualizar nuestra base de datos para eliminar el informe es el resultado final"
También les he pedido que me informen acerca de su pregunta sobre la capacidad de impugnar los hallazgos y se los transmitiré una vez que se reciban los comentarios.
De lo contrario, espero que esto satisfaga su solicitud y avíseme si es necesario que tomemos alguna otra medida en este momento.
Responda con agradecimiento a Kevin y tenga en cuenta que todavía le gustaría saber cómo están cambiando sus procesos.
Responde a tu propio correo electrónico para disculparte con Kevin por todas las faltas de ortografía que ocurrieron cuando intentaste escribir algo más que un texto breve en tu dispositivo móvil.
Verifique con ese útil usuario de Ramda con capacidades de inicio de sesión de Veracode si el sitio parece estar actualizado correctamente.
Póngase en contacto con ese mismo usuario en Twitter cuando no haya respondido en cinco minutos. No es que estés ansioso y quieras dejar esto atrás. Realmente no lo es. No eres ese tipo de persona.
Lea larespuesta detallada de ese usuario explicando que todo está bien.
Reciba un seguimiento de la dirección de correo electrónico de soporte de Veracode informándole que
Después de mucha consideración, hemos decidido actualizar nuestra base de datos para eliminar este informe.
y que están cerrando el tema.
Ríete del hecho de que están enviando esto después de lo que parece ser el cierre de la semana (7:00 p. m. tu hora un viernes).
Responda cortésmente para decir que está agradecido por el resultado, pero que aún le gustaría ver su proceso de disputa modernizado.
Y eso es todo lo que se necesita. Entonces, la próxima vez que te encuentres con esto, ¡también puedes resolverlo!
(¡Porque sabías que no podía ser tan fácil!)
Reciba un correo electrónico de un nuevo ejecutivo de cuenta de Veracode que dice
¡Gracias por tu interés! Me presento como su punto de contacto en Veracode.
Me gustaría tener la oportunidad de responder cualquier pregunta que pueda tener sobre los servicios de Veracode y el enfoque del espacio.
¿Tienes unos minutos libres para tocar la base? Por favor, hágame saber un horario conveniente para usted y haré un seguimiento en consecuencia.
Responda cortésmente a ese correo electrónico sugiriendo una conversación con Kevin e incluyendo un enlace a esta lista de pasos.
1 Este es un comportamiento estándar con los problemas de Ramda, pero podría ser la razón principal por la que Veracode decidió informar esto.
2 Tenga cuidado de no entrar en un bucle infinito. Esta recursividad no tiene un caso base.
3 Oye, esto estaba ocurriendo alrededor del Día de Acción de Gracias. ¡Tenía que haber una referencia a Alice's Restaurant !
4 Si aún no ha encontrado un Kevin, ahora sería un buen momento para insistir en que Veracode le proporcione uno.
5 Incluyendo notas a pie de página.