Sophos informa sobre las vulnerabilidades de MOVEit CVE-2023-34362 y CVE-2023-35036

Sophos informa sobre las vulnerabilidades de MOVEit CVE-2023-34362 y CVE-2023-35036
Fecha: 16 de junio de 2023

Los usuarios del paquete de transferencia de archivos deben aplicar los parches de inmediato y verificar si hay indicios de un posible compromiso.

Escrita por Christopher Budd , Paul Jaramillo

Sophos X-Ops está rastreando la situación en desarrollo en torno a las vulnerabilidades de inyección SQL que afectan a MOVEit Transfer y MOVEit Cloud. Las vulnerabilidades relacionadas con esto son CVE-2023-34362 y CVE-2023-35036.

Esta publicación proporciona una descripción general de la situación y orientación de SophosLabs y Sophos MDR. Actualizaremos esta página a medida que se desarrollen los eventos y la comprensión, incluida nuestra guía de amenazas y detección.

[Última versión [Actualización 2] publicada a las 8:00 UTC, 16 de junio de 2023 para incluir información de MOVEit sobre una tercera vulnerabilidad recientemente revelada.

La versión 3 se publicó el 9 de junio de 2023 a las 20:30 UTC para incluir información de MOVEit sobre el parche y la guía más recientes, incluido el aviso de una segunda vulnerabilidad (CVE-2023-35036).

La versión 2 [Actualización 1] se publicó el 6 de junio de 2023 a las 23:30 UTC y agregó la sección «Determinación del impacto con Sophos XDR» que brinda consultas de datalake y actualiza la información sobre la cantidad y diversidad de ataques, así como los seguimientos de registro de IIS.

Publicado inicialmente a las 22:43 UTC del 5 de junio de 2023]

Descripción general de la situación

GUÍA ACTUALIZADA: A partir del 15 de junio de 2023, Progress publicó una tercera ronda de material de asesoramiento después de que se revelara una nueva vulnerabilidad. En este momento, Progress recomienda a los usuarios que deshabiliten todo el tráfico HTTP y HTTPs a sus entornos de transferencia MOVEit. Más información está disponible en el enlace.

Una línea de tiempo vertical que muestra eventos significativos en el incidente de MOVEit desde el 27 de mayo de 2023 hasta el 15 de junio de 2023

A partir del 9 de junio de 2023, Progress lanzó un NUEVO parche. Todos los clientes de MOVEit deben aplicar este nuevo parche según las instrucciones .

El 31 de mayo de 2023, Progress Software lanzó un parche para CVE-2023-34362 , una vulnerabilidad de inyección SQL que podría permitir a los atacantes obtener un control total sobre una instalación de MOVEit. (MOVEit es un software seguro de automatización y transferencia de archivos compatible). Con este nivel de acceso, los atacantes podrían alterar o robar datos, instalar software malicioso como web shells y/o alterar la configuración del servidor (incluida la creación de nuevas cuentas o alterar los existentes), entre otras acciones.

Como se discutió en el aviso de progreso para clientes locales , todos los clientes locales de MOVEit deben aplicar las mitigaciones discutidas en el aviso lo antes posible e implementar el parche lo antes posible después de eso. Los clientes de la nube de MOVEit deben leer y seguir las instrucciones del aviso de progreso para clientes de la nube .

Los informes públicos indican que los ataques contra esta vulnerabilidad fueron verdaderos «ataques de día cero» y pueden haber comenzado el 27 de mayo de 2023, antes de que un parche estuviera disponible o la vulnerabilidad se divulgara o discutiera públicamente.

Estos informes también indican que los ataques conocidos contra esta vulnerabilidad se han centrado en crear shells web en sistemas vulnerables y usar ese acceso para robar datos de sistemas comprometidos.

El 4 de junio de 2023, Microsoft Threat Intelligence atribuyó estos ataques a «Lace Tempest», que es «conocido por operaciones de ransomware y por ejecutar el sitio de extorsión Cl0p». Lace Tempest también se rastrea en la industria como FIN11, DEV-0950 y TA505.

Actualmente, SophosLabs y MDR están viendo un número muy bajo de ataques; sin embargo, las víctimas son diversas tanto en geografía como en sector. Esto se correlaciona con los hallazgos de otros proveedores de seguridad . Además, la primera explotación observada por Sophos se produjo el 27 de mayo de 2023, cuatro días antes de la notificación pública de Progress Software.

