Key Takeaways
- PeckBirdy es un marco de comando y control (C&C) basado en JScript utilizado por actores APT alineados con China desde 2023, diseñado para ejecutarse en múltiples entornos, permitiendo un despliegue flexible.
- Dos puertas traseras modulares, HOLODONUT y MKDOOR, amplían las capacidades de ataque de PeckBirdy más allá de su funcionalidad principal.
- Mientras tanto, las campañas SHADOW-VOID-044 y SHADOW-EARTH-045 demuestran actividad coordinada de grupos de amenazas alineados con China que utilizan PeckBirdy a través de múltiples vectores de ataque.
- Una de las campañas aprovecha certificados de firma de código robados para cargas útiles de Cobalt Strike y explota (CVE-2020-16040) alojados en múltiples dominios C&C y direcciones IP para mantener el acceso persistente.
- TrendAI Vision One™ detecta y bloquea los indicadores de compromiso (IOCs) descritos en este blog, y proporciona a los clientes consultas personalizadas de búsqueda de amenazas, información sobre amenazas e informes de inteligencia.
Introducción Desde 2023, hemos observado campañas de amenazas que emplean un marco de comando y control basado en scripts (C&C) hasta ahora desconocido, al que denominamos PeckBirdy, utilizado contra la industria del juego china, así como actividades maliciosas dirigidas a entidades gubernamentales y organizaciones privadas asiáticas. Durante el seguimiento de este marco, identificamos al menos dos campañas que utilizaban PeckBirdy, las cuales pudimos vincular con varios actores de amenazas persistentes avanzadas (APT) alineados con China. Cabe mencionar que ya hablamos de estas campañas durante la conferencia HitCon en agosto de 2025, y ahora publicamos esta entrada para compartir nuestros hallazgos con un público más amplio. PeckBirdy es un framework basado en scripts que, si bien posee capacidades avanzadas, está implementado en JScript , un lenguaje de scripts antiguo. Esto garantiza que el framework pueda ejecutarse en diferentes entornos mediante binarios LOLBins (Living off the land). Esta flexibilidad nos permitió observar PeckBirdy en diversas etapas de la cadena de ataque, incluyendo su uso como servidor de control de watering-hole durante la fase inicial del ataque, como servidor de shell inversa durante la fase de movimiento lateral y como servidor C&durante la fase de puerta trasera. En esta entrada, analizaremos en detalle PeckBirdy, sus campañas de ataque y dos nuevas puertas traseras, «HOLODONUT» y «MKDOOR», que detectamos en operaciones relacionadas. Además, abordaremos la atribución de la campaña correspondiente. Actividades en la naturaleza A partir de 2023, detectamos que varios sitios web de apuestas chinos estaban siendo infectados con scripts maliciosos que conectaban con servidores remotos. Una investigación más profunda de las infecciones y los servidores nos llevó a descubrir el framework de scripts PeckBirdy. Cuando las víctimas visitan estos sitios web de apuestas, los scripts infectados descargan y ejecutan el script principal de la rutina PeckBirdy, lo que permite a los atacantes enviar y ejecutar JavaScript de forma remota. El objetivo principal de esta táctica es mostrar páginas web falsas de actualización de software para Google Chrome con el fin de incitar a las víctimas a descargar y ejecutar archivos de actualización maliciosos, que son puertas traseras preparadas por los atacantes. Esta es la primera campaña que hemos identificado y que estamos rastreando bajo el nombre SHADOW-VOID-044. Durante julio de 2024, observamos otra campaña dirigida principalmente a entidades gubernamentales y organizaciones privadas asiáticas, a la que rastreamos bajo el nombre de campaña SHADOW-EARTH-045. Descubrimos que esta campaña inserta enlaces de PeckBirdy en sitios web gubernamentales, probablemente para distribuir scripts que permitan la obtención de credenciales en dichos sitios. En un caso, la inyección se produjo en la página de inicio de sesión de un sistema gubernamental, mientras que en otro incidente, observamos que el atacante utilizó MSHTA para ejecutar PeckBirdy como canal de acceso remoto para el movimiento lateral en una organización privada. El responsable de los ataques también desarrolló un ejecutable .NET para iniciar PeckBirdy con ScriptControl. Estos hallazgos demuestran la versatilidad del diseño de PeckBirdy, que le permite cumplir múltiples funciones. Análisis del marco de trabajo PeckBirdy PeckBirdy se puede ejecutar en diversos entornos, incluidos navegadores, MSHTA, WScript, ASP clásico, Node.js y .NET (ScriptControl) . Dependiendo del entorno, las capacidades y el propósito de PeckBirdy pueden variar. Por ejemplo, en un entorno de navegador, PeckBirdy solo puede operar dentro del ámbito de la página web debido a los mecanismos de aislamiento (sandboxing). Sin embargo, en otros entornos, como MSHTA, PeckBirdy puede ejecutar más acciones directamente en una máquina local. El servidor PeckBirdy cuenta con API definidas que permiten a los clientes obtener scripts de aterrizaje del servidor mediante una simple consulta HTTP(S). La siguiente tabla muestra las API del servidor PeckBirdy que hemos observado. Tabla 1. Las API del servidor PeckBirdy para obtener scripts de aterrizaje. Dependiendo del valor ATTACK_ID adjunto en la consulta, cada script PeckBirdy generado contiene una configuración integrada (donde ATTACK_ID es un valor predefinido compuesto por una cadena aleatoria de 32 caracteres). Los valores configurados se utilizan para controlar el comportamiento de PeckBirdy durante la ejecución, que incluye los siguientes elementos. Tabla 2. La configuración integrada en el script de PeckBirdy Para ampliar las capacidades de PeckBirdy, su desarrollador lo implementó utilizando un lenguaje de script antiguo conocido como JScript (posteriormente ECMAScript 3) y lo diseñó para admitir múltiples protocolos de comunicación, garantizando así la compatibilidad en diversos entornos. Las funciones integradas definidas en ECMAScript 5 , como JSON, también se utilizan cuando se detecta un entorno más reciente. En caso contrario, PeckBirdy utiliza otra versión de las funciones implementadas por el propio framework con JScript. En la ejecución inicial, PeckBirdy busca objetos únicos que existen solo en entornos específicos para determinar el contexto de ejecución actual. Comprueba el el objeto window en entornos de navegador, el objeto process en el entorno NodeJS, el objeto response en el entorno ASP y la presencia de la etiqueta APPLICATION dentro del HTML en entornos HTA. Tras determinar el entorno actual, PeckBirdy genera un ID de víctima mediante distintos métodos según el entorno. En un entorno de host local, como HTA, intenta obtener información del hardware de la placa base y el disco duro de los equipos de la víctima. A continuación, combina esta información con MD5 para generar un valor hash que sirve como ID de víctima. Si este paso falla o si se produce en otros entornos donde no se puede obtener información del hardware, genera directamente una cadena aleatoria de 32 caracteres como ID de víctima. Para preservar el ID de la víctima en entornos de navegador, PeckBirdy añade el prefijo Hm_lvt_ (un prefijo de cookie conocido utilizado por un servicio legítimo) a la cadena del ID de la víctima y lo guarda en una cookie del navegador. En otros casos, guarda la cadena del ID de la víctima en un archivo llamado ___unique_id___ , que se ubica en la carpeta temporal de Windows. Esto permite a PeckBirdy recuperar el ID de la víctima en ejecuciones posteriores. Tras la inicialización, PeckBirdy detecta los métodos de comunicación compatibles con el entorno. El método predeterminado utiliza el protocolo WebSocket para comunicarse con el servidor PeckBirdy. Si WebSocket no es compatible, intenta detectar la presencia de Adobe Flash y, a continuación, crea un objeto ActiveX de Flash para establecer una comunicación mediante socket TCP (para garantizar la compatibilidad con entornos antiguos, a pesar de que Flash se dejó de usar en 2020). Si ninguno de estos métodos es compatible, PeckBirdy puede utilizar los métodos Comet y LocalComet, basados en los protocolos HTTP(S) y AJAX. Aunque Comet es menos eficiente, ofrece una amplia compatibilidad con diferentes entornos. Tomando como ejemplo WebSocket en un navegador, PeckBirdy envía inicialmente una solicitud de inicialización al servidor remoto para iniciar la comunicación. Esta solicitud incluye el dominio y la URL del sitio web actual, así como el ID de víctima mencionado anteriormente, el ID de ataque , junto con un nuevo valor de ID de sesión generado (que también es una cadena aleatoria de 32 caracteres). El servidor responde con el script de segunda etapa de PeckBirdy, que incluye los procedimientos de ejecución del script y las rutinas de cifrado y descifrado AES. La comunicación subsiguiente se cifra mediante AES y luego se codifica con Base64, siendo la clave de cifrado AES el valor ATTACK ID de la configuración. Lamentablemente, no pudimos recopilar muchos de los scripts enviados directamente desde las comunicaciones de PeckBirdy con su servidor. El único que recibimos fue un script corto para robar los valores de las cookies de los sitios web infectados en los navegadores. También descubrimos archivos de script adicionales alojados en uno de los servidores de PeckBirdy (perteneciente a SHADOW-VOID-044) que, al parecer, se distribuyen y ejecutan a través de PeckBirdy. Estos archivos nos permitieron comprender cómo los ciberdelincuentes utilizan PeckBirdy para llevar a cabo sus ataques. Los guiones que encontramos incluían: El script de explotación para la vulnerabilidad CVE-2020-16040 que afecta a Google Chrome Scripts para ventanas emergentes de ingeniería social diseñadas para engañar a las víctimas y lograr que descarguen y ejecuten archivos maliciosos. Scripts para la instalación de puertas traseras adicionales que se ejecutan mediante Electron JS. Scripts para establecer shells inversas a través de sockets TCP Análisis de puerta trasera Basándonos en la infraestructura propiedad de los ciberdelincuentes, identificamos dos puertas traseras modulares distintas, HOLODONUT y MKDOOR, vinculadas a SHADOW-VOID-044. HOLODONUT HOLODONUT es una puerta trasera modular basada en .NET que encontramos en la infraestructura del atacante. Para ejecutar HOLODONUT, los atacantes implementaron un descargador simple personalizado que se utiliza para obtener la carga útil del servidor remoto, al que identificamos como NEXLOAD. La característica más destacada de NEXLOAD es que envía una cadena con un formato específico, “ {string}#{string} ”, durante la primera conexión. A continuación, la carga útil obtenida se descifra mediante el algoritmo XOR y se ejecuta utilizando la función de devolución de llamada “EnumWindows()”. Para evadir las defensas, la carga útil utiliza diversas técnicas, como la desactivación de AMSI y EtwEvent, así como Donut , una herramienta de código abierto que se usa para ejecutar sigilosamente ensamblados .NET. Como resultado, HOLODONUT puede ejecutarse en la memoria del proceso con menor visibilidad. Basándonos en el código, podemos resumir los tipos de paquetes compatibles y los comandos integrados de la siguiente manera: El primer tipo de paquete está relacionado con el gestor de complementos, que se utiliza para recibir, ejecutar o descargar complementos de servidores C&. Además de los paquetes relacionados con los complementos, el programa proporciona comandos integrados para la recopilación de información, la suspensión y la salida. Tabla 3. Tipos de paquetes HOLODONUT compatibles MKDOOR Durante nuestro monitoreo a largo plazo de SHADOW-VOID-044, encontramos una página web de phishing utilizada para engañar a los usuarios y que descargaran una actualización falsa de Google Chrome. Tras descargar y analizar el archivo, identificamos otra puerta trasera de diseño modular, MKDOOR, compuesta por dos módulos diferentes: el descargador y la puerta trasera. En la primera ejecución, el descargador se conecta al servidor C&C y descarga el módulo de la puerta trasera. Para evadir las defensas, intenta eludir Microsoft Defender añadiéndose a la lista de exclusión y haciendo que la URL contactada parezca una página de soporte de Microsoft. Una vez iniciado el módulo de puerta trasera, este recuperará la configuración de red integrada en el módulo de descarga y establecerá otra conexión con el servidor C&. La ruta URL utilizada por el módulo de puerta trasera también se disfraza como relacionada con la activación de Windows. Como puerta trasera modular, las capacidades de MKDOOR dependen de los módulos recibidos del servidor C&C. Lamentablemente, no pudimos obtener el módulo del servidor durante nuestra investigación. Por lo tanto, solo podemos proporcionar los comandos compatibles con el malware, que se muestran en la siguiente tabla: Tabla 4. Comandos compatibles de MKDOOR Atribución de campaña Descubrimos dos campañas de amenazas que utilizaron PeckBirdy en sus operaciones. Basándonos en la victimología y las herramientas, tácticas y procedimientos (TTP) empleados en cada campaña, las atribuimos a dos conjuntos de intrusiones temporales: SHADOW-VOID-044 y SHADOW-EARTH-045. Nuestra investigación reveló que estas dos campañas podrían estar vinculadas a diferentes actores APT alineados con China. En el caso de SHADOW-VOID-044, observamos que la puerta trasera GRAYRABBIT (previamente reportada como utilizada por UNC3569 ) estaba alojada en un servidor ( 47[.]238[.]219[.]111 ) operado por esta campaña. La muestra de GRAYRABBIT que observamos era ligeramente diferente, ya que utilizaba una técnica de carga lateral de DLL combinada con la función UuidFromStringA de PowerShell para leer, decodificar y ejecutar la carga útil de la puerta trasera. A pesar de los diferentes métodos de ejecución, el servidor C&C center[.]myrnicrosoft[.]com era el mismo que el dominio C&C utilizado por UNC3569. Además, tanto SHADOW-VOID-044 como UNC3569 tenían como objetivo la industria del juego china. Estos hallazgos nos brindan un nivel de confianza de moderado a alto para atribuir esta campaña a UNC3569. También descubrimos que SHADOW-VOID-044 utilizó la puerta trasera HOLODONUT, que probablemente esté vinculada a otra puerta trasera, WizardNet, cuyo uso por parte de un grupo APT llamado TheWizard ya se había reportado. Curiosamente, algunas de las muestras de HOLODONUT utilizadas por SHADOW-VOID-044 se conectaron al mismo servidor C&C ( mkdmcdn[.]com ), el mismo que utiliza TheWizard. Si bien no observamos ninguna conexión adicional entre Campaign Alpha y TheWizard, cabe destacar que TheWizard también utilizó la puerta trasera DarkNimbus, desarrollada por el actor de amenazas Earth Minotaur, del que hablamos en una entrada anterior del blog. Otro hallazgo durante nuestra investigación fue una muestra de Cobalt Strike (SHA256: 162cc325ab7b6e70edb6f4d0bc0e52130c56903f) alojada en el servidor SHADOW-VOID-044 oss-cdn[.]com . Descubrimos que esta muestra estaba firmada con un certificado (huella digital, SHA1: bbd2b9b87f968ed88210d4261a1fe30711e8365b) robado a una empresa de videojuegos surcoreana. Este certificado también se utilizó en la campaña BIOPASS RAT , sobre la cual también informamos. Según nuestros hallazgos, tanto BIOPASS RAT como MKDOOR emplean la misma técnica: abrir un servidor HTTP en un puerto de numeración alta en el host local para que escuche. Esto permite que un script de ataque de tipo watering hole escanee la presencia del puerto en el host local y determine si la víctima ha sido infectada con la puerta trasera. La campaña BIOPASS RAT está vinculada a otro actor de amenazas, Earth Lusca . En el caso de SHADOW-EARTH-045, observamos actividades maliciosas dirigidas a una institución educativa filipina en julio de 2024. El atacante ejecutó un comando MSHTA conectándose a github[.]githubassets[.]net para lanzar PeckBirdy en un servidor de Internet Information Services (IIS) comprometido. El atacante también descargó simultáneamente archivos de 47[.]238[.]184[.]9 , una dirección IP que ya se había vinculado con Earth Baxia . Cabe destacar que la atribución que vincula SHADOW-EARTH-045 con Earth Baxia sigue siendo de baja confianza por el momento. Sin embargo, es importante mencionar que el mismo dominio de PeckBirdy y la dirección IP utilizada también se mencionaron en otro informe sobre ataques contra una organización gubernamental de TI africana. Conclusión Este informe describe dos campañas que evidencian la creciente sofisticación y adaptabilidad de los ciberdelincuentes vinculados a China. Estas campañas utilizan un marco de trabajo JavaScript dinámico, PickBirdy, para explotar binarios que se ejecutan de forma remota e instalar puertas traseras modulares como MKDOOR y HOLODONUT. La detección de marcos de trabajo JavaScript maliciosos sigue siendo un desafío importante debido al uso de código generado dinámicamente e inyectado en tiempo de ejecución, así como a la ausencia de archivos persistentes, lo que les permite eludir los controles de seguridad tradicionales de los endpoints. En este contexto, la adaptabilidad y el perfeccionamiento continuo de las estrategias defensivas ya no son opcionales, sino fundamentales para mantener la integridad operativa en un entorno digital cada vez más hostil. Seguridad proactiva con TrendAI Vision One™ TrendAI Vision One™ es la plataforma de ciberseguridad basada en IA líder en la industria que centraliza la gestión de la exposición al riesgo cibernético, las operaciones de seguridad y una sólida protección por capas. Centro de inteligencia de amenazas TrendAI Vision One™ TrendAI Vision One™ Threat Intelligence Hub proporciona la información más reciente sobre amenazas emergentes y actores de amenazas, informes estratégicos exclusivos de TrendAI™ Research y el TrendAI Vision One™ Threat Intelligence Feed en la plataforma TrendAI Vision One™. Amenazas emergentes: PeckBirdy: Un marco de script versátil para la explotación de LOLBins utilizado por grupos de amenazas alineados con China. Informes de inteligencia TrendAI Vision One™ (Análisis del IOC) PeckBirdy: Un marco de script versátil para la explotación de LOLBins utilizado por grupos de amenazas alineados con China. Perfiles de los actores de amenazas: VACÍO DE SOMBRA-044 SOMBRA-TIERRA-045 Tierra Baxia Minotauro de la Tierra Tierra Lusca Consultas de caza malName: (*MKDOOR* O *HOLODONUT* O *GRAYRABBIT* O *PECKBIRDY*) Y eventName: MALWARE_DETECTION Aplicación de búsqueda TrendAI Vision One™ Los clientes de TrendAI Vision One™ pueden usar la aplicación de búsqueda para comparar o detectar los indicadores maliciosos mencionados en esta publicación del blog con los datos de su entorno. Hay más consultas de búsqueda disponibles para TrendAI Vision One™ con la autorización de Threat Intelligence Hub habilitada. Indicadores de Compromiso (IoC) Los indicadores de compromiso para esta entrada se pueden encontrar aquí .
Since 2023, we have been observing threat campaigns employing a previously unseen script-based command-and-control (C&C) framework which we named PeckBirdy, being used against Chinese gambling industries, as well as malicious activities targeting Asian government entities and private organizations. While tracking this framework, we identified at least two campaigns using PeckBirdy, which we were able to link to several China-aligned advanced persistent threat (APT) actors. Note that we’ve previously discussed these campaigns during the HitCon conference last August 2025, and are now publishing this entry to share our findings to a wider audience.
PeckBirdy is a script-based framework which, while possessing advanced capabilities, is implemented using JScript, an old script language. This is to ensure that the framework could be launched across different execution environments via LOLBins (Living off the land binaries). This flexibility allowed us to observe PeckBirdy in various kill chain stages, including being used as a watering-hole control server during the initial attack phase, as a reverse shell server during the lateral movement phase, and as a C&C server during the backdoor phase.
In this entry, we will provide our detailed analysis of PeckBirdy, its attack campaigns, and a pair of new backdoors, “HOLODONUT” and “MKDOOR” which we found being used in related operations. In addition, we will also discuss the attribution of the corresponding campaign.
In-the-wild activities
Beginning in 2023, we noticed multiple Chinese gambling websites being injected with malicious scripts with links to remote servers. Further investigation into the injections and servers led us to discover the PeckBirdy script framework. When victims visit these gambling websites, the injected scripts download and execute the main script of the PeckBirdy routine, allowing attackers to remotely deliver and execute JavaScript.
The primary goal of this routine is to display fake software update webpages for Google Chrome to entice victims into downloading and executing malicious update files, which are backdoors prepared by the attackers. This constitutes the first campaign we identified, which we are tracking under the name SHADOW-VOID-044.

