Resumen ejecutivo
Entre junio y diciembre de 2025, la infraestructura oficial de hosting del editor de texto Notepad++ fue comprometida por un grupo de amenazas patrocinado por un estado conocido como Lotus Blossom. Los atacantes vulneraron el entorno del proveedor de hosting compartido.
Esto permitió a los atacantes interceptar y redireccionar el tráfico destinado al servidor de actualizaciones de Notepad++. Este secuestro (hijack) a nivel de infraestructura permitió a los atacantes dirigirse selectivamente a usuarios específicos. Los objetivos se localizaron principalmente en el sudeste asiático, abarcando sectores gubernamentales, de telecomunicaciones e infraestructura crítica. En lugar de actualizaciones de software legítimas, los atacantes entregaron a estos objetivos manifiestos de actualización maliciosos.
Hemos identificado infraestructura adicional no reportada vinculada a esta campaña. Observamos dos cadenas de infección, incluyendo una variante de inyección de script Lua que resultó en la entrega del malware Cobalt Strike beacon, así como side-loading de DLL para entregar un backdoor Chrysalis. Unit 42 también descubrió que esta actividad de amenazas está afectando a más sectores y regiones de lo que se había informado anteriormente.
Esta campaña también afectó a los siguientes sectores en Sudamérica, Estados Unidos, Europa y el sudeste asiático:
- Hosting en la nube
- Energía
- Financiero
- Gobierno
- Manufactura
- Desarrollo de software
Notepad++ es un editor de código abierto, ligero y una utilidad de reemplazo de texto. Esta herramienta es ampliamente preferida por su velocidad, su extenso ecosistema de complementos (plugins) y su capacidad única para manejar archivos de datos masivos manteniendo sesiones que los usuarios aún no han guardado.
En entornos empresariales, Notepad++ suele ser un instrumento fundamental para administradores de sistemas, ingenieros de redes y personal de DevOps. Este personal suele utilizar la herramienta para modificar configuraciones de servidores, analizar logs pesados del sistema y auditar código en jump boxes seguros donde aplicaciones más robustas resultan poco prácticas.
Este perfil demográfico de usuarios convierte a Notepad++ en un objetivo estratégicamente crítico para los actores de amenazas. Comprometer esta única herramienta permite a los atacantes evadir eficazmente las defensas perimetrales y aprovechar las sesiones de los usuarios con mayores privilegios en la organización, obteniendo acceso administrativo implícito a la infraestructura central de la red.
Los clientes de Palo Alto Networks reciben protecciones y mitigaciones contra la actividad analizada en este artículo a través de:
- Advanced URL Filtering y Advanced DNS Security, que identifican como maliciosos las URL y dominios conocidos asociados con esta actividad.
- Los modelos de machine learning y las técnicas de análisis de Advanced WildFire han sido revisados y actualizados a la luz de los indicadores compartidos en esta investigación.
- Cortex Cloud, que ayuda a detectar y prevenir las operaciones maliciosas, alteraciones de configuración o explotaciones analizadas en este artículo.
- Cortex XDR y XSIAM, mediante el empleo del Malware Prevention Engine.
- Next-Generation Firewall con Advanced Threat Prevention, diseñado para defender las redes tanto de amenazas comunes como de ataques dirigidos.
El equipo de Respuesta a Incidentes de Unit 42 también puede ser contratado para ayudar con un compromiso o para proporcionar una evaluación proactiva que reduzca su riesgo.
| Temas relacionados de Unit 42 | DLL Sideloading, Backdoors, Supply Chain, Cobalt Strike |
Detalles del ataque a Notepad++
Este ataque a la cadena de suministro se basó en la explotación de controles de verificación insuficientes en versiones anteriores del actualizador de Notepad++, WinGUp. Esta explotación permitió al grupo de amenazas redirigir el tráfico a servidores controlados por los atacantes.
Cuando las víctimas intentaban actualizar su software, descargaban un instalador NSIS malicioso. Este instalador —a menudo llamado update.exe— iniciaba una compleja cadena de infección. Esta cadena utilizaba técnicas de DLL sideloading y abusaba de un componente legítimo de Bitdefender (BluetoothService.exe) para cargar una biblioteca maliciosa (log.dll) que descifraba y ejecutaba un backdoor personalizado. En otra cadena de infección, los atacantes utilizaron un instalador NSIS para ejecutar un comando que corría un script Lua malicioso para cargar un Beacon de Cobalt Strike.
Este malware llamado Chrysalis empleaba técnicas avanzadas de evasión, que incluían:
- El uso del framework de protección de código de Microsoft Warbird.
- Hashing personalizado de la API para reducir la detección por antivirus.
- Establecimiento de control remoto persistente sobre los sistemas infectados.
Actividad adicional de explotación en esta campaña
Unit 42 observó evidencia de dos secuencias de ataque separadas:
- Una en la que un instalador NSIS malicioso ejecuta un script Lua compilado que contiene un instalador para descargar y ejecutar un payload de Cobalt Strike Beacon.
- Otra en la que los atacantes utilizaron DLL sideloading para inyectar el backdoor Chrysalis en la memoria.
Observamos actividad adicional entre mediados de agosto y noviembre de 2025 que fue consistente con esta actividad de explotación. En un incidente de agosto, observamos comunicación con una dirección IP de comando y control (C2) 45.76.155[.]202. Después de días de tráfico de beacon de C2 hacia esta IP, los atacantes cambiaron a un segundo servidor C2 en 45.77.31[.]210, con comunicaciones que duraron hasta septiembre.
En casos entre septiembre y noviembre de 2025, observamos actividad consistente con conexiones salientes a un servidor C2. Estas fueron seguidas por solicitudes de descarga posteriores para update.exe que son consistentes con el backdoor Chrysalis reportado. En algunos casos, los intentos de descarga se realizaron a una dirección IP, mientras que otros se hicieron a dominios. Los beacons exitosos a servidores maliciosos ocurrieron a los pocos segundos de la descarga exitosa del payload malicioso y continuaron durante un tiempo no especificado.
En septiembre y octubre de 2025, observamos una variante de inyección de script Lua que desplegaba scripts Lua maliciosos para inyectar shellcode. Este ataque utilizó la API EnumWindowStationsW y resultó en la entrega del malware Cobalt Strike beacon. En este caso, la descarga se originó desde:
- 45.76.155[.]202/update/update.exe
Por separado, también observamos una variante de DLL sideloading de Bluetooth en el mismo caso. Esta variante de Lua utiliza técnicas de sideloading de DLL del servicio de Bluetooth para desplegar el backdoor Chrysalis. Los intentos de descarga para esta variante se realizaron desde un servidor malicioso diferente:
- 45.32.144[.]255/update/update.exe
Guía provisional
Notepad++ recomienda lo siguiente:
- Descargar la versión 8.9.1, que incluye la mejora de seguridad correspondiente.
- Ejecutar el instalador para actualizar su Notepad++ manualmente.
Según Notepad++, han migrado su sitio web a un nuevo proveedor de hosting con prácticas de seguridad significativamente más sólidas.
Dentro de Notepad++, mejoraron el actualizador WinGup en la v8.8.9 para verificar tanto el certificado como la firma del instalador descargado.
Adicionalmente, también señalan que:
- El XML devuelto por el servidor de actualizaciones ahora está firmado (XMLDSig).
- La verificación del certificado y la firma se hará obligatoria a partir de la próxima versión 8.9.2, que esperan lanzar en aproximadamente un mes.
Consultas de Unit 42 Managed Threat Hunting
El equipo de Unit 42 Managed Threat Hunting continúa rastreando cualquier signo de uso indebido o actividad anómala, utilizando Cortex XDR y las consultas XQL a continuación. Los clientes de Cortex XDR también pueden usar estas consultas XQL para ayudar con sus investigaciones o búsqueda de amenazas (hunting).
Dado que la mayoría de la actividad probablemente ocurrió antes del 2 de diciembre, recomendamos revisar los límites de retención de datos para determinar si estas consultas serán efectivas en su entorno. Si está disponible en su entorno, puede considerar el uso de consultas de "almacenamiento en frío" (cold_dataset = xdr_data) para consultar datos más allá de los límites de retención activa. Tenga en cuenta que ejecutar consultas contra el almacenamiento en frío consumirá unidades de cómputo.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Name: DLL sideloading via BYO application // Description: Identifies renamed Bitdefender utility loading a log.dll file // MITRE TTP ID: T1574.001 config case_sensitive = false | dataset = xdr_data | fields actor_process_signature_vendor, actor_process_signature_product, action_module_path, actor_process_image_path, actor_process_image_sha256, agent_os_type, event_type, event_id, agent_hostname, _time, actor_process_image_name | filter event_type = ENUM.LOAD_IMAGE and agent_os_type = ENUM.AGENT_OS_WINDOWS | filter actor_process_signature_vendor contains "Bitdefender SRL" and action_module_path contains "log.dll" | filter actor_process_image_path not contains "Program Files\Bitdefender" | filter not actor_process_image_name in ("eps.rmm64.exe", "downloader.exe", "installer.exe", "epconsole.exe", "EPHost.exe", "epintegrationservice.exe", "EPPowerConsole.exe", "epprotectedservice.exe", "DiscoverySrv.exe", "epsecurityservice.exe", "EPSecurityService.exe", "epupdateservice.exe", "testinitsigs.exe", "EPHost.Integrity.exe", "WatchDog.exe", "ProductAgentService.exe", "EPLowPrivilegeWorker.exe", "Product.Configuration.Tool.exe", "eps.rmm.exe") |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Name: Chrysalis Mutex // Description: Identifies a Mutex known to be related to the chrysalis backdoor malware // MITRE TTP ID: T1480.002 config case_sensitive = false | dataset = xdr_data | fields _time, agent_hostname, actor_effective_username, actor_process_image_name, actor_process_image_path, actor_process_command_line, event_type, event_sub_type, action_syscall_string_params | filter event_type = ENUM.SYSTEM_CALL and event_sub_type = ENUM.SYSTEM_CALL_NT_CREATE_MUTANT | alter mutex = json_extract_scalar(action_syscall_string_params, "$.1") | filter mutex = "Global\\Jdhfv_1.0.1" |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Name: GUP.exe Writing Unusual Files to Temp Folder // Description: Detects cases where the Notepad++ updater (gup.exe) writes files to a temp folder that that deviate from the normal and expected. // MITRE TTP ID: T1036.005 config case_sensitive = false | dataset = xdr_data | fields _time, agent_hostname, event_type, event_sub_type, action_file_name, action_file_path, actor_effective_username, action_file_extension, action_file_previous_file_path, action_file_sha256, action_file_size, actor_process_image_name, actor_process_image_path, actor_process_command_line, actor_process_image_sha256, causality_actor_process_image_name, causality_actor_process_image_path, os_actor_primary_username, os_actor_process_command_line, os_actor_process_image_name, os_actor_process_image_path, agent_os_type | filter event_type = ENUM.FILE and event_sub_type = ENUM.FILE_WRITE | filter lowercase(actor_process_image_name) = "gup.exe" and action_file_sha256 != null | filter lowercase(actor_process_command_line) !~= "((\\notepad\+\+(?:_?x?\d+?)??|\\nppp?[\.\d]*?(?:portable)??(?:\.x64)??).*?\\plugins|-ihttps:\/\/notepad-plus-plus\.org\/update\/getdownloadurl\.php)" and lowercase(action_file_path) ~= "(\\appdata\\local\\temp\\|\\windows\\temp)" and lowercase(action_file_name) !~= "(npp[\.\d]+?installer)" | sort desc _time |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
// Name: GUP.exe Downloading Improperly Signed Installer // MITRE TTP ID: T1036.001 config case_sensitive = false | dataset = xdr_data | fields _time, agent_hostname, event_type, event_sub_type, action_process_username, action_process_user_sid, action_process_image_name, action_process_image_path, action_process_image_command_line, action_process_image_sha256, action_process_os_pid, action_process_cwd, action_process_file_info, action_process_file_size, action_process_file_web_mark, action_process_signature_vendor, action_process_signature_product, action_process_signature_status, actor_effective_username, actor_effective_user_sid, actor_process_image_name, actor_process_image_path, actor_process_command_line, actor_process_signature_vendor, actor_process_signature_product, actor_process_signature_status, causality_actor_primary_username, causality_actor_process_image_name, causality_actor_process_image_path, causality_actor_process_command_line, os_actor_primary_username, os_actor_process_image_name, os_actor_process_image_path, os_actor_process_image_command_line, os_actor_process_image_sha256, action_process_instance_id, actor_process_instance_id, causality_actor_process_instance_id, agent_os_type, agent_id | filter event_type = ENUM.PROCESS and event_sub_type = ENUM.PROCESS_START and _product = "XDR agent" and _vendor = "PANW" | filter lowercase(actor_process_image_name) = "gup.exe" and actor_process_signature_status not in (null, ENUM.UNSUPPORTED, ENUM.FAILED_TO_OBTAIN ) and action_process_signature_status not in (null, ENUM.UNSUPPORTED, ENUM.FAILED_TO_OBTAIN ) and action_process_image_sha256 not in ( "71431fa7b66f8132453e18e3a5f8ef0af3ca079a7793f828df06fdb5d7bd915d", "2dd5473736ef51e4340cae005e3fc8cdf0e42ec649bc6ed186484a79be409928", "a19aa1cd7ecb9ca3f1fd0e118fffd0d673fba404ced8c39c2e210a63b70f9c15", "e22abc9af328d063e652f0829819124a6a748c224bc8b10f98473f87cda2c0cd", "61c3077b989e272117167c90fc35e7f06bea4f992f3395b40ccee083d7258082", "49d2531893b09cb6a8e3429ca0a734e871a2d96fa2575c0eec3229d383fa233a", "32aa12d3c9521477a5a1e086e400ec0f77f8a97a8190806a0f1953688b883cfb", "8117c82a3821965d92ee3f9f3ae10efcd602bd4b6e52a2fe957d70aafe479744", "05abc57952974d08feafa399d6fdb37945a3fd0a10f37833dd837a5788e421d5", "c6d1e5aacbf69aa18df4caf1346fd69638491a5ad0085729bae91c662d1c62bb", "e1df78704001bba1a3d343f62a1242a4484ff6ad269170714263c03b802eb0b1", "7094a07167648628e47249a16d9d6db922e5aa1255ac4322a2e4900d233372dd" ) | filter lowercase(action_process_image_name) ~= "(npp[\.\d]+?installer)" | dedup agent_id by desc _time | filter action_process_signature_status != ENUM.SIGNED or lowercase(action_process_signature_vendor) != "notepad++" | sort desc _time |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// Name: GUP.exe Spawning Unusual Subprocesses // Description: Detects cases where the Notepad++ updater (gup.exe) spawns child processes that deviate from the normal and expected. // MITRE TTP ID: T1202 config case_sensitive = false | dataset = xdr_data | fields _time, agent_hostname, event_type, event_sub_type, action_process_username, action_process_user_sid, action_process_image_name, action_process_image_path, action_process_image_command_line, action_process_image_sha256, action_process_os_pid, action_process_cwd, action_process_file_info, action_process_file_size, action_process_file_web_mark, action_process_signature_vendor, action_process_signature_product, action_process_signature_status, actor_effective_username, actor_effective_user_sid, actor_process_image_name, actor_process_image_path, actor_process_command_line, actor_process_signature_vendor, actor_process_signature_product, actor_process_signature_status, causality_actor_primary_username, causality_actor_process_image_name, causality_actor_process_image_path, causality_actor_process_command_line, os_actor_primary_username, os_actor_process_image_name, os_actor_process_image_path, os_actor_process_image_command_line, os_actor_process_image_sha256, action_process_instance_id, actor_process_instance_id, causality_actor_process_instance_id, agent_os_type, agent_id | filter event_type = ENUM.PROCESS and event_sub_type = ENUM.PROCESS_START | filter lowercase(actor_process_image_name) = "gup.exe" | filter lowercase(action_process_image_name) !~= "(npp[\.\d]+?installer|consent\.exe|explorer\.exe|werfault\.exe|smartscreen\.exe|adminbyrequest\.exe|openwith\.exe)" and lowercase(action_process_image_command_line) !~= "(https:\/\/notepad-plus-plus\.org\/|https:\/\/npp-user-manual\.org\/)" and lowercase(actor_process_command_line) !~= "(\\notepad\+\+\\plugins|https:\/\/notepad-plus-plus\.org\/)" | sort desc _time |
Conclusión
Esta campaña marca una evolución notable en las tácticas operativas de los actores de amenazas de este tipo, representando un giro desde el posicionamiento previo en infraestructura amplia hacia una interdicción de cadena de suministro "blanda" altamente dirigida. Campañas recientes de grupos como Volt Typhoon y Salt Typhoon se han centrado principalmente en comprometer infraestructuras troncales críticas y dispositivos de borde, basándose en técnicas de "living-off-the-land" y malware mínimo. En cambio, esta operación ilumina una prioridad estratégica distinta: centrarse en los custodios de las claves administrativas.
Secuestrar el flujo de tráfico de una utilidad confiable, en lugar de inyectar código en la línea de compilación del software, permitió a los actores de amenazas convertir su mecanismo de entrega en un arma sin alertar al proveedor. Esta capacidad de adversario en el medio (AitM) permitió el fingerprinting dinámico de las solicitudes de actualización entrantes, lo que posibilitó un filtrado altamente selectivo de objetivos prioritarios.
Esta campaña no se centra en la disrupción, sino en la obtención de inteligencia valiosa a largo plazo. Esto se ilustra por la combinación de la victimología selectiva del actor de amenazas —centrada en administradores de sistemas y desarrolladores en muchas regiones estratégicas desde el punto de vista geopolítico— y su elección de utilizar un backdoor ligero con un perfil bajo.
Palo Alto Networks ha compartido nuestros hallazgos con nuestros colegas miembros de la Cyber Threat Alliance (CTA). Los miembros de la CTA utilizan esta inteligencia para desplegar rápidamente protecciones para sus clientes y desbaratar sistemáticamente a los actores cibernéticos maliciosos. Obtenga más información sobre la Cyber Threat Alliance.
Los clientes de Palo Alto Networks están mejor protegidos por nuestros productos, como se detalla a continuación. Actualizaremos este informe de amenazas a medida que haya más información relevante disponible.
Protecciones de productos de Palo Alto Networks
Los clientes de Palo Alto Networks pueden aprovechar una variedad de protecciones y actualizaciones de productos para identificar y defenderse contra esta amenaza.
Si cree que puede haber sido comprometido o tiene un asunto urgente, póngase en contacto con el equipo de Respuesta a Incidentes de Unit 42 o llame al:
- América del Norte: Línea gratuita: +1 (866) 486-4842 (866.4.UNIT42)
- Reino Unido: +44.20.3743.3660
- Europa y Medio Oriente: +31.20.299.3130
- Asia: +65.6983.8730
- Japón: +81.50.1790.0200
- Australia: +61.2.4062.7950
- India: 000 800 050 45107
- Corea del Sur: +82.080.467.8774
Advanced WildFire
Los modelos de machine learning y las técnicas de análisis de Advanced WildFire han sido revisados y actualizados a la luz de los indicadores compartidos en esta investigación.
Next-Generation Firewalls con Advanced Threat Prevention
El Next-Generation Firewall con Advanced Threat Prevention está diseñado para defender las redes tanto de amenazas comunes como de amenazas dirigidas.
Servicios de seguridad entregados en la nube para el Next-Generation Firewall
Advanced URL Filtering y Advanced DNS Security identifican como maliciosos las URL y dominios conocidos asociados con esta actividad.
Cortex XDR y XSIAM
Cortex XDR y XSIAM ayudan a prevenir las amenazas descritas en este artículo mediante el empleo del Malware Prevention Engine. Este enfoque combina varias capas de protección, incluyendo Advanced WildFire, Behavioral Threat Protection y el módulo de Análisis Local, para evitar que el malware, tanto conocido como desconocido, cause daños a los endpoints.
Cortex Cloud
Las organizaciones que utilizan Cortex Cloud, como las de la industria de hosting en la nube que fueron objetivos activos durante esta campaña, están mejor protegidas contra la descarga y ejecución del malware mencionado en este artículo mediante la colocación adecuada del agente de endpoint XDR de Cortex Cloud y los agentes serverless dentro de un entorno de nube.
Diseñado para proteger la postura de una nube y las operaciones de tiempo de ejecución contra estas amenazas, Cortex Cloud ayuda a detectar y prevenir las operaciones maliciosas, alteraciones de configuración o explotaciones analizadas en este artículo.
Indicadores de compromiso
- 1f6d28370f4c2b13f3967b38f67f77eee7f5fba9e7743b6c66a8feb18ae8f33e
- a3cf1c86731703043b3614e085b9c8c224d4125370f420ad031ad63c14d6c3ec
- a511be5164dc1122fb5a7daa3eef9467e43d8458425b15a640235796006590c9
- skycloudcenter[.]com
- self-dns[.]it[.]com
- safe-dns[.]it[.]com
- cdncheck[.]it[.]com
- 95[.]179[.]213[.]0
- 45[.]76[.]155[.]202
- 45[.]77[.]31[.]210
- 61[.]4[.]102[.]97
- 59[.]110[.]7[.]32
- 95[.]179[.]213[.]0/update/AutoUpdater.exe
- 95[.]179[.]213[.]0/update/Upgrade.exe
- 45[.]32[.]144[.]255/update/update.exe
- 45[.]76[.]155[.]202/update/update.exe
- 59[.]110[.]7[.]32/dpixel
- self-dns[.]it[.]com/help/Get-Start
- self-dns[.]it[.]com/resolve
- self-dns[.]it[.]com/dns-query
- safe-dns[.]it[.]com/help/Get-Start
- safe-dns[.]it[.]com/resolve
- safe-dns[.]it[.]com/dns-query