Vulnerabilidad de riesgo alto en Apache permitiría la ejecución remota de código

Recientemente se ha descubierto una vulnerabilidad en Apache Tomcat la misma ha sido identificada como CVE-2020-9484 de riesgo alto, y afecta a las versiones:

  • Desde la 7.0.0, hasta la 7.0.103,
  • Desde la 8.5.0, hasta la 8.5.54,
  • Desde la 9.0.0.M1, hasta la 9.0.34,
  • Desde la 10.0.0-M1, hasta la 10.0.0-M4.

El fallo se encuentra en PersistenceManager de Tomcat. Esta implementación permite reducir el uso de memoria ya que se encarga de buscar sesiones inactivas y las mueve a un almacenamiento persistente, así como también guarda todas las sesiones durante un reinicio de Tomcat, cuando esto ocurre la implementación Manager se encarga de serializar todas las sesiones activas en la ruta del disco, indicado en el atributo pathname. Seguidamente, una vez que el reinicio es completado todas estas sesiones son deserializadas y activadas nuevamente.

Los mecanismos requeridos para la utilización de PersistenceManager son los elementos Store(File Based Store, JDBC Based Store) que se encuentran dentro de Manager. Uno de estos elementos, específicamente el File Based Store, se encarga de guardar todas las sesiones inactivas encontradas con PersistenceManager en archivos individuales (con el nombre del identificador de la sesión) dentro de un directorio.

La vulnerabilidad se da debido a la deserialización errónea de estos datos. Para ser explotada de manera exitosa, deben cumplirse ciertas condiciones y de ser así podría resultar en una ejecución remota de código.

¿Cuáles son estas condiciones?

La explotación exitosa de esta vulnerabilidad se podría dar, si:

  • El atacante tiene control sobre el contenido y nombre del archivo dentro del servidor,
  • El servidor se encuentra configurado para utilizar PersistenceManager con FileStore,
  • La implementación PersistenceManager se encuentra configurada con sessionAttributeValueClassNameFilter=”null” (esto se encuentra configurado por defecto a no ser que se utilice SecurityManager) o algún filtro ineficiente que permita al atacante proporcionar el objeto a ser deserializado y,
  • El atacante conoce la ruta relativa del archivo desde la ubicación de almacenamiento utilizado por FileStore.

Obs: estas cuatro condiciones deben satisfacerse para que la explotación sea exitosa.

A continuación se detalla la porción de código vulnerable:

Recomendaciones:

  • Aplicar el parche de seguridad para Apache Tomcat, disponible en el sitio web oficial del fabricante para las siguientes versiones:
  • En caso de no ser posible la actualización, como medida alternativa se podría configurar el atributo sessionAttributeValueClassNameFilter de PersistenceManager con un valor apropiado (distinto de valor null por defecto) para asegurar que solo los atributos proveídos por la aplicación sean serializados y deserializados.

Referencias:

Compartir: