Desarrolladores de complementos y temas: esto es lo que pueden aprender de la vulnerabilidad de seguridad de nuestro SDK

Publicado: 2019-03-02

Esta semana fue bastante intensa para nuestro equipo ya que tuvimos que lidiar con una vulnerabilidad de seguridad. La seguridad es la máxima prioridad para nosotros y esta es la primera gran vulnerabilidad encontrada en nuestro SDK en cuatro años. Desafortunadamente, como con cualquier software, los desarrolladores también son humanos, por lo que los errores ocurren, ya sea que sea un desarrollador independiente, una tienda de temas de 20 personas o Google. El propósito de este artículo es ante todo transparencia, pero también brindarle una idea de cómo manejamos el incidente y qué puede aprender de él.

El lunes 25 de febrero de 2019, recibimos un correo electrónico de soporte de un desarrollador útil que tropezó con un problema de GitHub en el repositorio de WooCommerce. El problema fue creado por un representante de una pequeña empresa de alojamiento que notó actividad sospechosa en sus servidores. El representante incluyó los registros de actividad relevantes que indicaban dos posibles ataques, y uno de ellos estaba dirigido a un complemento que ejecutaba Freemius SDK.

Como nos tomamos la seguridad muy en serio, inmediatamente llevamos a cabo una investigación exhaustiva y confirmamos que la vulnerabilidad estaba efectivamente en nuestro SDK.

Debido a la gravedad de la vulnerabilidad, comenzamos a trabajar en una solución de inmediato. Después de solo unas pocas horas, lanzamos una etiqueta parcheada y notificamos a todos los desarrolladores que estaban usando una versión vulnerable del SDK para que actualizaran el SDK en todos sus productos lo antes posible. También actualizamos el problema original de GitHub para informar al equipo de WooCommerce (el problema de GH lo eliminamos después de unas horas para reducir la exposición).

Para mitigar la exposición y dar a todos un período de "gracia" para actualizar a la versión corregida, les preguntamos a los desarrolladores dos cosas:
(a) Si esta actualización de seguridad se incluirá en su registro de cambios, solo use una redacción genérica como "Corrección de seguridad".
(b) Incluso después de actualizar y lanzar las versiones parcheadas, no divulgue este problema durante los próximos 30 días, lo que permite suficiente tiempo para que todos nuestros socios y sus usuarios se actualicen.

Solo un día después, un sitio web que cubre las vulnerabilidades de los complementos (intencionalmente sin vincularlos ni mencionar su nombre) publicó una publicación sobre la vulnerabilidad, que incluye información sobre cómo explotarla y nombra algunos de los complementos afectados. Esto nos tomó por sorpresa, ya que acabamos de notificar a los desarrolladores de complementos y temas sobre el problema menos de 24 horas antes. No se comunicaron con nosotros ni siguieron la práctica de mercado de Divulgación responsable , que consideramos bastante irresponsable y poco ética.

Me comuniqué con ellos para pedirles que cancelen temporalmente la publicación del informe para reducir la exposición y darles a nuestros desarrolladores y sus usuarios la oportunidad de actualizar a las versiones parcheadas antes de que atraiga la atención no deseada de más piratas informáticos. Pero la persona con la que me comuniqué, que nunca reveló su nombre (les pregunté), tiene su propia ideología justiciera y parece que el sentido común realmente no les atrae. Traté de explicar la situación problemática y el mayor riesgo que están exponiendo a muchos desarrolladores y usuarios, pero mis esfuerzos cayeron en saco roto y me di cuenta de que mi intercambio de correo electrónico era solo una pérdida de tiempo.

Mientras nuestra comunidad de desarrolladores actualizaba sus complementos y temas al SDK recientemente parcheado que lanzamos, descubrimos dos problemas:

  1. Varios desarrolladores no recibieron nuestro correo electrónico de alerta porque se registraron en Freemius con una dirección de correo electrónico que no están verificando.
  2. Intencionalmente, no marcamos la etiqueta parcheada de GitHub como un lanzamiento oficial para evitar llamar la atención. Sin embargo, nos enteramos de que los desarrolladores que estaban usando Composer para actualizar sus bibliotecas no estaban recibiendo la última actualización porque packgist solo obtiene versiones, a menos que especifiquen una etiqueta explícitamente.

Para superar esos problemas:

  1. Debido a que la vulnerabilidad ya se publicó públicamente, hace dos días marcamos la versión parcheada como un lanzamiento oficial para que los desarrolladores que confían en packgist puedan actualizar.
  2. Esta mañana, enviamos por correo electrónico otro lote de mensajes a los desarrolladores que aún tienen que actualizar el SDK en todos sus productos. Esta vez, enviamos los mensajes a sus canales de soporte oficiales para aumentar las posibilidades de que todos reciban los correos electrónicos correctamente.

Aunque queríamos posponer la publicación de esta vulnerabilidad al menos dos semanas, recibimos una nueva consulta de WP Tavern solicitando nuestra opinión antes de publicar su propio artículo sobre el tema, que fue la gota que colmó el vaso del teclado del desarrollador.

