Esta semana, Mattermost, en coordinación con Golang, ha revelado 3 vulnerabilidades críticas dentro del analizador XML de Go language.

Si se explotan, estas vulnerabilidades, que también afectan a múltiples implementaciones SAML basadas en Go, pueden conducir a una omisión completa de la autenticación SAML que impulsa las aplicaciones web prominentes en la actualidad.

El analizador XML no garantiza la integridad

Las vulnerabilidades de ida y vuelta de XML que se enumeran a continuación se esconden en la codificación del analizador de lenguaje XML de Golang / xml que no devuelve resultados fiables al codificar y decodificar la entrada XML.

Esto significa que un marcado XML cuando se codifica y decodifica con el analizador puede devolver resultados inesperados e inconsistentes.

  • CVE-2020-29509: inestabilidad del atributo XML en la codificación de Go / xml
  • CVE-2020-29510: inestabilidad de la directiva XML en la codificación de Go / xml
  • CVE-2020-29511: inestabilidad del elemento XML en la codificación / xml de Go

“Como es evidente en los títulos, las vulnerabilidades están estrechamente relacionadas. El problema principal es el mismo en los tres: el marcado XML creado con fines malintencionados muta durante los viajes de ida y vuelta a través de las implementaciones de decodificadores y codificadores de Go”, dijo Juho Nurminen, ingeniero de seguridad de productos de Mattermost.

Nurminen explicó que esto significa que si una aplicación usa el analizador XML, el codificador y el decodificador no preservarían la semántica del marcado original.

“Si su aplicación procesa XML y, mientras lo procesa, analiza el marcado que es el resultado de al menos una ronda anterior de análisis y serialización, ya no puede asumir que el resultado de ese análisis coincide con el resultado de la ronda anterior. En otras palabras, pasar XML a través del decodificador y codificador de Go no conserva su semántica “, explicó Nurminen.

Una de las correcciones parciales realizadas para las vulnerabilidades demuestra las inconsistencias que pueden ocurrir durante el análisis de XML debido a estas fallas.

Por ejemplo, `<: name>` tendría los dos puntos eliminados y, de la misma forma, una etiqueta XML con un atributo que contiene un valor vacío (“”) se representaría sin el atributo por completo durante la serialización.

Es posible omitir la autenticación SAML completa

Si bien a primera vista, esto puede parecer un error trivial, Mattermost enfatiza que múltiples aplicaciones esperan integridad semántica y estas vulnerabilidades pueden tener graves consecuencias.

Por ejemplo, los atacantes pueden engañar a varias implementaciones de SAML que se basan en dicho analizador XML para que omitan la autenticación SAML por completo.

Security Assertion Markup Language (SAML) es un estándar de autenticación web utilizado por varios sitios web y servicios destacados para facilitar el inicio de sesión en línea que utiliza XML.

“Debido a estas vulnerabilidades, las implementaciones SAML basadas en Go están en muchos casos abiertas a la manipulación por parte de un atacante: al inyectar un marcado malicioso en un mensaje SAML correctamente firmado, es posible hacer que siga apareciendo correctamente firmado, pero cambie su semántica para transmitir una identidad diferente a la del documento original “, advirtió Mattermost.

Si una aplicación de misión crítica utiliza el analizador XML, el impacto dentro de un sistema SAML SSO puede ser la escalada de privilegios o la omisión de autenticación, dependiendo de cómo la aplicación esté utilizando el analizador XML vulnerable.

No hay parche disponible para el analizador en sí

Vale la pena señalar que el equipo de seguridad de Go ha informado en este momento que no hay un parche disponible para parchear adecuadamente estas vulnerabilidades.

La confirmación de corrección descrita anteriormente también establece que la estabilidad de ida y vuelta no es una propiedad de seguridad admitida de encoding / xml, por lo que la corrección por sí sola es insuficiente para garantizar la confiabilidad del análisis XML.

Sin embargo, se han lanzado versiones fijas para algunos de los proyectos SAML individuales basados en Go, como:

  • Dex IDP versión 2.27.0
  • github.com/crewjam/saml versión 0.4.3
  • github.com/russellhaering/gosaml2 versión 0.6.0

Además, Mattermost ha proporcionado una herramienta “xml-roundtrip-validator” que se puede utilizar como una solución al incorporar la validación XML en su aplicación.

Los hallazgos completos de los investigadores de Mattermost y el cronograma de divulgación se proporcionan en la publicación de su blog.