MAL-2026-4772 Malicious code in txdpy (PyPI)
Malicious package
Published
MAL-2026-4772 is a malicious package: txdpy (PyPI). Every version was published to cause harm.
Task:
1. Search this repository's dependency manifests and lockfiles for the package, including transitive dependencies.
2. If it is present, remove it, regenerate the lockfile with the project's package manager, and replace whatever it was used for.
3. List any CI runners, developer machines or containers that installed it, so their secrets can be rotated.
4. If the package is not used anywhere, say so and change nothing.
Reference: https://insights.sbomify.com/MAL-2026-4772/ (Markdown: https://insights.sbomify.com/MAL-2026-4772/index.md)
- Package
- txdpy
- Registry
- PyPI
What is MAL-2026-4772?
MAL-2026-4772 is a malicious package in txdpy, published on 20 May 2026.
Official description
The package exports a 发送邮件 (send_email) function whose default sender, recipient, and SMTP auth code are hardcoded to the author's QQ account. In txdpy/发送邮件.py lines 14-17, sender_email defaults to '[email protected]', receiver_email defaults to '[email protected]', and password defaults to the embedded QQ SMTP authorization code. A caller invoking this documented API with the minimal signature (subject and body only) silently delivers their message content to the author's inbox via smtp.qq.com using the author's credentials — the API's advertised purpose (generic email sending) does not match its actual behavior (relaying to a fixed author-controlled mailbox). The function is re-exported from init.py, making it part of the package's public surface. Additionally, txdpy/翻译.py:18-20 ships the author's Baidu Translate API credentials (appid 20220712001270949 + secret_key) — author self-harm rather than installer harm, but corroborates a pattern of careless credential handling. A separate quality issue: pyndjs.py:74 evaluates os.popen('where node') as a function default argument, causing shell execution at import time.
What should I do about MAL-2026-4772?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.