Skip to main content
Mallory
MalwareUsed by 1 actor

ZiChatBot

Share:
For your environment

Hunt this family in your stack

Mallory pivots from this family to the IOCs, detections, and named campaigns that touch your stack, and pages you when something new lands.

THREAT ACTORS

Groups observed using it

1 distinct threat actor attributed by public researchers. Open in Mallory to see the full evidence chain and overlapping campaigns.

View more details
APT32

OceanLotus suspected of using PyPI to deliver ZiChatBot malware

via securelistsecurelist.com
MITRE ATT&CK

Techniques & procedures

21 distinct techniques documented for this family, organized by ATT&CK tactic.

Initial Access

3 techniques
T1195Supply Chain CompromiseEvidence3

The threat was uncovered after a series of malicious Python packages were found on PyPI... The attacker uploaded packages designed to look like common development libraries, tricking Python developers into installing them.

T1195.001Compromise Software Dependencies and Development ToolsEvidence1

To conceal the malicious package containing ZiChatBot, the attacker created another benign-looking package that included the malicious package as a dependency... The termncolor library imports the malicious colorinal library as a dependency.

T1566.003Spearphishing via ServiceEvidence1

The termncolor package was especially deceptive since it contained no obviously malicious code on its own. Instead, it listed the malicious colorinal package as a dependency, so anyone who installed termncolor would unknowingly trigger the full infection chain.

Execution

7 techniques
T1053.003CronEvidence3

On Linux, the payload sits at /tmp/obsHub/obs-check-update and uses a crontab entry to keep access alive on the infected system.

T1059Command and Scripting InterpreterEvidence2

The other retrieves messages containing shellcode, which ZiChatBot executes in a new thread.

T1059.004Unix ShellEvidence1

system ( "chmod +x /tmp/obsHub/obs-check-update" ) system ( "echo \"5 * * * * /tmp/obsHub/obs-check-update\" | crontab - " )

T1059.006PythonEvidence2

In reality, each carried a dropper that silently extracted and installed ZiChatBot during the normal library import process. The code loads the dropper into the host Python process.

T1129Shared ModulesEvidence1

The code actually loads the terminate.dll file into the Python process and then invokes the DLL’s exported function envir... The Windows version of ZiChatBot is a DLL file (libcef.dll) that is loaded by the legitimate executable vcpktsvr.exe.

T1204User ExecutionEvidence1

Once a Python user downloads and installs the colorinal-0.1.7-py3-none-win_amd64.whl wheel package file, or installs it using the pip tool... if the colorinal library is imported into the victim’s project, the Python script file... will be executed first.

T1574.001DLLEvidence1

On Windows systems, once any of the first two packages is installed, the malicious code extracts a DLL dropper ("terminate.dll") and write it to disk. At the time the library is imported into a project, the DLL is loaded, acting as a dropper for ZiChatBot.

Persistence

2 techniques
T1053.003CronEvidence3

On Linux, the payload sits at /tmp/obsHub/obs-check-update and uses a crontab entry to keep access alive on the infected system.

T1547.001Registry Run Keys / Startup FolderEvidence3

The Windows version of ZiChatBot is a DLL file named libcef.dll... It establishes persistence by writing a registry auto-run entry, ensuring it restarts when the user logs in.

Privilege Escalation

2 techniques
T1053.003CronEvidence3

On Linux, the payload sits at /tmp/obsHub/obs-check-update and uses a crontab entry to keep access alive on the infected system.

T1547.001Registry Run Keys / Startup FolderEvidence3

The Windows version of ZiChatBot is a DLL file named libcef.dll... It establishes persistence by writing a registry auto-run entry, ensuring it restarts when the user logs in.

Stealth

4 techniques
T1027Obfuscated Files or InformationEvidence1

The dropper used AES encryption in CBC mode to hide sensitive strings and embedded payloads.

T1036MasqueradingEvidence2

The attacker uploaded packages designed to look like common development libraries... The packages, uuid32-utils, colorinal, and termncolor, appeared harmless based on their listed descriptions.

T1070.004File DeletionEvidence3

After deploying ZiChatBot, it used shellcode to self-delete, wiping traces of the initial infection.

T1574.001DLLEvidence1

On Windows systems, once any of the first two packages is installed, the malicious code extracts a DLL dropper ("terminate.dll") and write it to disk. At the time the library is imported into a project, the DLL is loaded, acting as a dropper for ZiChatBot.

Discovery

2 techniques
T1082System Information DiscoveryEvidence2

One pair sends basic system information about the infected machine back to the attacker.

T1083File and Directory DiscoveryEvidence1

The Linux version of the shared object dropper ("terminate.so") plants the malware in the "/tmp/obsHub/obs-check-update" path and configures a crontab entry.

Command and Control

5 techniques
T1071Application Layer ProtocolEvidence2

ZiChatBot takes an inventive but dangerous approach to command and control by routing all activity through Zulip’s public REST API. Rather than contacting a suspicious external server, the malware sends HTTP requests to a legitimate service.

T1071.001Web ProtocolsEvidence1

ZiChatBot uses the REST APIs from Zulip, a public team chat application, as its command and control server... it initiates a series of sequential HTTP requests to the Zulip REST API.

T1102Web ServiceEvidence1

A newly discovered malware called ZiChatBot has been found quietly using the REST APIs of a legitimate team chat application called Zulip to receive and carry out commands from its operators.

T1102.001Dead Drop ResolverEvidence1

ZiChatBot does not communicate with a dedicated command and control (C2) server, but instead uses a series of REST APIs from the public team chat app Zulip as its C2 infrastructure.

T1105Ingress Tool TransferEvidence2

Once installed, these packages silently dropped the ZiChatBot payload onto the victim’s system without raising obvious alerts.

INDICATORS OF COMPROMISE

IOCs tracked for this family

30 indicators attributed across vendor reports, sandbox runs, and researcher write-ups. Full values are available in Mallory.

View more in app
Network
1 tracked

IPs, domains, and DNS infrastructure linked to this family.

Hashes
28 tracked

File hashes (MD5, SHA-1, SHA-256) from samples and reports.

Other
1 tracked

Other indicator types observed in public reporting.

TypeValueLatest sighting
domain●●●●●●●●●●●●View more in app1 month ago
hash.md5●●●●●●●●●●●●View more in app1 month ago
hash.sha1●●●●●●●●●●●●View more in app1 month ago
hash.sha1●●●●●●●●●●●●View more in app1 month ago
hash.sha1●●●●●●●●●●●●View more in app1 month ago
hash.sha1●●●●●●●●●●●●View more in app1 month ago
What this page doesn’t show

The version that knows your environment.

This page is what’s public. Mallory adds the parts that aren’t: which of your assets match these IOCs, which detections are missing, which campaigns to expect next, and what to do in the next 30 minutes.
IOC matching30

Match every observed IP, domain, and hash against your live telemetry.

Threat actor attribution1

Named campaigns wielding this family, with evidence pinned to each claim.

Exploited vulnerabilities

CVEs this family uses for access and lateral movement.

Detection signatures

YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.

MITRE ATT&CK mapping21

Every documented technique, ranked by evidence weight.

Researcher chatter

Reddit, Mastodon, and CTI community discussion around this family.