Cloud Security

OceanLotus Uses PyPI for ZiChatBot Malware Delivery

Another day, another supply chain disaster. This time, OceanLotus is the villain, using Python's Package Index to sneak a new malware, ZiChatBot, onto unsuspecting systems.

Diagram showing the nested dependency structure of malicious PyPI packages leading to malware.

Key Takeaways

  • OceanLotus used PyPI to distribute a new malware family called ZiChatBot.
  • The malware was delivered via seemingly legitimate Python packages like `uuid32-utils` and `colorinal`.
  • ZiChatBot uses the public team chat app Zulip's REST APIs as its command and control infrastructure, making it hard to detect.

And just like that, the digital playground gets a fresh coat of malware. This time, it’s OceanLotus, a group that apparently enjoys their morning coffee with a side of supply chain chaos, and they’ve picked PyPI as their delivery truck. July 2025 was the apparent launch date for a series of malicious wheel packages, stealthily uploaded to the Python Package Index. Good on the security community for spotting it and getting the junk scrubbed, but the damage, as always, is done before the cavalry arrives.

These aren’t just some random bits of digital graffiti. The attackers, with a flair for the dramatic and a disdain for honest work, crafted these packages to look like legitimate tools. We’re talking libraries for generating UUIDs and messing with terminal colors – the kind of stuff developers grab without a second thought. And that, my friends, is the insidious beauty of a well-executed supply chain attack. They don’t just break in; they get you to invite them.

The Deceptive Duo

Here’s how the sausage is made, apparently. You’ve got your innocent-looking package, say termncolor, which, on the surface, is all about pretty text in your terminal. But under the hood? It’s listed as a dependency for a more overtly malicious package like colorinal. This nested dependency trick is old hat, really, but effective. It’s like hiding a bomb in a bouquet of flowers – pretty, until it detonates.

The malicious packages? uuid32-utils, colorinal, and termncolor. The key metadata screams ‘legit,’ but the underlying purpose is pure malware delivery. They offer builds for both Windows and Linux, showing a disturbing level of cross-platform ambition. These aren’t amateur hour hacks.

The key metadata for these packages are as follows:

Pip install command File name First upload date Author / Email
pip install uuid32-utils uuid32_utils-1.x.x-py3-none-[OS platform].whl 2025-07-16 laz* / laz*@tutamail.com
pip install colorinal colorinal-0.1.7-py3-none-[OS platform].whl 2025-07-22 sym* / sym*@proton.me
pip install termncolor termncolor-3.1.0-py3-none-any.whl 2025-07-22 sym* / sym*@proton.me

The wheel packages themselves are the delivery mechanism, extracting a .dll for Windows or .so for Linux. These are the droppers, the initial foot soldiers that then bring in the main event: ZiChatBot.

ZiChatBot: The Chatty Intruder

Now, ZiChatBot itself is where things get interesting, or perhaps more accurately, alarming. Forget your classic command-and-control servers. This malware is all about social media. Specifically, it uses REST APIs from the team chat app Zulip. Yes, you read that right. It’s communicating over a public platform, disguised as regular chat traffic. It’s the digital equivalent of sending secret messages via postcard.

This C2 method isn’t just novel; it’s clever. It blends in. Who’s going to flag a bunch of API calls to a team chat service? Most security tools are looking for rogue IPs and unusual ports, not perfectly legitimate-looking JSON payloads being sent to a public service.

The Art of Obscurity

The attackers didn’t just slap malware into a package and call it a day. They employed a multi-layered deception. The uuid32-utils and colorinal libraries are the workhorses of infection, while termncolor acts as a seemingly innocent chaperone, pulling colorinal in as a dependency. This ensures that even a cursory glance at termncolor wouldn’t raise immediate red flags.

On the Windows side, after installation, the terminate.dll dropper is extracted. When the colorinal library is imported, a Python script (__init__.py) calls another script (unicode.py). This unicode.py then loads the terminate.dll, invokes a function named envir with a cryptic parameter, and POOF – the dropper delivers ZiChatBot and then self-deletes. The unicode.py script also gets scrubbed. They leave no trace, or so they think.

This whole operation is a textbook example of a meticulously planned PyPI supply chain attack. It’s not about brute force; it’s about precision, deception, and exploiting trust.

A Blast from the Past?**

What’s particularly chilling here is the echo of past campaigns. Remember the early days of APTs using obscure networks or, dare I say, mailing lists for C2? This is the modern, supercharged version. OceanLotus, known for its sophisticated nation-state-backed operations, is clearly not shy about adopting new tricks. Using a public chat platform for C2 isn’t just a technical choice; it’s a strategic one, aimed at making detection harder for defenders who are already drowning in alerts.

This isn’t just about Python packages. It’s about the increasing reliance on open-source ecosystems and the inherent trust we place in them. When that trust is broken, the fallout can be immense. We’re not just talking about a few stolen credentials; we’re talking about potential access to entire corporate networks, all initiated by a simple pip install.

Is this the Future of Malware Delivery?**

It’s certainly a very effective present strategy. The blend of social engineering (making packages look legit) and technical sophistication (cross-platform droppers, unconventional C2) is a potent cocktail. The reliance on Zulip’s APIs is a particularly nasty touch. It’s stealthy, it’s cheap, and it use existing infrastructure. Expect to see more of this. Attackers are always looking for ways to hide in plain sight, and what’s more “plain sight” than a popular team chat application?

What Does This Mean for Developers?**

Developers need to be more vigilant than ever. That includes scrutinizing dependencies, even for seemingly reputable libraries. Implement better dependency scanning, use lock files religiously, and consider a strict allowlist of trusted package sources if your security posture demands it. This isn’t just about downloading code; it’s about trusting the source. And as this incident shows, trust can be a fatal flaw.

**


🧬 Related Insights

Frequently Asked Questions**

What is OceanLotus? OceanLotus, also known as APT32 or SeaLotus, is a suspected nation-state hacking group, primarily associated with Vietnam, known for sophisticated espionage campaigns against governments and corporations.

What is PyPI? PyPI stands for the Python Package Index. It’s the official third-party software repository for Python, hosting a vast collection of libraries and frameworks that developers use in their projects.

Will ZiChatBot affect my projects? If you installed any of the affected packages (uuid32-utils, colorinal, or termncolor) recently, your projects could be compromised. It’s recommended to uninstall them and scan your systems for suspicious activity.

Wei Chen
Written by

Technical security analyst. Specialises in malware reverse engineering, APT campaigns, and incident response.

Frequently asked questions

What is OceanLotus?
OceanLotus, also known as APT32 or SeaLotus, is a suspected nation-state hacking group, primarily associated with Vietnam, known for sophisticated espionage campaigns against governments and corporations.
What is PyPI?
PyPI stands for the Python Package Index. It's the official third-party software repository for Python, hosting a vast collection of libraries and frameworks that developers use in their projects.
Will ZiChatBot affect my projects?
If you installed any of the affected packages (`uuid32-utils`, `colorinal`, or `termncolor`) recently, your projects *could* be compromised. It's recommended to uninstall them and scan your systems for suspicious activity.

Worth sharing?

Get the best Cybersecurity stories of the week in your inbox — no noise, no spam.

Originally reported by Securelist (Kaspersky)

Stay in the loop

The week's most important stories from Threat Digest, delivered once a week.