Los errores que cometimos y lo que puedes aprender de ellos

Mirando hacia atrás en el incidente, cometimos varios errores que podríamos evitar fácilmente y habrían hecho la vida de todos mucho más fácil.

Entra en modo silencioso y alerta solo a aquellos que necesitan saber

Dado que estábamos tan ansiosos por solucionar el problema lo antes posible, personalmente cometí un error de "novato" que atrajo una atención no deseada demasiado pronto. Seguí adelante y confirmé la corrección en el repositorio de GitHub que usamos para administrar el SDK. El repositorio no solo es público, sino que expliqué la solución y usé la palabra "seguridad" en él.

El mejor enfoque era crear una versión privada/cerrada del repositorio, parchear el problema de seguridad allí y exponerlo solo a los desarrolladores relevantes en lugar de hacerlo público. Esto no llamaría la atención de los “cazadores de vulnerabilidades”.

No malgastes tu energía en "trolls de seguridad"

El segundo error fue intentar interactuar con la empresa detrás del sitio que publicó la vulnerabilidad. Fue una pérdida total de tiempo y energía, y solo desencadenó más antagonismo que terminó con otra publicación sobre la vulnerabilidad. Diría que un buen indicador para decidir si vale la pena ponerse en contacto con el autor de una publicación que pone en riesgo su complemento o los usuarios del tema es si hay un nombre detrás de la publicación/sitio web/empresa. Si se esconden detrás de proxies y actúan irracionalmente, la posibilidad de que puedas hablarles con sentido común es prácticamente nula.

Así que este es mi consejo: ponte en modo silencioso y solo notifica a las personas que deben saber sobre la vulnerabilidad. En el caso de un complemento/tema, esos son sus usuarios. Esta también es una buena oportunidad para enfatizar la importancia de recopilar los correos electrónicos de sus usuarios. Si no tiene una forma de comunicarse de forma privada con sus usuarios, no tiene una forma eficaz de notificarles de forma privada sobre problemas de seguridad.

El estado actual del incidente

Más del 60 % de los desarrolladores que utilizan nuestro SDK ya han actualizado a la versión parcheada. Además, el SDK viene con un mecanismo especial que permite que múltiples complementos o temas compatibles con Freemius instalados en el mismo sitio web de WordPress usen la versión más reciente del SDK si uno de los productos ya está actualizado. Así que eso es bueno.

Dicho esto, todavía hay muchos sitios que son vulnerables. Es por eso que no mencioné ningún detalle técnico sobre la vulnerabilidad en sí, ni los productos afectados. Todavía queremos ofrecer a nuestros desarrolladores la oportunidad de parchear sus productos y permitir que sus usuarios actualicen a las versiones seguras.

¿Cómo reducir los riesgos de seguridad en su complemento/tema de WordPress?

Si no tiene experiencia en seguridad, busque en Google "mejores prácticas de seguridad web" y encontrará toneladas de artículos y prácticas. Lea algunos de ellos para estar al tanto de los riesgos y errores potenciales modernos y típicos. Téngalos en cuenta durante los procesos de desarrollo y prueba. Otra buena práctica es realizar auditorías de seguridad periódicas mediante la contratación de un investigador de seguridad. Costará unos pocos cientos de dólares, pero si confía en su producto como su principal fuente de ingresos, es obvio.

Desafortunadamente, como en nuestro caso, todavía pueden pasar cosas malas. A pesar de que tenemos una sólida formación en seguridad, llevamos a cabo revisiones exhaustivas del código y trabajamos con un investigador de seguridad experimentado de la comunidad HackerOne, pero esta vulnerabilidad aún se nos escapó. 😔

Creo que una de las razones por las que sucedió es porque el código vulnerable en realidad se agregó para depurar casos extremos y no es parte de la funcionalidad principal del SDK. Entonces, si hay una lección aquí, trate cualquier pieza de código en su producto de la misma manera, ya sea que sea parte de la lógica comercial real o cualquier otra cosa.

Resumen

Los problemas de seguridad son inevitables en el mundo del software. Nos guste o no, un día su complemento o tema tendrá un problema de seguridad. El problema puede estar en su código, una biblioteca/marco que está utilizando, un método central de WordPress que proporciona resultados inesperados y muchos más escenarios.

Cuando suceda (espero que no suceda), no se estrese (definitivamente lo hicimos) y actúe impulsivamente, solo causará más daño. Redacte un plan de recuperación metodológico, notifique a las partes afectadas y esté allí para ayudar a sus usuarios a asegurar sus sitios. Todos saben que ocurren problemas de seguridad, lo que es más importante es cómo manejas la situación.

Dicho esto, en nombre de todo el equipo de Freemius, lamentamos mucho las molestias y estaremos aquí durante todo el fin de semana para ofrecer soporte, asesoramiento o cualquier otra ayuda relacionada con el problema. Y para nuestros nuevos usuarios, sé lo importante que es la primera impresión, y esta definitivamente no es buena. Espero que le des otra oportunidad a Freemius y, con el tiempo, veas las increíbles funciones que ofrecemos para tus complementos y temas de WordPress.