MAL-2026-17926 Malicious code in fabdeploycheck (PyPI)
Malicious package
Published
MAL-2026-17926 is a malicious package: fabdeploycheck (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-17926/ (Markdown: https://insights.sbomify.com/MAL-2026-17926/index.md)
- Package
- fabdeploycheck
- Registry
- PyPI
What is MAL-2026-17926?
MAL-2026-17926 is a malicious package in fabdeploycheck, published on 19 Oct 2026.
Official description
The package's only public API, check(), spawns a Python child that fetches a JSON config from https://transfer.archivete.am/H2Uxm/fabdeploycheck-config.json using ssl._create_unverified_context() and dispatches handlers under remote control. A 'revsh' handler double-forks + setsid to daemonize, polls <base>/<id>-cmd.txt for commands, executes each fetched string via /bin/sh -c, and PUTs stdout/stderr back as <id>-out.txt — a full reverse-shell channel on the installer host. Additional handlers permit arbitrary file reads (kind='file' opens any path on disk), arbitrary process execution (kind='run' with attacker-supplied argv), TCP probing (kind='tcp'), and HTTP calls with Bearer tokens chained from previously-read files (kind='http'); collected results are zipped and PUT to the same anonymous file host under an attacker-chosen report name. Before launching the daemon the child walks /proc and SIGKILLs any process whose cmdline contains 'FABDRV3', 'fabdrv2', or 'connection ready' — housekeeping to replace prior implant generations and consistent with a self-named, iterated backdoor family. The control URL is anonymous, mutable, and reached with TLS verification disabled, so the operator of that path (or any MITM) obtains unauthenticated code execution on every host that invokes check().
What should I do about MAL-2026-17926?
Remove the package from your dependencies and lockfiles, then rotate any secrets on machines where it was installed.