{"id":51695,"date":"2026-05-06T09:46:17","date_gmt":"2026-05-06T09:46:17","guid":{"rendered":"https:\/\/zero.redgem.net\/?p=51695"},"modified":"2026-05-06T09:46:17","modified_gmt":"2026-05-06T09:46:17","slug":"oceanlotus-suspected-of-using-pypi-to-deliver-zichatbot-malware","status":"publish","type":"post","link":"https:\/\/zero.redgem.net\/?p=51695","title":{"rendered":"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C"},"content":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-05-06T14:05:12&#8243;,&#8221;description&#8221;:&#8221;![](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/04194912\/SL-OceanLotus-featured-990&#215;400.jpg)\\n\\n## Introduction\\n\\nThrough our daily threat hunting, we noticed that, beginning in July 2025, a series of malicious wheel packages were uploaded to PyPI (the Python Package Index). We shared this information with the public security community, and the malware was removed from the repository. We submitted the samples to Kaspersky Threat Attribution Engine (KTAE) for analysis. Based on the results, we believe the packages may be linked to malware discussed in a Threat Intelligence report on OceanLotus. \\n\\nWhile these wheel packages do implement the features described on their PyPI web pages, their true purpose is to covertly deliver malicious files. These files can be either .DLL or .SO (Linux shared library), indicating the packages&#8217; ability to target both Windows and Linux platforms. They function as droppers, delivering the final payload \u2013 a previously unknown malware family that we have named `ZiChatBot`. Unlike traditional malware, 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.\\n\\nTo conceal the malicious package containing ZiChatBot, the attacker created another benign-looking package that included the malicious package as a dependency. Based on these facts, we confirm that this campaign is a carefully planned and executed PyPI supply chain attack.\\n\\n## Technical details\\n\\n### Spreading\\n\\nThe attacker created three projects on PyPI and uploaded malicious wheel packages designed to imitate popular libraries, tricking users into downloading them. This is a clear example of a supply chain attack via PyPI. See below for detailed information about the fake libraries and their corresponding wheel packages.\\n\\n#### Malicious wheel packages\\n\\nThe packages added by the attacker and listed on PyPI&#8217;s download pages are:\\n\\n  * `uuid32-utils` library for generating a 32-character random string as a UUID\\n  * `colorinal` library for implementing cross-platform color terminal text\\n  * `termncolor` library for ANSI color format for terminal output\\n\\n\\n\\nThe key metadata for these packages are as follows:\\n\\n**Pip install command** | **File name** | **First upload date** | **Author \/ Email**  \\n&#8212;|&#8212;|&#8212;|&#8212;  \\npip install uuid32-utils | uuid32_utils-1.x.x-py3-none-[OS platform].whl | 2025-07-16 | laz**** \/ laz****@tutamail.com  \\npip install colorinal | colorinal-0.1.7-py3-none-[OS platform].whl | 2025-07-22 | sym**** \/ sym****@proton.me  \\npip install termncolor | termncolor-3.1.0-py3-none-any.whl | 2025-07-22 | sym**** \/ sym****@proton.me  \\n  \\nBased on the distribution information on the PyPI web page, we can see that it offers X86 and X64 versions for Windows, as well as an x86_64 version for Linux. The `colorinal` project, for example, provides the following download options:\\n\\n![Distribution information of the colorinal project](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/29095724\/oceanlotus1.png)\\n\\nDistribution information of the colorinal project\\n\\n#### Initial infection\\n\\nThe `uuid32-utils` and `colorinal` libraries employ similar infection chains and malicious payloads. As a result, this analysis will focus on the `colorinal` library as a representative example.\\n\\nA quick look at the code of the third library, `termncolor`, reveals no apparent malicious content. However, it imports the malicious `colorinal` library as a dependency. This method allows attackers to deeply conceal malware, making the `termncolor` library appear harmless when distributing it or luring targets.\\n\\n![The termncolor library imports the malicious colorinal library](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/29100022\/oceanlotus2.png)\\n\\nThe termncolor library imports the malicious colorinal library\\n\\nDuring the initial infection stage, the Python code is nearly identical across both Windows and Linux platforms. Here, we analyze the Windows version as an example.\\n\\n#### Windows version\\n\\nOnce 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, the ZiChatBot&#8217;s dropper (a file named `terminate.dll`) will be extracted from the wheel package and placed on the victim&#8217;s hard drive.\\n\\nAfter that, if the `colorinal` library is imported into the victim&#8217;s project, the Python script file at [Python library installation path]\\\\colorinal-0.1.7-py3-none-win_amd64\\\\colorinal\\\\\\\\__init__.py will be executed first.\\n\\n![The __init__.py script imports the malicious file unicode.py](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/29100308\/oceanlotus3.png)\\n\\nThe __init__.py script imports the malicious file unicode.py\\n\\nThis Python script imports and executes another script located at [python library install path]\\\\colorinal-0.1.7-py3-none-win_amd64\\\\colorinal\\\\unicode.py. The `is_color_supported()` function in `unicode.py` is called immediately.\\n\\n![The code loads the dropper into the host Python process](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/29100524\/oceanlotus4.png)\\n\\nThe code loads the dropper into the host Python process\\n\\nThe comment in the `is_color_supported()` function states that the highlighted code checks whether the user&#8217;s terminal environment supports color. The code actually loads the `terminate.dll` file into the Python process and then invokes the DLL&#8217;s exported function `envir`, passing the UTF-8-encoded string `xterminalunicod` as a parameter. The DLL acts as a dropper, delivering the final payload, `ZiChatBot`, and then self-deleting. At the end of the `is_color_supported()` function, the `unicode.py` script file is also removed. These steps eliminate all malicious files in the library and deploy `ZiChatBot`.  \\nFor the Linux platform, the wheel package and the `unicode.py` Python script are nearly identical to the Windows version. The only difference is that the dropper file is named \\&#8221;terminate.so\\&#8221;.\\n\\n### Dropper for ZiChatBot\\n\\nFrom the previous analysis, we learned that the dropper is loaded into the host Python process by a Python script and then activated. The main logic of the dropper is implemented in the `envir` export function to achieve three objectives:\\n\\n  1. Deploy `ZiChatBot`.\\n  2. Establish an auto-run mechanism.\\n  3. Execute shellcode to remove the dropper file (terminate.dll) and the malicious script file from the installed library folder.\\n\\n\\n\\nThe dropper first decrypts sensitive strings using AES in CBC mode. The key is the string-type parameter \\&#8221;xterminalunicode\\&#8221; of the exported function. The decrypted strings are \\&#8221;libcef.dll\\&#8221;, \\&#8221;vcpacket\\&#8221;, \\&#8221;pkt-update\\&#8221;, and \\&#8221;vcpktsvr.exe\\&#8221;.\\n\\nNext, the malware uses the same algorithm to decrypt the embedded data related to `ZiChatBot`. It then decompresses the decrypted data with LZMA to retrieve the files `vcpktsvr.exe` and `libcef.dll` associated with `ZiChatBot`. The malware creates a folder named vcpacket in the system directory `%LOCALAPPDATA%`, and places these files into it.\\n\\nTo establish persistence for ZiChatBot, the dropper creates the following auto-run entry in the registry:\\n    \\n    \\n    [HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run]\\n    \\&#8221;pkt-update\\&#8221;=\\&#8221;C:\\\\Users\\\\[User name]\\\\AppData\\\\Local\\\\vcpacket\\\\vcpktsvr.exe\\&#8221;\\n\\nOnce preparations are complete, the malware uses the XOR algorithm to decrypt the embedded shellcode with the three-byte key `3a7`. It then searches the decrypted shellcode&#8217;s memory for the string `Policy.dllcppage.dll` and replaces it with its own file name, `terminate.dll`, and redirects execution to the shellcode&#8217;s memory space.\\n\\nThe shellcode employs a djb2-like hash method to calculate the names of certain APIs and locate their addresses. Using these APIs, it finds the dropper file with the name `terminate.dll` that was previously passed by the DLL before unloading and deleting it.\\n\\n#### Linux version\\n\\nThe Linux version of the dropper places `ZiChatBot` in the path `\/tmp\/obsHub\/obs-check-update` and then creates an auto-run job using `crontab`. Unlike the Windows version, the Linux version of `ZiChatBot` only consists of one ELF executable file.\\n    \\n    \\n    system(\\&#8221;chmod +x \/tmp\/obsHub\/obs-check-update\\&#8221;) \\n    system(\\&#8221;echo \\\\\\&#8221;5 * * * * \/tmp\/obsHub\/obs-check-update\\&#8221; | crontab &#8211; \\&#8221;)\\n\\n### ZiChatBot\\n\\nThe Windows version of ZiChatBot is a DLL file (`libcef.dll`) that is loaded by the legitimate executable `vcpktsvr.exe` (hash: 48be833b0b0ca1ad3cf99c66dc89c3f4). The DLL contains several export functions, with the malicious code implemented in the `cef_api_mash export`. Once the DLL is loaded, this function is invoked by the EXE file. ZiChatBot uses the REST APIs from Zulip, a public team chat application, as its command and control server.\\n\\nZiChatBot is capable of executing shellcode received from the server and only supports this one control command. Once it runs, it initiates a series of sequential HTTP requests to the Zulip REST API.\\n\\nIn each HTTP request, an API authentication token is included as an HTTP header for server-side authentication, as shown below.\\n    \\n    \\n    \/\/ Auth token:\\n    TW9yaWFuLWJvdEBoZWxwZXIuenVsaXBjaGF0LmNvbTpVOFJFWGxJNktmOHFYQjlyUXpPUEJpSUE0YnJKNThxRw==\\n    \\n    \/\/ Decoded Auth token\\n    Morian-bot@helper.zulipchat.com:U8REXlI6Kf8qXB9rQzOPBiIA4brJ58qG\\n\\nZiChatBot utilizes two separate channel-topic pairs for its operations. One pair transmits current system information, and the other retrieves a message containing shellcode. Once the shellcode is received, a new thread is created to execute it. After executing the command, a `heart` emoji is sent in response to the original message to indicate the execution was successful.\\n\\n## Infrastructure\\n\\nWe did not find any traditional infrastructure, such as compromised servers or commercial VPS services and their associated IPs and domains. Instead, the malicious wheel packages were uploaded to the Python Package Index (PyPI), a public, shared Python library. The malware, ZiChatBot, leverages Zulip&#8217;s public team chat REST APIs as its command and control server.\\n\\nThe \\&#8221;helper\\&#8221; organization that the attacker had registered on the Zulip service has now been officially deactivated by Zulip. However, infected devices may still attempt to connect to the service, so to help you locate and cure them, we recommend adding the full URL `helper.zulipchat.com` to your denylist.\\n\\n## Victims\\n\\nThe malware was uploaded in July 2025. Upon discovering these attacks, we quickly released an update for our product to detect the relevant files and shared the necessary information with the public security community. As a result, the malicious software was swiftly removed from PyPI, and the organization registered on the Zulip service was officially deactivated. To date, we have not observed any infections based on our telemetry or public reports.\\n\\n![](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/29102447\/oceanlotus5.png)\\n\\nZulip has officially deactivated the \\&#8221;helper\\&#8221; organization\\n\\n## Attribution\\n\\nBased on the results from our KTAE system, the dropper used by ZiChatBot shows a 64% similarity to another dropper we analyzed in a TI report, which was linked to OceanLotus. Reverse engineering shows that both droppers use nearly identical algorithms and logic for to decrypt and decompress their embedded payloads.\\n\\n![Analysis results of dropper using KTAE system](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/29102537\/oceanlotus6.png)\\n\\nAnalysis results of dropper using KTAE system\\n\\n## Conclusions\\n\\nAs an active APT organization, OceanLotus primarily targets victims in the Asia-Pacific region. However, our previous reports have highlighted a growing trend of the group expanding its activities into the Middle East. Moreover, the attacks described in this report \u2013 executed through PyPI \u2013 target Python users worldwide. This demonstrates OceanLotus&#8217;s ongoing effort to broaden its attack scope.\\n\\nIn the first half of 2025, a public report revealed that the group launched a phishing campaign using GitHub. The recent PyPI-based supply chain attack likely continues this strategy. Although phishing emails are still a common initial infection method for OceanLotus, the group is also actively exploring new ways to compromise victims through diverse supply chain attacks.\\n\\n## Indicators of compromise\\n\\nAdditional information about this activity, including indicators of compromise, is available to customers of the Kaspersky Intelligence Reporting Service. If you are interested, please contact intelreports@kaspersky.com.\\n\\n**Malicious wheel packages**  \\n_termncolor-3.1.0-py3-none-any.whl_  \\n5152410aeef667ffaf42d40746af4d84\\n\\n_uuid32_utils-1.x.x-py3-none-xxxx.whl_  \\n0a5a06fa2e74a57fd5ed8e85f04a483a  \\ne4a0ad38fd18a0e11199d1c52751908b  \\n5598baa59c716590d8841c6312d8349e  \\n968782b4feb4236858e3253f77ecf4b0  \\nb55b6e364be44f27e3fecdce5ad69eca  \\n02f4701559fc40067e69bb426776a54f  \\ne200f2f6a2120286f9056743bc94a49d  \\n22538214a3c917ff3b13a9e2035ca521\\n\\n_colorinal-0.1.7-py3-none-xxxx.whl_  \\nba2f1868f2af9e191ebf47a5fab5cbab\\n\\n**Dropper for ZiChatBot**  \\n_Backward.dll_  \\nc33782c94c29dd268a42cbe03542bca5  \\n454b85dc32dc8023cd2be04e4501f16a\\n\\n_Backward.so_  \\nfce65c540d8186d9506e2f84c38a57c4  \\n652f4da6c467838957de19eed40d39da\\n\\n_terminate.dll_  \\n1995682d600e329b7833003a01609252\\n\\n_terminate.so_  \\n38b75af6cbdb60127decd59140d10640\\n\\n**ZiChatBot**  \\n_libcef.dll_  \\na26019b68ef060e593b8651262cbd0f6&#8243;,&#8221;published&#8221;:&#8221;2026-05-06T13:00:34&#8243;,&#8221;modified&#8221;:&#8221;2026-05-06T13:00:34&#8243;,&#8221;type&#8221;:&#8221;securelist&#8221;,&#8221;title&#8221;:&#8221;OceanLotus suspected of using PyPI to deliver ZiChatBot malware&#8221;,&#8221;source&#8221;:&#8221;&#8221;,&#8221;references&#8221;:&#8221;&#8221;,&#8221;id&#8221;:&#8221;SECURELIST:C46AAD6E697BEE12D62F89019CEB288C&#8221;,&#8221;bulletinFamily&#8221;:&#8221;blog&#8221;,&#8221;cwe&#8221;:null,&#8221;cvelist&#8221;:[],&#8221;sourceData&#8221;:&#8221;&#8221;,&#8221;sourceHref&#8221;:&#8221;&#8221;,&#8221;cvss&#8221;:{&#8220;score&#8221;:0,&#8221;severity&#8221;:&#8221;NONE&#8221;,&#8221;vector&#8221;:&#8221;NONE&#8221;,&#8221;version&#8221;:&#8221;NONE&#8221;},&#8221;cvss2&#8243;:{},&#8221;cvss3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;,&#8221;cvssV3&#8243;:{&#8220;version&#8221;:&#8221;&#8221;,&#8221;vectorString&#8221;:&#8221;&#8221;,&#8221;baseScore&#8221;:0,&#8221;baseSeverity&#8221;:&#8221;&#8221;,&#8221;attackVector&#8221;:&#8221;&#8221;,&#8221;attackComplexity&#8221;:&#8221;&#8221;,&#8221;privilegesRequired&#8221;:&#8221;&#8221;,&#8221;userInteraction&#8221;:&#8221;&#8221;,&#8221;scope&#8221;:&#8221;&#8221;,&#8221;confidentialityImpact&#8221;:&#8221;&#8221;,&#8221;integrityImpact&#8221;:&#8221;&#8221;,&#8221;availabilityImpact&#8221;:&#8221;&#8221;}},&#8221;href&#8221;:&#8221;https:\/\/securelist.com\/oceanlotus-suspected-pypi-zichatbot-campaign\/119603\/&#8221;,&#8221;category_name&#8221;:&#8221;News&#8221;,&#8221;post_link&#8221;:&#8221;&#8221;,&#8221;product&#8221;:&#8221;&#8221;,&#8221;version&#8221;:&#8221;&#8221;,&#8221;vendor&#8221;:&#8221;&#8221;,&#8221;ai_description&#8221;:&#8221;&#8221;,&#8221;ai_severity&#8221;:&#8221;&#8221;,&#8221;ai_vendor&#8221;:&#8221;&#8221;,&#8221;ai_product&#8221;:&#8221;&#8221;,&#8221;ai_version&#8221;:&#8221;&#8221;,&#8221;ai_score&#8221;:0}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>{&#8220;lastseen&#8221;:&#8221;2026-05-06T14:05:12&#8243;,&#8221;description&#8221;:&#8221;![](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/04194912\/SL-OceanLotus-featured-990&#215;400.jpg)\\n\\n## Introduction\\n\\nThrough our daily threat hunting, we noticed that, beginning in July 2025, a series of malicious wheel packages were uploaded to PyPI (the Python&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[6,8,12,13,33,136,7,11,5],"class_list":["post-51695","post","type-post","status-publish","format-standard","hentry","category-category_news","tag-cve","tag-cvss","tag-exploit","tag-news","tag-none","tag-securelist","tag-security","tag-tapic","tag-vulnerability"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C - zero redgem<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/zero.redgem.net\/?p=51695\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C - zero redgem\" \/>\n<meta property=\"og:description\" content=\"{&#8220;lastseen&#8221;:&#8221;2026-05-06T14:05:12&#8243;,&#8221;description&#8221;:&#8221;![](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/04194912\/SL-OceanLotus-featured-990&#215;400.jpg)nn## IntroductionnnThrough our daily threat hunting, we noticed that, beginning in July 2025, a series of malicious wheel packages were uploaded to PyPI (the Python...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/zero.redgem.net\/?p=51695\" \/>\n<meta property=\"og:site_name\" content=\"zero redgem\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-06T09:46:17+00:00\" \/>\n<meta name=\"author\" content=\"invoker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"invoker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=51695#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=51695\"},\"author\":{\"name\":\"invoker\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\"},\"headline\":\"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C\",\"datePublished\":\"2026-05-06T09:46:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=51695\"},\"wordCount\":2248,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"keywords\":[\"CVE\",\"CVSS\",\"exploit\",\"news\",\"NONE\",\"securelist\",\"Security\",\"tapic\",\"Vulnerability\"],\"articleSection\":[\"category_news\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=51695#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=51695\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?p=51695\",\"name\":\"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C - zero redgem\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\"},\"datePublished\":\"2026-05-06T09:46:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=51695#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/zero.redgem.net\\\/?p=51695\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/?p=51695#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/zero.redgem.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#website\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"name\":\"zero redgem\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/zero.redgem.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#organization\",\"name\":\"zero redgem\",\"url\":\"https:\\\/\\\/zero.redgem.net\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"\",\"contentUrl\":\"\",\"width\":191,\"height\":188,\"caption\":\"zero redgem\"},\"image\":{\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/zero.redgem.net\\\/#\\\/schema\\\/person\\\/fbfeae8dfad117ac08a7621bee1a1dca\",\"name\":\"invoker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g\",\"caption\":\"invoker\"},\"sameAs\":[\"https:\\\/\\\/zero.redgem.net\"],\"url\":\"https:\\\/\\\/zero.redgem.net\\\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C - zero redgem","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/zero.redgem.net\/?p=51695","og_locale":"en_US","og_type":"article","og_title":"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C - zero redgem","og_description":"{&#8220;lastseen&#8221;:&#8221;2026-05-06T14:05:12&#8243;,&#8221;description&#8221;:&#8221;![](https:\/\/media.kasperskycontenthub.com\/wp-content\/uploads\/sites\/43\/2026\/04\/04194912\/SL-OceanLotus-featured-990&#215;400.jpg)nn## IntroductionnnThrough our daily threat hunting, we noticed that, beginning in July 2025, a series of malicious wheel packages were uploaded to PyPI (the Python...","og_url":"https:\/\/zero.redgem.net\/?p=51695","og_site_name":"zero redgem","article_published_time":"2026-05-06T09:46:17+00:00","author":"invoker","twitter_card":"summary_large_image","twitter_misc":{"Written by":"invoker","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/zero.redgem.net\/?p=51695#article","isPartOf":{"@id":"https:\/\/zero.redgem.net\/?p=51695"},"author":{"name":"invoker","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca"},"headline":"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C","datePublished":"2026-05-06T09:46:17+00:00","mainEntityOfPage":{"@id":"https:\/\/zero.redgem.net\/?p=51695"},"wordCount":2248,"commentCount":0,"publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"keywords":["CVE","CVSS","exploit","news","NONE","securelist","Security","tapic","Vulnerability"],"articleSection":["category_news"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/zero.redgem.net\/?p=51695#respond"]}]},{"@type":"WebPage","@id":"https:\/\/zero.redgem.net\/?p=51695","url":"https:\/\/zero.redgem.net\/?p=51695","name":"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C - zero redgem","isPartOf":{"@id":"https:\/\/zero.redgem.net\/#website"},"datePublished":"2026-05-06T09:46:17+00:00","breadcrumb":{"@id":"https:\/\/zero.redgem.net\/?p=51695#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zero.redgem.net\/?p=51695"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/zero.redgem.net\/?p=51695#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zero.redgem.net\/"},{"@type":"ListItem","position":2,"name":"OceanLotus suspected of using PyPI to deliver ZiChatBot malware_SECURELIST:C46AAD6E697BEE12D62F89019CEB288C"}]},{"@type":"WebSite","@id":"https:\/\/zero.redgem.net\/#website","url":"https:\/\/zero.redgem.net\/","name":"zero redgem","description":"","publisher":{"@id":"https:\/\/zero.redgem.net\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zero.redgem.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/zero.redgem.net\/#organization","name":"zero redgem","url":"https:\/\/zero.redgem.net\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/","url":"","contentUrl":"","width":191,"height":188,"caption":"zero redgem"},"image":{"@id":"https:\/\/zero.redgem.net\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/zero.redgem.net\/#\/schema\/person\/fbfeae8dfad117ac08a7621bee1a1dca","name":"invoker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f17c01d7338e6932bcde121cf83569393df3374625d25afd62677cfb528f2e3e?s=96&d=mm&r=g","caption":"invoker"},"sameAs":["https:\/\/zero.redgem.net"],"url":"https:\/\/zero.redgem.net\/?author=1"}]}},"_links":{"self":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/51695","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=51695"}],"version-history":[{"count":0,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=\/wp\/v2\/posts\/51695\/revisions"}],"wp:attachment":[{"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=51695"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=51695"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zero.redgem.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=51695"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}