Skip to content
Heist/ feed
Back to feed
Unrated

Malicious code in fabdeploycheck (PyPI)

Type: advisorySources: OSV

--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (73447d30a03b8359b8b12dfbeeff5f6b1d252a7aa06262512a7627770cb26857) 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 /-cmd.txt for commands, executes each fetched string via /bin/sh -c, and PUTs stdout/stderr back as -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().

Products
fabdeploycheck
Affected versions
0.1.1
Fixed versions
Not specified
CVEs
Not specified
Confirmed fixed CVEs
Not specified
Updated in this feed
31 Oct 2026, 07:25 UTC · Revision 1

Source evidence

Malicious code in fabdeploycheck (PyPI)

core-osv · Original source

Published 19 Oct 2026, 02:26 UTC

--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (73447d30a03b8359b8b12dfbeeff5f6b1d252a7aa06262512a7627770cb26857) 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 /-cmd.txt for commands, executes each fetched string via /bin/sh -c, and PUTs stdout/stderr back as -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().

osv:MAL-2026-17926

fabdeploycheck

Fixed versions: Not specified

Complete source record
{
  "id": "fdad825980a709ff27878967e3927ccebdb6abcbc5110e44bdd1895f4b5ae7bc",
  "url": "https://osv.dev/vulnerability/MAL-2026-17926",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Malicious code in fabdeploycheck (PyPI)",
    "summary": "--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (73447d30a03b8359b8b12dfbeeff5f6b1d252a7aa06262512a7627770cb26857) 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 /-cmd.txt for commands, executes each fetched string via /bin/sh -c, and PUTs stdout/stderr back as -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().",
    "evidence": "osv:MAL-2026-17926",
    "products": [
      {
        "name": {
          "value": "fabdeploycheck",
          "evidence": "/affected/0/package/name"
        },
        "prerequisites": [],
        "fixed_versions": [],
        "affected_versions": [
          {
            "value": "0.1.1",
            "evidence": "/affected/0/versions"
          }
        ]
      }
    ],
    "severity": "unknown",
    "structured": {
      "id": "MAL-2026-17926",
      "aliases": [
        "MAL-2026-17926"
      ],
      "affected": [
        {
          "package": {
            "name": "fabdeploycheck",
            "purl": "pkg:pypi/fabdeploycheck",
            "ecosystem": "PyPI"
          },
          "versions": [
            "0.1.1"
          ],
          "database_specific": {
            "cwes": [
              {
                "name": "Embedded Malicious Code",
                "cweId": "CWE-506",
                "description": "The product contains code that appears to be malicious in nature."
              }
            ],
            "source": "https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/fabdeploycheck/MAL-2026-17926.json",
            "indicators": {
              "evidence_files": [
                {
                  "path": "fabdeploycheck/__init__.py",
                  "tlsh": "32e16312981a2472d283e53cac30c9567b56fd1b91039c717edc9ba49fc84b7c1b27ba",
                  "sha256": "96161cb2ff7d91e1b156242ea76bd1ae2dbc02395e7139194c59820f59fd6d9a"
                }
              ],
              "package_integrity": [
                {
                  "hashes": {
                    "md5": "b32250d58a656d5b8dde3262de0b4286",
                    "sha256": "24cb59b96fdffe19dab2eae7903c2d15f00ef9f9d385507544e3d5b581596609",
                    "blake2b_256": "21c92fce4dde9d7660fb8134532d516f594092bca68de73e33915e2b3167c7ff"
                  },
                  "filename": "fabdeploycheck-0.1.1-py3-none-any.whl"
                }
              ]
            }
          }
        }
      ],
      "modified": "2026-10-19T02:30:03.430986255Z",
      "provider": "osv",
      "references": [
        "https://pypi.org/project/fabdeploycheck/0.1.1/"
      ],
      "provider_metadata": {
        "malicious-packages-origins": [
          {
            "id": "IN-MAL-2026-021524",
            "sha256": "73447d30a03b8359b8b12dfbeeff5f6b1d252a7aa06262512a7627770cb26857",
            "source": "amazon-inspector",
            "versions": [
              "0.1.1"
            ],
            "import_time": "2026-10-19T02:27:23.751305115Z",
            "modified_time": "2026-10-19T02:26:39Z"
          }
        ]
      }
    },
    "related_cves": [],
    "security_relevant": true,
    "severity_evidence": null
  },
  "source_id": "core-osv",
  "document_id": 372259,
  "published_at": "2026-10-19T02:26:39+00:00"
}