Sophos también puede confirmar que un indicador clave de una explotación posterior exitosa es la presencia de un shell web: c:\MOVEit Transfer\wwwroot\human2.aspx. A continuación, en la Figura 1, se muestra un ejemplo de un ataque y el tráfico de shell web posterior registrado en los registros de IIS.

Un registro de IIS que muestra el intento de ataque en curso

Figura 1: Ataque en curso

Los productos de Sophos actualmente detectan y protegen contra este shell web como Troj/WebShel-GO.

Un indicador adicional de explotación es «App_Web_<Random8chars>.dll» generado por el compilador csc.exe, generado por el proceso principal w3wp.exe. Este archivo dll contiene los comandos de inyección SQL, así como el shell web codificado, y los productos de Sophos también lo detectan como Troj/WebShel-GO. Todos los clientes de MOVEit deben seguir los pasos descritos en la sección «Orientación» a continuación.

De particular interés: dado que los ataques comenzaron antes de que hubiera un parche disponible, todos los clientes de MOVEit deben buscar signos de compromiso más allá de los discutidos públicamente, ya que los ataques podrían haber ocurrido antes de aplicar el parche utilizando métodos que aún no se han identificado públicamente. Además, es importante tener en cuenta que la aplicación de parches NO eliminará los shells web u otros artefactos de compromiso. Esto hace que sea fundamental que los clientes de MOVEit incluyan una verificación de compromiso después de implementar parches ADEMÁS DE implementar parches. La aplicación de parches por sí sola NO es suficiente.

Guía

Determinación del impacto con Sophos XDR

La siguiente consulta de lago de datos se puede ejecutar para revisar cualquier actividad del compilador csc.exe relacionada con MOVEit, lo que puede indicar intentos de explotación. Tenga en cuenta que también se devolverá actividad benigna con esta consulta, ya que este comportamiento también ocurre durante el proceso de actualización del software.

SELECT
  	   customer_id,
   	   meta_hostname, 
           date_format(from_unixtime(time), '%Y-%m-%d %H:%i:%S') as date_time, 
           time, 
           parent_sophos_pid,
           sophos_pid, 
           parent_name, 
           parent_cmdline,
           username, 
           path, 
           name, 
           cmdline, 
           parent_path, 
           sha1, 
           sha256, 
           company_name,
           file_description,
           file_size,
           file_version,
           is_process_file_signed,
           original_filename,
           product_name
FROM
           xdr_data
WHERE
           query_name = 'running_processes_windows_sophos'
  	   AND LOWER(parent_name) = 'w3wp.exe'
  	   AND LOWER(name) = 'csc.exe'
  	   AND LOWER(parent_cmdline) LIKE '%moveitdmz%'

Si la consulta anterior arroja actividad sospechosa sobre la que desea obtener detalles adicionales, se puede ejecutar la consulta a continuación para proporcionar una visión más profunda del proceso. Deberá generar una variable ‘$$sophos_pid$$’ e ingresar el ID de proceso de Sophos de la consulta anterior. Similar a la primera consulta, esto también puede arrojar resultados benignos que requieren análisis humano.

SELECT
  	   STRFTIME('%Y-%m-%d %H:%M:%S', 
  	   DATETIME(sophos_process_activity.time, 'unixepoch')) 
  	   AS utc_time,
  	   users.username,
  	   process_journal.parent_sophos_pid,
  	   sophos_process_activity.sophos_pid,
  	   process_journal.path,
  	   process_journal.process_name,
  	   process_journal.cmd_line,
  	   sophos_process_activity.subject,
  	   sophos_process_activity.action,
  	   sophos_process_activity.object,
  	   sophos_process_activity.path,
  	   sophos_process_activity.target_path
FROM
  	   sophos_process_activity
  	   LEFT JOIN sophos_process_journal AS process_journal
		ON process_journal.sophos_pid = sophos_process_activity.sophos_pid
  	   LEFT JOIN users
	        ON users.uuid LIKE process_journal.sid
WHERE  
  	   sophos_process_activity.sophos_pid = '$$sophos_pid$$'
  	   AND sophos_process_activity.action = 'Created'
  	   AND sophos_process_activity.object LIKE '%.dll'

