{"id":"MAL-2025-73","summary":"Malicious code in utf-cleaner (PyPI)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: kam193 (09b9e5c5deafbf756df5201976fdbdc3c61c10e815234df9aeb32764a3cd9652)\nDuring import, the package silently downloads and executes remote code. This code starts a web server in the separate process and listens for commands to execute from a C2 server, as well as periodically sends a beacon to C2 allowing discovery and finishing execution.\n\nThis package is closely related to Github repository https://github.com/xcummins/tg-outline-seller/ from the same author, where it's used as dependency effectively compromising its users.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-03-old-utf-cleaner\n\n\nReasons (based on the campaign):\n\n\n - Downloads and executes a remote malicious script.\n\n\n - The package contains code to execute remote commands (probably limited to a specific set) on the victim's machine.\n\n## Source: ossf-package-analysis (2f3468ce127ee2c3a221f8b2331c633be1c43772101c4baeca6ab4e47710b9ac)\nThe OpenSSF Package Analysis project identified 'utf-cleaner' @ 3.4.1 (pypi) as malicious.\n\nIt is considered malicious because:\n\n- The package executes one or more commands associated with malicious behavior.\n","modified":"2026-03-23T00:47:02.090742Z","published":"2025-01-10T13:26:27Z","database_specific":{"malicious-packages-origins":[{"modified_time":"2025-01-10T20:01:22Z","import_time":"2025-01-13T00:23:32.363393646Z","versions":["3.4.1"],"source":"ossf-package-analysis","sha256":"2f3468ce127ee2c3a221f8b2331c633be1c43772101c4baeca6ab4e47710b9ac"},{"modified_time":"2025-01-12T15:28:24Z","import_time":"2025-01-13T00:23:32.447413546Z","versions":["3.4.2"],"source":"ossf-package-analysis","sha256":"6ee317562a7c07ecbbc119802e7f69e0ae70d1876cb9c72a5c94b6316064ba2f"},{"modified_time":"2025-01-10T19:58:16Z","import_time":"2025-01-13T00:23:32.281150675Z","versions":["3.4.0"],"source":"ossf-package-analysis","sha256":"a0133dbcab387829b4229c7da1b6cb02390e11faf82ea682a1f1d0d649d2c2d6"},{"modified_time":"2025-01-10T13:26:27Z","import_time":"2025-01-13T00:23:32.194797159Z","versions":["3.3.7"],"source":"ossf-package-analysis","sha256":"c87e8af9d44b22afadb4888905252edf4ec91532c1ffcd7fce378268a99ae4bf"},{"id":"pypi/2026-03-old-utf-cleaner/utf-cleaner","modified_time":"2026-03-22T22:57:59.555318Z","import_time":"2026-03-22T23:10:44.29819505Z","versions":["3.3.7","3.3.8","3.3.9","3.4.0","3.4.1","3.4.2"],"source":"kam193","sha256":"8382837e2b4420621b1ac738092bf8d584dde848e0f8cd6bbf73b0fbc6f74fcb"},{"id":"pypi/2026-03-old-utf-cleaner/utf-cleaner","modified_time":"2026-03-22T22:57:59.555318Z","import_time":"2026-03-23T00:38:15.901304798Z","versions":["3.3.7","3.3.8","3.3.9","3.4.0","3.4.1","3.4.2"],"source":"kam193","sha256":"09b9e5c5deafbf756df5201976fdbdc3c61c10e815234df9aeb32764a3cd9652"}],"iocs":{"ips":["90.156.226.65"],"urls":["https://github.com/xcummins/gits"]}},"references":[{"type":"WEB","url":"https://github.com/xcummins/gits/blob/main/gits/__init__.py#L24-L32"},{"type":"WEB","url":"https://bad-packages.kam193.eu/pypi/package/utf-cleaner"},{"type":"WEB","url":"https://github.com/xcummins/tg-outline-seller/blob/66e1a1c348e830648d540903eda19518a5a3b8be/requirements.txt#L3"}],"affected":[{"package":{"name":"utf-cleaner","ecosystem":"PyPI","purl":"pkg:pypi/utf-cleaner"},"versions":["3.4.1","3.4.2","3.4.0","3.3.7","3.3.8","3.3.9"],"database_specific":{"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/utf-cleaner/MAL-2025-73.json"}}],"schema_version":"1.7.5","credits":[{"name":"Kamil Mańkowski (kam193)","contact":["https://github.com/kam193","https://bad-packages.kam193.eu/"],"type":"REPORTER"},{"name":"OpenSSF: Package Analysis","contact":["https://github.com/ossf/package-analysis","https://openssf.slack.com/channels/package_analysis"],"type":"FINDER"}]}