During July 2024, we observed another campaign primarily targeting Asian government entities and private organizations, which we tracked under the campaign name SHADOW-EARTH-045. We discovered that this campaign injects PeckBirdy links into government websites, likely to deliver scripts for credential harvesting on the website.
In one case, the injection was on a login page of a government’s system, while in another incident, we noticed the attacker using MSHTA to execute PeckBirdy as a remote access channel for lateral movement in a private organization. The threat actor behind the attacks also developed a .NET executable to launch PeckBirdy with ScriptControl. These findings demonstrate the versatility of PeckBirdy’s design, which enables it to serve multiple purposes.
Analysis of the PeckBirdy framework
PeckBirdy can be executed in various environments, including browsers, MSHTA, WScript, Classic ASP, Node JS, and .NET (ScriptControl). Depending on the environment, PeckBirdy’s capabilities and purpose can vary.
For example, in a browser environment, PeckBirdy can only operate within the scope of the webpage due to sandboxing mechanisms. However, in other environments such as MSHTA, PeckBirdy can execute more actions directly on a local machine. The PeckBirdy server has defined APIs, which allows clients to obtain landing scripts from the server via a simple HTTP(S) query. The following table shows the PeckBirdy server APIs that we observed.
| API | Description |
|---|---|
| https://{domain}/{ATTACK_ID} | Downloads the main PeckBirdy script |
| https://{domain}/{ATTACK_ID}/hta | Downloads the landing script for MSHTA |
| https://{domain}/{ATTACK_ID}/html | Downloads the landing script for MTML |
| https://{domain}/{ATTACK_ID}/wscript | Downloads the landing script for WScript |
Table 1. The PeckBirdy server APIs to obtain landing scripts
Depending on the ATTACK_ID value attached in the query, each generated PeckBirdy script contains an embedded configuration (with the ATTACK_ID being a predefined value composed of a random string with 32 characters). The configured values are used for controlling the behavior of PeckBirdy during execution, which includes the following items.
| Configuration | Description |
|---|---|
| $HOST | The PeckBirdy server domain |
| $PORT | The port numbers connected by supported protocols |
| $ATTACK_ID | A 32-character random string produced by the framework |
| $RETRY | The waiting time between retries |
| $RETRY_TIME | The number of retry attempts |
| $HEARTBEAT | The waiting time between heartbeats |
Table 2. The configuration embedded in the PeckBirdy script

To extend PeckBirdy’s capability, its developer implemented it using an old script language known as JScript (followed by ECMAScript 3), and designed it to support multiple communication protocols to ensure compatibility in various environments. The built-in functions defined in ECMAScript 5, such as JSON, are also used when a newer environment is detected. Otherwise, PeckBirdy uses another version of functions implemented by the framework itself with JScript.
Upon initial execution, PeckBirdy searches for unique objects that exist only in specific environments to determine the current execution context. It checks for the window object in browser environments, the process object in NodeJS environment, the response object in ASP environment, and the presence of the APPLICATION tag within the HTML in HTA environments.

After determining the current environment, PeckBirdy generates a victim ID using different approaches based on the environment. In a local host environment such as HTA, it attempts to retrieve hardware information from the motherboard and hard drive on the victim’s machines. It then combines this information with MD5 to generate a hash value which serves as the victim ID. If this step fails or if it occurs in other environments that are unable to retrieve hardware information, it directly generates a 32-character random string as a victim ID instead.
To preserve the victim ID in browser environments, PeckBirdy adds a prefix Hm_lvt_ (a known cookie prefix used by a legitimate service) to the victim ID string and writes it into a browser cookie. In other cases, it writes the victim ID string to a file called ___unique_id___, which is placed in the temporary folder of Windows. This allows PeckBirdy to retrieve the victim ID on subsequent executions.

After initialization, PeckBirdy detects the communication methods supported in the environment. The default method uses the WebSocket protocol to communicate with the PeckBirdy server. If WebSocket is not supported, it attempts to detect the presence of Adobe Flash, after which it will create a Flash ActiveX object to establish TCP socket communication (for compatibility in older environments, despite Flash itself being discontinued in 2020). If neither of these methods are supported, PeckBirdy can use the Comet and LocalComet methods, which are based on HTTP(S) and AJAX protocols. While Comet has lower efficiency, it offers broad compatibility across environments.

Using WebSocket in a browser as an example, PeckBirdy initially sends an init request to the remote server to initiate communication. This request includes the current website’s domain and URL, as well as the previously mentioned victim ID, the ATTACK ID, along with a newly generated session ID value (also a 32-character random string).
The server responds with the second-stage script of PeckBirdy, which includes the script execution procedures and AES encryption and decryption routines. The subsequent communication is encrypted using AES and then encoded with Base64, with the AES encryption key being the ATTACK ID value from the configuration.
Unfortunately, we could not collect many of the scripts delivered directly from PeckBirdy’s communications with its server. The only one we received was a short script for stealing the cookie values of injected websites on browsers.



We also discovered additional script files hosted on one of PeckBirdy’s server (belonging to SHADOW-VOID-044) which appear to be delivered and executed through PeckBirdy. These provided insight into how the threat actors use PeckBirdy to carry out their attacks.
The scripts we found included:
- The exploitation script for the CVE-2020-16040 vulnerability affecting Google Chrome
- Scripts for social engineering pop-ups designed to deceive victims into downloading and executing malicious files.
- Scripts for delivering additional backdoors that are executed via Electron JS
- Scripts to establish reverse shells via TCP sockets
Backdoor analysis
Based on the infrastructure owned by the threat actors, we identified two distinct modular backdoors, HOLODONUT and MKDOOR, linked to SHADOW-VOID-044.
HOLODONUT
HOLODONUT is a .NET-based modular backdoor we found within the threat actor’s infrastructure. To execute HOLODONUT, the threat actors deployed a customized simple downloader used to retrieve the payload from the remote server downloader that we tracked as NEXLOAD. The noteworthy feature of NEXLOAD is that it will send a string in a specific format, “{string}#{string}” during the first connection. Next, the retrieved payload is decrypted via the XOR algorithm and executed by using the callback function, ”EnumWindows()”.
For defense evasion, the payload uses multiple techniques, including disabling AMSI and EtwEvent, as well as the use of Donut, an open-source tool used to stealthily execute .NET assemblies. As a result, HOLODONUT can be executed in process memory with less visibility.

Based on the code, we can summarize the supported packet types and built-in commands as follows:
The first packet type is related to the plugin handler, which is used to receive, execute, or unload plugins from C&C servers. In addition to plugin-related packets, the program provides built-in commands for information collection, sleep, and exit.
| Packet type | Plugin objects (assembly name, assembly bytes, Methodinfo, type, ClientID) |
|---|---|
| “plugin” | Add and load the received plugin (.NET assembly) |
| “execplugin” | Execute the received plugin (.NET assembly) |
| “Unloadplugin” | Remove the received plugin (.NET assembly) based on the specific “ClientID” and “Assembly name” |
| “UnloadClientIDplugin” | Remove the installed plugin based on the “ClientID” |
Table 3. Supported HOLODONUT packet types
MKDOOR
During our long-term monitoring of SHADOW-VOID-044, we found a phishing webpage used to lure users into download a fake Google Chrome updater. After downloading and analyzing the file, we identified another modularly-designed backdoor, MKDOOR, which is composed of two different modules: the downloader and the backdoor. During the first initiation, the downloader will connect to the C&C server and download the backdoor module. For defense evasion, it will try to bypass Microsoft Defender by adding itself to the exclusion list and make its contacted URL appear like a Microsoft support page.
https://{C&C address}/en-us/howtotell/default[.]aspxAfter the backdoor module is initiated, it will retrieve the network configuration embedded in the downloader module and launch another connection to the C&C server. The URL path used by the backdoor module is similarly disguised as being related to Windows activation.
https://{C&C address}/en-us/windows/activate-windows-c39005d4-95ee-b91e-b399-2820fda32227As a modular backdoor, the capabilities of MKDOOR depend on the modules received from the C&C server. Unfortunately, we were unable to collect the module from the server during our investigation. Hence, we can only provide the malware’s supported commands, which are shown in the following table:
| Commands | Description |
|---|---|
| INSTALL | Install the received module |
| UNINSTALL | Uninstall the received module |
| EXECUTE | Execute the received module |
| SHOW | Status feedback |
| SLEEP | Sleep (Sleeping time depends on the time received from the attacker) |
| EXIT | Exit |
| UNDATE | No function defined (in this case) |
Table 4. The supported commands of MKDOOR


Campaign attribution
We discovered two threat campaigns that used PeckBirdy in their operations. Based on victimology and the tools, tactics, and procedures (TTPs) used in the respective campaigns, we attributed them under two temporary intrusion sets: SHADOW-VOID-044 and SHADOW-EARTH-045. Our investigation revealed that these two campaigns could be linked to different China-aligned APT actors.
In the case of SHADOW-VOID-044, we noticed the GRAYRABBIT backdoor (previously reported to be utilized by UNC3569) was hosted on a server (47[.]238[.]219[.]111) operated by this campaign. The GRAYRABBIT sample we observed was slightly different, using a DLL sideloading technique combined with the UuidFromStringA function of PowerShell to read, decode, and execute the backdoor payload. Despite the different execution methods, the C&C server center[.]myrnicrosoft[.]com was the same as the C&C domain used by UNC3569. In addition, both SHADOW-VOID-044 and UNC3569 targeted the Chinese gambling industry. These findings give us a moderate to high level of confidence to attribute this campaign to UNC3569.
We also discovered that SHADOW-VOID-044 used the HOLODONUT backdoor, which is likely linked to another backdoor, WizardNet, previously reported being used by an APT group called TheWizard. Interestingly, some of the HOLODONUT samples used by SHADOW-VOID-044 connected to the same C&C server (mkdmcdn[.]com), which is the same used by TheWizard. While we didn’t see any additional connections between Campaign Alpha and TheWizard, it’s worth noting that TheWizard also used the DarkNimbus backdoor which was developed by the Earth Minotaur threat actor we discussed in a previous blog entry.
Another discovery during our research was a Cobalt Strike sample (SHA256: 162cc325ab7b6e70edb6f4d0bc0e52130c56903f) hosted on the SHADOW-VOID-044 server oss-cdn[.]com. We discovered that this sample was signed using a certificate (thumbprint, SHA1: bbd2b9b87f968ed88210d4261a1fe30711e8365b) stolen from a South Korean gaming company. This certificate was also used in the BIOPASS RAT campaign that we also reported on.
Based on our findings, both BIOPASS RAT and MKDOOR employ the same technique: opening an HTTP server on a high-numbered port on the local host to listen. This is to allow a watering hole attack script to scan for the presence of the port on the local host and determine whether the victim has been infected with the backdoor. The BIOPASS RAT campaign is linked to another threat actor, Earth Lusca.
For SHADOW-EARTH-045, we observed malicious activities targeting a Philippine educational institution in July 2024. The threat actor executed an MSHTA command connecting to github[.]githubassets[.]net to launch PeckBirdy on a compromised Internet Information Services (IIS) server. The threat actor also simultaneously downloaded files from 47[.]238[.]184[.]9, an IP address has been previously linked to Earth Baxia. Note that the attribution linking SHADOW-EARTH-045 to Earth Baxia remains low confidence for now. However, it’s worth noting that the same PeckBirdy domain and the IP address used was also mentioned in another report on attacks against an African government IT organization.
Conclusion
This report outlines two campaigns that highlight the growing sophistication and adaptability of current China-align threat actors. These campaigns make use of a dynamic JavaScript framework, PickBirdy, to abuse living-off-the-land binaries and deliver modular backdoors such as MKDOOR and HOLODONUT. Detecting malicious JavaScript frameworks remains a significant challenge due to their use of dynamically generated, runtime-injected code and the absence of persistent file artifacts, enabling them to evade traditional endpoint security controls. In this environment, adaptability and continuous refinement of defensive strategies are no longer optional, but fundamental to maintaining operational integrity in an increasingly hostile digital landscape.
Proactive security with TrendAI Vision One™
TrendAI Vision One™ is the industry-leading AI cybersecurity platform that centralizes cyber risk exposure management, security operations, and robust layered protection.
TrendAI Vision One™ Threat Intelligence Hub
TrendAI Vision One™ Threat Intelligence Hub provides the latest insights on emerging threats and threat actors, exclusive strategic reports from TrendAI™ Research, and TrendAI Vision One™ Threat Intelligence Feed in the TrendAI Vision One™ platform.
Emerging Threats:
PeckBirdy: A Versatile Script Framework for LOLBins Exploitation Used by China-aligned Threat Groups
TrendAI Vision One™ Intelligence Reports (IOC Sweeping)
PeckBirdy: A Versatile Script Framework for LOLBins Exploitation Used by China-aligned Threat Groups
Threat actor profiles:
Hunting Queries
malName: (*MKDOOR* OR *HOLODONUT* OR *GRAYRABBIT* OR *PECKBIRDY*) AND eventName: MALWARE_DETECTION
TrendAI Vision One™ Search App
TrendAI Vision One™ customers can use the Search App to match or hunt the malicious indicators mentioned in this blog post with data in their environment.
More hunting queries are available for TrendAI Vision One™ with Threat Intelligence Hub entitlement enabled.
Indicators of Compromise (IoCs)
The indicators of compromise for this entry can be found here.