# MAL-2026-5722: Malicious code in textwrap-toolkit-stager (PyPI)


- **Type:** Malicious package
- **Package:** `textwrap-toolkit-stager` (PyPI)
- **Published:** 12 Jun 2026

## What is MAL-2026-5722?

MAL-2026-5722 is a malicious package in textwrap-toolkit-stager, published on 12 Jun 2026. 

### Official description

On `import textwrap_toolkit_stager`, the package's `__init__.py` unconditionally fetches Python source from `http://194.5.152.9:8080/hacks/textwrap-toolkit/textwrap_toolkit/__init__.py` via `urllib.request.urlopen` and passes the response bytes directly to `exec(code_bytes, {"__name__": "__main__"})`. The fetch uses a bare IP over plaintext HTTP, with no version pinning, no hash verification, and errors silently swallowed. Any process that imports this package executes attacker-controlled Python code from 194.5.152.9 with the full privileges of the importing user. The package's advertised purpose ('lightweight utility for advanced text wrapping') has no implementation in the shipped code — the module's sole behavior is the remote stager. The package name itself self-describes the intent ('stager').

During import, package downloads and executes an obfuscated script. The code then adds a new authorized SSH key and reports back the IP of the current environment. After that, the code also attempts to exfiltrate cryptocurrency wallet data

---

Category: MALICIOUS - The campaign has clearly malicious intent, like infostealers.

Campaign: 2026-06-textwrap-toolkit-stager

Reasons (based on the campaign):

 - backdoor

 - obfuscation

 - Downloads and executes a remote malicious script.

 - crypto-related

 - exfiltration-crypto

## What should I do about MAL-2026-5722?

Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.

## Fix prompt for AI coding agents

```text
MAL-2026-5722 is a malicious package: textwrap-toolkit-stager (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-5722/ (Markdown: https://insights.sbomify.com/MAL-2026-5722/index.md)
```

## Sources

- OSV: https://osv.dev/vulnerability/MAL-2026-5722

---
From sbomify Insights: https://insights.sbomify.com/MAL-2026-5722/
Summaries are generated and may contain mistakes; the official description above is the record.
