{"id":"MAL-2025-191831","summary":"Malicious code in pyapiepo (PyPI)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: kam193 (69aee56f4c3bce704bc65574959aee0226417e4d6a6e05e662d6fa235c12815f)\nCampaign is split into multiple packages that altogether exfiltrates data from desktop Telegram application.\n\n1. \"pyapiepo\" is a cover package that provides some useless features BUT also imports \"zscaner\"\n2. \"zscaner\", when imported, automatically runs a function that is an entry point to the whole process; it uses the \"scan\" from \"reqinstall\" to walk through directories. The package also provides main logic: filtering files, triggering archiving directories and exfiltrating them. \n3. \"reqinstall\" ensures \"requests\" are installed and provides a directory tree scanning function.\n4. \"zmaker\" provides functions to build archives from collected files.\n5. \"zsender\" provides functions to exfiltrate data, the remote URL and a function to deobfuscate configuration in other packages.\n\nAltogether, they look for \"Telegram Desktop\" folder, archive user data stored there and exfiltrate to a remote location.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2025-04-zscaner\n\n\nReasons (based on the campaign):\n\n\n - target:telegram\n\n\n - exfiltration-generic\n\n\n - The malicious code is intentionally included in a dependency of the package\n","modified":"2025-12-12T20:41:51.625318Z","published":"2025-04-20T12:05:56Z","database_specific":{"malicious-packages-origins":[{"id":"pypi/2025-04-zscaner/pyapiepo","modified_time":"2025-04-20T12:05:56Z","import_time":"2025-12-02T22:30:55.453982471Z","source":"kam193","sha256":"b29c2c9b9ba064e002d8d77000ff7ea091ffdd8cb20355476ecf008fcab4766f","ranges":[{"events":[{"introduced":"0"}],"type":"ECOSYSTEM"}]},{"id":"pypi/2025-04-zscaner/pyapiepo","modified_time":"2025-04-20T12:05:56Z","import_time":"2025-12-02T23:07:18.477571542Z","source":"kam193","sha256":"69aee56f4c3bce704bc65574959aee0226417e4d6a6e05e662d6fa235c12815f","ranges":[{"events":[{"introduced":"0"}],"type":"ECOSYSTEM"}]},{"id":"pypi/2025-04-zscaner/pyapiepo","modified_time":"2025-04-20T12:05:56Z","import_time":"2025-12-10T21:38:57.693936936Z","versions":["1.1.3","1.1.4"],"source":"kam193","sha256":"f66b9fdcb71d13b13fcc00fd2b09163d7c92bb0067ca45bb2110e99d28a5b753"}],"iocs":{"ips":["77.91.76.45"],"urls":["http://77.91.76.45:100/OPEN"]}},"references":[{"type":"WEB","url":"https://bad-packages.kam193.eu/pypi/package/pyapiepo"}],"affected":[{"package":{"name":"pyapiepo","ecosystem":"PyPI","purl":"pkg:pypi/pyapiepo"},"versions":["1.1.3","1.1.4"],"database_specific":{"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/pyapiepo/MAL-2025-191831.json"}}],"schema_version":"1.7.3","credits":[{"name":"Kamil Mańkowski (kam193)","contact":["https://github.com/kam193","https://bad-packages.kam193.eu/"]},{"name":"Kamil Mańkowski (kam193)","contact":["https://github.com/kam193","https://bad-packages.kam193.eu/"],"type":"REPORTER"}]}