Dado que el editor Atom está basado en Electron, un popular framework de desarrollo de aplicaciones, muchas de las vulnerabilidades que
afectan a éste, también son heredables a los desarrollos derivados de su uso.
Si a eso le añadimos incorrectas políticas de seguridad, en la incorporación de «parsers» o librerías complementarias para mostrar contenido, como es el caso de las
utilizadas por Atom para procesar Markdown, la combinación de estas incidencias puede provocar una cadena de vulnerabilidades de mayor impacto.
Vulnerabilidad en el parser Markdown
Según el estudio realizado por Reschke, el componente encargado de
procesar documentos HTML, permitiría ejecutar código Javascript al cargar ficheros Markdown (.md, .markdown). La
función encargada de evitarlo puede ser fácilmente evadida, utilizando ficheros locales mediante el URI file://, saltándose así las políticas CSP (Políticas de Seguridad de Contenido) y ejecutando código Javascript (XSS).
Investigando la posibilidad de simplificar y saltar restricciones utilizando esta vulnerabilidad, descubrió que en la carpeta /Applications/Atom.app/Contents, existían documentos vulnerables que permitirían ir más allá y provocar la ejecución de ficheros locales.
Un simple fichero Markdown con un iframe al documento HTML «test-apart-ctx.html» :
<iframe src=»file:///Applications/Atom.app/Contents/Resources/app/apm/node_modules/clone/test-apart-ctx.html?foo&%77%69%6e%64%6f%77%2e%74%6f%70%2e%72%65%71%75%69%72%65%28%27%63%68%69%6c%64%5f%70%72%6f%63%65%73%73%27%29%2e%65%78%65%63%46%69%6c%65%28%27%2f%41%70%70%6c%69%63%61%74%69%6f%6e%73%2f%43%61%6c%63%75%6c%61%74%6f%72%2e%61%70%70%2f%43%6f%6e%74%65%6e%74%73%2f%4d%61%63%4f%53%2f%43%61%6c%63%75%6c%61%74%6f%72%27%2c%66%75%6e%63%74%69%6f%6e%28%29%7b%7d%29%3b%0a»></iframe>
permitiría ejecutar código arbitrario de manera local, como se puede ver en la imagen:
|
Ejecución de la calculadora, mediante un Markdown especialmente manipulado. Fuente: statuscode.ch |
Por tanto, sería fácil modificar este comportamiento para utilizarlo en la distribución de ficheros Markdown maliciosos como por ejemplo, alguna variante de troyano.
Repositorios externos maliciosos
Yendo más allá en sus pruebas y buscando una manera remota de explotar esta vulnerabilidad, pudo observar que el parser Markdown carga contenido externo gracias al módulo «Packages».
Un atacante remoto sólo tendría que crear y distribuir en los repositorios paquetes maliciosos que se asemejaran a los más descargados por los usuarios, y conseguiría ejecutar código sin tener siquiera que instalar el paquete, ya que una característica principal de este apartado es la previsualición de información sobre el paquete seleccionado, momento en el cual se ejecutaría el código malicioso.
La distribución de paquetes fraudulentos en repositorios no es algo novedoso ni baladí, ya que éste comportamiento se pudo ver hace pocos meses en las incidencias sufridas por Python y PyPI.
GitHub ha mitigado el efecto de esta vulnerabilidad, eliminando los HTML innecesarios de la aplicación y utilizando una nueva librería (DOMPurify) para evadir este tipo de ataques.