Por último, si tiene archivos de registro de IIS disponibles, la siguiente consulta se puede utilizar para buscar actividad de shell web. Deberá generar una variable, ‘$$log_path$$’ e ingresar la ruta del archivo al registro de IIS que le gustaría revisar.

WITH sorter AS (
WITH content AS 
            --Split the raw log into sortable columns
            (
SELECT 
            -- Grab data from the IIS logs, removing comment lines and limiting returned line count to ensure functionality
                    grep.line
FROM file
     CROSS JOIN grep ON (grep.path = file.path)
     WHERE
                    file.path LIKE '$$log_path$$'
                AND (
                    grep.pattern = 'POST /api/v1/token'
                    OR grep.pattern = 'POST /guestaccess.aspx'
                    OR grep.pattern = 'GET /human2.aspx'
                    OR grep.pattern = 'GET /api/v1/folders'
                    )
            )
            SELECT 
                CAST(SPLIT(line,' ',0) AS TEXT) AS iis_date, 
                CAST(SPLIT(line,' ',1) AS TEXT) AS iis_time, 
                SPLIT(line,' ',2) AS source_ip, 
                SPLIT(line,' ',3) AS cs_method,
                SPLIT(line,' ',4) AS cs_uri_stem, 
                SPLIT(line,' ',5) AS cs_uri_query, 
                SPLIT(line,' ',6) AS source_port, 
                SPLIT(line,' ',7) AS cs_username, 
                SPLIT(line,' ',8) AS remote_ip, 
                SPLIT(line,' ',9) AS user_agent, 
                SPLIT(line,' ',10) AS referer, 
                SPLIT(line,' ',11) AS status,
                SPLIT(line,' ',12) AS substatus,
                SPLIT(line,' ',13) AS win32status,
                SPLIT(line,' ',14) AS timetaken
            FROM content
            WHERE iis_date NOT LIKE '#%'
 
         )
        SELECT
        --CAST(MIN(datetime(iis_date || ' ' || iis_time)) AS varchar) AS first_seen,
        --CAST(MAX(datetime(iis_date || ' ' || iis_time)) AS varchar) AS last_seen,
        datetime(iis_date || ' ' || iis_time) AS timestamps,
        source_ip,
        cs_method,
        cs_uri_stem, 
        cs_uri_query,
        source_port, 
        cs_username,   
        remote_ip, 
        user_agent,
        referer, 
        status,
        CASE 
            WHEN status LIKE '100' THEN 'Continue'
            WHEN status LIKE '101' THEN 'Switching protocols'
            WHEN status LIKE '200' THEN 'OK. The client request has succeeded'
            WHEN status LIKE '201' THEN 'Created'
            WHEN status LIKE '202' THEN 'Accepted'
            WHEN status LIKE '203' THEN 'Nonauthoritative information'
            WHEN status LIKE '204' THEN 'No content'
            WHEN status LIKE '205' THEN 'Reset content'
            WHEN status LIKE '206' THEN 'Partial content'
            WHEN status LIKE '301' THEN 'Moved permanently'
            WHEN status LIKE '302' THEN 'Object moved'
            WHEN status LIKE '304' THEN 'Not modified'
            WHEN status LIKE '307' THEN 'Temporary redirect'
            WHEN status LIKE '400' THEN 'Bad request'
            WHEN status LIKE '401' THEN 'Access denied'
            WHEN status LIKE '403' THEN 'Forbidden'
            WHEN status LIKE '404' THEN 'Page Not found'
            WHEN status LIKE '405' THEN 'Method Not Allowed'
            WHEN status LIKE '406' THEN 'Client browser does not accept the MIME type of the requested page'
            WHEN status LIKE '408' THEN 'Request timed out'
            WHEN status LIKE '412' THEN 'Precondition faile'
            WHEN status LIKE '500' THEN 'Internal server error'
            WHEN status LIKE '501' THEN 'Header values specify a configuration that is not implemented'
            WHEN status LIKE '502' THEN 'Web server received an invalid response while acting as a gateway or proxy'
            WHEN status LIKE '503' THEN 'Service unavailable'
            ELSE 'unknown'
            END AS 'status_def',
        CASE
            WHEN status LIKE '400' AND substatus LIKE '1' THEN 'Invalid Destination Header'
            WHEN status LIKE '400' AND substatus LIKE '2' THEN 'Invalid Depth Header'
            WHEN status LIKE '400' AND substatus LIKE '3' THEN 'Invalid If Header'
            WHEN status LIKE '400' AND substatus LIKE '4' THEN 'Invalid Overwrite Header'
            WHEN status LIKE '400' AND substatus LIKE '5' THEN 'Invalid Translate Header'
            WHEN status LIKE '400' AND substatus LIKE '6' THEN 'Invalid Request Body'
            WHEN status LIKE '400' AND substatus LIKE '7' THEN 'Invalid Content Length'
            WHEN status LIKE '400' AND substatus LIKE '8' THEN 'Invalid Timeout'
            WHEN status LIKE '400' AND substatus LIKE '9' THEN 'Invalid Lock Token'
            WHEN status LIKE '401' AND substatus LIKE '1' THEN 'Logon failed'
            WHEN status LIKE '401' AND substatus LIKE '2' THEN 'Logon failed due to server configuration'
            WHEN status LIKE '401' AND substatus LIKE '3' THEN 'Unauthorized due to ACL on resource'
            WHEN status LIKE '401' AND substatus LIKE '4' THEN 'Authorization failed by filter'
            WHEN status LIKE '401' AND substatus LIKE '5' THEN 'Authorization failed by ISAPI/CGI application'
            WHEN status LIKE '401' AND substatus LIKE '501' THEN 'Access Denied: Too many requests from the same client IP; Dynamic IP Restriction Concurrent request rate limit reached'
            WHEN status LIKE '401' AND substatus LIKE '502' THEN 'Forbidden: Too many requests from the same client IP; Dynamic IP Restriction Maximum request rate limit reached'
            WHEN status LIKE '401' AND substatus LIKE '503' THEN 'Access Denied: the IP address is included in the Deny list of IP Restriction'
            WHEN status LIKE '401' AND substatus LIKE '504' THEN 'Access Denied: the host name is included in the Deny list of IP Restriction'
            WHEN status LIKE '403' AND substatus LIKE '1 ' THEN 'Execute access forbidden'
            WHEN status LIKE '403' AND substatus LIKE '2 ' THEN 'Read access forbidden'
            WHEN status LIKE '403' AND substatus LIKE '3 ' THEN 'Write access forbidden'
            WHEN status LIKE '403' AND substatus LIKE '4 ' THEN 'SSL required'
            WHEN status LIKE '403' AND substatus LIKE '5 ' THEN 'SSL 128 required'
            WHEN status LIKE '403' AND substatus LIKE '6 ' THEN 'IP address rejected'
            WHEN status LIKE '403' AND substatus LIKE '7 ' THEN 'Client certificate required'
            WHEN status LIKE '403' AND substatus LIKE '8 ' THEN 'Site access denied'
            WHEN status LIKE '403' AND substatus LIKE '9 ' THEN 'Forbidden: Too many clients are trying to connect to the web server'
            WHEN status LIKE '403' AND substatus LIKE '10' THEN 'Forbidden: web server is configured to deny Execute access'
            WHEN status LIKE '403' AND substatus LIKE '11' THEN 'Forbidden: Password has been changed'
            WHEN status LIKE '403' AND substatus LIKE '12' THEN 'Mapper denied access'
            WHEN status LIKE '403' AND substatus LIKE '13' THEN 'Client certificate revoked'
            WHEN status LIKE '403' AND substatus LIKE '14' THEN 'Directory listing denied'
            WHEN status LIKE '403' AND substatus LIKE '15' THEN 'Forbidden: Client access licenses have exceeded limits on the web server'
            WHEN status LIKE '403' AND substatus LIKE '16' THEN 'Client certificate is untrusted or invalid'
            WHEN status LIKE '403' AND substatus LIKE '17' THEN 'Client certificate has expired or is not yet valid'
            WHEN status LIKE '403' AND substatus LIKE '18' THEN 'Cannot execute requested URL in the current application pool'
            WHEN status LIKE '403' AND substatus LIKE '19' THEN 'Cannot execute CGI applications for the client in this application pool'
            WHEN status LIKE '403' AND substatus LIKE '20' THEN 'Forbidden: Passport logon failed'
            WHEN status LIKE '403' AND substatus LIKE '21' THEN 'Forbidden: Source access denied'
            WHEN status LIKE '403' AND substatus LIKE '22' THEN 'Forbidden: Infinite depth is denied'
            WHEN status LIKE '403' AND substatus LIKE '501' THEN 'Forbidden: Too many requests from the same client IP; Dynamic IP Restriction Concurrent request rate limit reached'
            WHEN status LIKE '403' AND substatus LIKE '502' THEN 'Forbidden: Too many requests from the same client IP; Dynamic IP Restriction Maximum request rate limit reached'
            WHEN status LIKE '403' AND substatus LIKE '503' THEN 'Forbidden: the IP address is included in the Deny list of IP Restriction'
            WHEN status LIKE '403' AND substatus LIKE '504' THEN 'Forbidden: the host name is included in the Deny list of IP Restriction'
            WHEN status LIKE '404' AND substatus LIKE '0' THEN 'Page Not found'
            WHEN status LIKE '404' AND substatus LIKE '1' THEN 'Site Not Found'
            WHEN status LIKE '404' AND substatus LIKE '2' THEN 'ISAPI or CGI restriction'
            WHEN status LIKE '404' AND substatus LIKE '3' THEN 'Multipurpose Internet Mail Extensions (MIME) type restriction'
            WHEN status LIKE '404' AND substatus LIKE '4' THEN 'No handler configured'
            WHEN status LIKE '404' AND substatus LIKE '5' THEN 'Denied by request filtering configuration'
            WHEN status LIKE '404' AND substatus LIKE '6' THEN 'Verb denied'
            WHEN status LIKE '404' AND substatus LIKE '7' THEN 'File extension denied'
            WHEN status LIKE '404' AND substatus LIKE '8' THEN 'Hidden namespace'
            WHEN status LIKE '404' AND substatus LIKE '9' THEN 'File attribute hidden'
            WHEN status LIKE '404' AND substatus LIKE '10' THEN 'Request header too long'
            WHEN status LIKE '404' AND substatus LIKE '11' THEN 'Request contains double escape sequence'
            WHEN status LIKE '404' AND substatus LIKE '12' THEN 'Request contains high-bit characters'
            WHEN status LIKE '404' AND substatus LIKE '13' THEN 'Content length too large'
            WHEN status LIKE '404' AND substatus LIKE '14' THEN 'Request URL too long'
            WHEN status LIKE '404' AND substatus LIKE '15' THEN 'Query string too long'
            WHEN status LIKE '404' AND substatus LIKE '16' THEN 'DAV request sent to the static file handler'
            WHEN status LIKE '404' AND substatus LIKE '17' THEN 'Dynamic content mapped to the static file handler via a wildcard MIME mapping'
            WHEN status LIKE '404' AND substatus LIKE '18' THEN 'Querystring sequence denied'
            WHEN status LIKE '404' AND substatus LIKE '19' THEN 'Denied by filtering rule'
            WHEN status LIKE '404' AND substatus LIKE '20' THEN 'Too Many URL Segments'
            WHEN status LIKE '404' AND substatus LIKE '501' THEN 'Not Found: Too many requests from the same client IP; Dynamic IP Restriction Concurrent request rate limit reached'
            WHEN status LIKE '404' AND substatus LIKE '502' THEN 'Not Found: Too many requests from the same client IP; Dynamic IP Restriction Maximum request rate limit reached'
            WHEN status LIKE '404' AND substatus LIKE '503' THEN 'Not Found: the IP address is included in the Deny list of IP Restriction'
            WHEN status LIKE '404' AND substatus LIKE '504' THEN 'Not Found: the host name is included in the Deny list of IP Restriction'
            ELSE substatus || ' - Not Defined'
            END AS substatus,
        win32status,
        timetaken    
        FROM sorter

Protección de detección

SophosLabs bloqueó los dominios maliciosos y publicó las siguientes detecciones:

Detecciones estáticas:

  • Troj/WebShel-GO

Recursos

Puede encontrar más información sobre esta situación emergente en Sophos Naked Security .

Noticias Recientes

Copilot, el mayor cambio en la historia Windows

A lo largo de sus casi 40 años de vida, el sistema operativo Microsoft Windows ha cambiado mucho. Sin embargo, ninguna actualización alcanzó el impacto que puede tener Copilot. Quienes tuvieron la suerte de tener un ordenador personal en casa durante la década de 1990...