Actualización del 22 de mayo de 2019
Se trata de una búsqueda sólo para empresas, pero consultando los datos brutos de Censys , encontramos Sharepoint ejecutándose en puertos no estándar. Analizamos las cabeceras de servidor sin procesar que recopilamos en nuestros datos de 1000 puertos y buscamos las cadenas de versiones vulnerables, y también el nombre del servicio Microsoftsharepointteamservices
. Al incluir nuestro 1000 datos de banner de puerto en nuestra búsqueda en esta actualización, ¡hemos encontrado un 35% más de hosts SharePoint vulnerables! He aquí un ejemplo de la consulta:
SELECT ip, SAFE_CAST(s.banner AS String), s.port_number FROM censys-io.ipv4_banners_public.current, UNNEST(services) as s WHERE REGEXP_CONTAINS(SAFE_CAST(s.banner AS String), r".[Mm]icrosoftsharepointteamservices:.(16.0.0.4351|15.0.0.4571|14.0.0.7015|16.0.0.10337).*")
Hace poco nos topamos con una entrada de blog de AlienVault en la que se describía la explotación de una vulnerabilidad conocida de Sharepoint, CVE-2019-0604. Queríamos saber cómo de extendida está esta vulnerabilidad, qué superficie de ataque presenta y cómo podemos averiguar quién está en riesgo.
Sharepoint es la suite de colaboración insignia de Microsoft y se utiliza para todo tipo de cosas en las empresas, especialmente archivos corporativos confidenciales. Como tal, Sharepoint suele ser utilizado por grandes organizaciones que a menudo son blanco de ataques debido al alto valor de sus datos.
En este post, exploramos cómo mapear una vulnerabilidad a software encontrado en Internet "in the wild". Sharepoint, en particular, utiliza nombres de productos como "Sharepoint 2019", por lo que es bastante fácil de rastrear en nuestros escaneos.
Paso 1 - Búsqueda por palabra clave
Uno de los mejores lugares para comenzar la búsqueda de una vulnerabilidad de software es empezar con una simple búsqueda de palabras clave, en este caso: Sharepoint
. Esta búsqueda por palabra clave muestra los resultados de todos los campos que exploramos en busca de cualquier cosa que coincida: páginas web, nombres DNS, etc. En la página de resultados de la búsqueda de la palabra clave "Sharepoint" aparecen unos 20.500 servidores. Esto nos da un buen punto de partida, pero no nos muestra la lista de las versiones del software Sharepoint afectadas por esta vulnerabilidad.
Tras explorar los datos de una docena de hosts a partir de estos resultados, pude descubrir que Sharepoint tiene un par de encabezados HTTP específicos de Sharepoint visibles en Censys: x-sharepointhealthscore
y microsoftsharepointteamservices
. Parece que estos encabezados sólo se ven en hosts Sharepoint legítimos. Este punto de datos, por lo tanto, puede servir como nuestro pivote para el paso 2.
Paso 2 - Búsqueda por campo
Ahora que tenemos nuestro campo de cabecera HTTP específico de producto, vamos a buscar por índice sobre HTTPS y HTTP:
443.https.get.headers.unknown.key: microsoftsharepointteamservices OR 80.http.get.headers.unknown.key: microsoftsharepointteamservices
Esta búsqueda da como resultado unos 35.000 hosts. En realidad, se trata de un aumento de los resultados con respecto al paso 1, pero está bien, ya que tenemos más confianza en este enfoque que en la simple búsqueda por palabras clave. Ahora queremos ver si hay un número de versión o dos que podamos buscar. El sitio de Microsoft informa que las siguientes versiones son vulnerables a este ataque: Microsoft SharePoint Enterprise Server 2016, Microsoft SharePoint Foundation 2010 Service Pack 2, Microsoft SharePoint Foundation 2013 Service Pack 1, Microsoft SharePoint Server 2010 Service Pack 2, Microsoft SharePoint Server 2013 Service Pack 1 y Microsoft SharePoint Server 2019.
Armados con esta información, vamos a inspeccionar algunos hosts y ver qué nos dice el servidor - recuerda, estamos usando su cadena de versión anunciada para informarnos si es vulnerable. Ahora vemos valores para esta clave como '14.0.0.7123' y '15.0.0.4599' - estos ciertamente no se parecen a las versiones del producto que Microsoft me dice que son vulnerables, ¿cómo puedo asignar estos de nuevo a las poblaciones vulnerables?
Paso 3 - Búsqueda por campos unidos
Después de algunas consultas en el motor de búsqueda encontré esta entrada de blog de un entusiasta o profesional de Sharepoint que mapea los nombres amigables de los productos Sharepoint a las versiones de lanzamiento. Utilizando esta información para asignar las versiones reportadas de MSRC a los números de compilación, construyo una consulta como esta:
443.https.get.headers.unknown.key: microsoftsharepointteamservices AND (443.https.get.headers.unknown.value: "16.0.4351.1000" OR 443.https.get.headers.unknown.value: "15.0.4571.1502" OR 443.https.get.headers.unknown.value: "14.0.7015.1000" OR 443.https.get.headers.unknown.value: "16.0.10337.12109")
Y no encuentro nada. Qué pasa, pienso, así que investigo un poco más. Resulta que el número de compilación es similar, aunque no idéntico, a las versiones de cabecera de esa entrada del blog. Tengo que adaptarlas un poco: eliminar el último valor (¿quizá un número de compilación añadido al número de producto?) e insertar otro 0 en el medio. Termino con una consulta como esta:
443.https.get.headers.unknown.key: microsoftsharepointteamservices AND (443.https.get.headers.unknown.value: "16.0.0.4351" OR 443.https.get.headers.unknown.value: "15.0.0.4571" OR 443.https.get.headers.unknown.value: "14.0.0.7015" OR 443.https.get.headers.unknown.value: "16.0.0.10337")
¡Parece genial! Alrededor de 800 servidores en todo el mundo externamente visibles que son vulnerables a este ataque. Después de algunos ajustes finos para incluir 80/HTTP obtengo esta consulta:
(443.https.get.headers.unknown.key: microsoftsharepointteamservices AND (443.https.get.headers.unknown.value: "16.0.0.4351" OR 443.https.get.headers.unknown.value: "15.0.0.4571" OR 443.https.get.headers.unknown.value: "14.0.0.7015" OR 443.https.get.headers.unknown.value: "16.0.0.10337")) OR (80.http.get.headers.unknown.key: microsoftsharepointteamservices AND (80.http.get.headers.unknown.value: "16.0.0.4351" OR 80.http.get.headers.unknown.value: "15.0.0.4571" OR 80.http.get.headers.unknown.value: "14.0.0.7015" OR 80.http.get.headers.unknown.value: "16.0.0.10337"))
Lo que arroja un recuento final de unos 1600 servidores Sharepoint en todo el mundo vulnerables a este ataque.
Lo más importante
Aunque esta última vulnerabilidad de Sharepoint supone una amenaza para algunas organizaciones, no se trata de un colapso global de Internet. Si descubre que alguno de sus servidores está incluido en la lista de hosts vulnerables, asegúrese de parchearlo siguiendo las instrucciones que Microsoft incluyó en su actualización de seguridad.
Para artículos similares sobre cómo encontrar vulnerabilidades, particularmente en tu propia organización, echa un vistazo a nuestro post sobre problemas de seguridad de Apache. Para los interesados en cazar amenazas nuevas y emergentes, echa un vistazo a nuestro post sobre cómo rastrear la red de bots Mirai.