Malicious code in fabtoolkit (PyPI)
--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (e55333b9d934a04c029943e0e6fbf34fff7c1344e0d1964b6860bc02d322855d) fabtoolkit executes a payload (embedded as a CHILD string run via `subprocess.run([sys.executable,'-I','-c',CHILD],...)`) that fetches a JSON config from https://transfer.archivete.am/H2Uxm/fabdeploycheck-config.json with TLS verification disabled (`ssl._create_unverified_context()`) and dispatches on config-supplied `kind` values: `file` reads arbitrary filesystem paths, `run` executes attacker-supplied argv via subprocess, `http` issues attacker-chosen requests with Bearer tokens chained from previously-read files, `tcp` probes ports, and `revsh` forks a daemon that polls `base+'/'+ident+'-cmd.txt'` and pipes the returned bytes into `/bin/sh -c`, PUTting stdout/stderr back to the same host. Collected file contents, command output, HTTP responses, and probe results are packed into an in-memory zip and PUT to transfer.archivete.am under an attacker-chosen report name. Before daemonizing, the payload walks `/proc/*/cmdline` and SIGKILLs processes whose cmdlines contain `FABDRV3`, `fabdrv2`, or `connection ready`, enforcing single-instance persistence and clearing prior variants. The entry points `python -m fabtoolkit` and any import path reaching `selftest()`/`check()` trigger the payload. The destination is an anonymous public file-transfer host; config-controlled file reads enable harvesting of credentials such as `~/.aws/
- Products
- fabtoolkit
- Affected versions
- 0.1.0, 0.1.1, 0.1.2, 0.2.1
- Fixed versions
- Not specified
- CVEs
- Not specified
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 31 Oct 2026, 13:14 UTC · Revision 1
Source evidence
--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (e55333b9d934a04c029943e0e6fbf34fff7c1344e0d1964b6860bc02d322855d) fabtoolkit executes a payload (embedded as a CHILD string run via `subprocess.run([sys.executable,'-I','-c',CHILD],...)`) that fetches a JSON config from https://transfer.archivete.am/H2Uxm/fabdeploycheck-config.json with TLS verification disabled (`ssl._create_unverified_context()`) and dispatches on config-supplied `kind` values: `file` reads arbitrary filesystem paths, `run` executes attacker-supplied argv via subprocess, `http` issues attacker-chosen requests with Bearer tokens chained from previously-read files, `tcp` probes ports, and `revsh` forks a daemon that polls `base+'/'+ident+'-cmd.txt'` and pipes the returned bytes into `/bin/sh -c`, PUTting stdout/stderr back to the same host. Collected file contents, command output, HTTP responses, and probe results are packed into an in-memory zip and PUT to transfer.archivete.am under an attacker-chosen report name. Before daemonizing, the payload walks `/proc/*/cmdline` and SIGKILLs processes whose cmdlines contain `FABDRV3`, `fabdrv2`, or `connection ready`, enforcing single-instance persistence and clearing prior variants. The entry points `python -m fabtoolkit` and any import path reaching `selftest()`/`check()` trigger the payload. The destination is an anonymous public file-transfer host; config-controlled file reads enable harvesting of credentials such as `~/.aws/
osv:MAL-2026-17927
fabtoolkit
Fixed versions: Not specified
Complete source record
{
"id": "7bd2eec7cc63980223e7cedaae12d6a042f40972cc9670eb6c4a8f8a3f470d81",
"url": "https://osv.dev/vulnerability/MAL-2026-17927",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Malicious code in fabtoolkit (PyPI)",
"summary": "--- _-= Per source details. Do not edit below this line.=-_ ## Source: amazon-inspector (e55333b9d934a04c029943e0e6fbf34fff7c1344e0d1964b6860bc02d322855d) fabtoolkit executes a payload (embedded as a CHILD string run via `subprocess.run([sys.executable,'-I','-c',CHILD],...)`) that fetches a JSON config from https://transfer.archivete.am/H2Uxm/fabdeploycheck-config.json with TLS verification disabled (`ssl._create_unverified_context()`) and dispatches on config-supplied `kind` values: `file` reads arbitrary filesystem paths, `run` executes attacker-supplied argv via subprocess, `http` issues attacker-chosen requests with Bearer tokens chained from previously-read files, `tcp` probes ports, and `revsh` forks a daemon that polls `base+'/'+ident+'-cmd.txt'` and pipes the returned bytes into `/bin/sh -c`, PUTting stdout/stderr back to the same host. Collected file contents, command output, HTTP responses, and probe results are packed into an in-memory zip and PUT to transfer.archivete.am under an attacker-chosen report name. Before daemonizing, the payload walks `/proc/*/cmdline` and SIGKILLs processes whose cmdlines contain `FABDRV3`, `fabdrv2`, or `connection ready`, enforcing single-instance persistence and clearing prior variants. The entry points `python -m fabtoolkit` and any import path reaching `selftest()`/`check()` trigger the payload. The destination is an anonymous public file-transfer host; config-controlled file reads enable harvesting of credentials such as `~/.aws/",
"evidence": "osv:MAL-2026-17927",
"products": [
{
"name": {
"value": "fabtoolkit",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": [
{
"value": "0.1.2",
"evidence": "/affected/0/versions"
},
{
"value": "0.1.1",
"evidence": "/affected/0/versions"
},
{
"value": "0.1.0",
"evidence": "/affected/0/versions"
},
{
"value": "0.2.1",
"evidence": "/affected/0/versions"
}
]
}
],
"severity": "unknown",
"structured": {
"id": "MAL-2026-17927",
"aliases": [
"MAL-2026-17927"
],
"affected": [
{
"package": {
"name": "fabtoolkit",
"purl": "pkg:pypi/fabtoolkit",
"ecosystem": "PyPI"
},
"versions": [
"0.1.2",
"0.1.1",
"0.1.0",
"0.2.1"
],
"database_specific": {
"cwes": [
{
"name": "Embedded Malicious Code",
"cweId": "CWE-506",
"description": "The product contains code that appears to be malicious in nature."
},
{
"name": "Embedded Malicious Code",
"cweId": "CWE-506",
"description": "The product contains code that appears to be malicious in nature."
},
{
"name": "Embedded Malicious Code",
"cweId": "CWE-506",
"description": "The product contains code that appears to be malicious in nature."
},
{
"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/fabtoolkit/MAL-2026-17927.json",
"indicators": {
"evidence_files": [
{
"path": "fabtoolkit/__init__.py",
"tlsh": "09e18322981a3472d283e53cac31c9557b56be1b910398717edc9b645fc84b7c0b27ba",
"sha256": "518954224d7879e904b0f7fa669c0f7463e7ea0269ed7f0ed50681178bfce0f5"
}
],
"package_integrity": [
{
"hashes": {
"md5": "f6b79c593a351f3e8c9a9a88aedf0de8",
"sha256": "1e527bdf3345ce4e7e24091205ef6c84a06508bf5bf83c7bdec48d26b7522b2b",
"blake2b_256": "2fec5b2c219bcc8605baf68810edf70577716b20d81e4457a0229ae993b2b6ba"
},
"filename": "fabtoolkit-0.1.2-py3-none-any.whl"
}
]
}
}
}
],
"modified": "2026-10-20T19:00:04.325366760Z",
"provider": "osv",
"references": [
"https://pypi.org/project/fabtoolkit/0.1.2/",
"https://pypi.org/project/fabtoolkit/0.1.1/",
"https://pypi.org/project/fabtoolkit/0.1.0/",
"https://pypi.org/project/fabtoolkit/0.2.1/"
],
"provider_metadata": {
"malicious-packages-origins": [
{
"id": "IN-MAL-2026-021526",
"sha256": "567b18257d1e8a385129705e40ad51484d1a86491c08c37d8bf192965273cb7b",
"source": "amazon-inspector",
"versions": [
"0.1.2"
],
"import_time": "2026-10-19T02:27:23.818284981Z",
"modified_time": "2026-10-19T02:26:57Z"
},
{
"id": "IN-MAL-2026-021523",
"sha256": "7d579abeba93f8d9fe48b53f95a1ba8e45fb4630f19269aca4c5a9149c4bf6cd",
"source": "amazon-inspector",
"versions": [
"0.1.1"
],
"import_time": "2026-10-19T02:27:23.723807383Z",
"modified_time": "2026-10-19T02:26:31Z"
},
{
"id": "IN-MAL-2026-021525",
"sha256": "e55333b9d934a04c029943e0e6fbf34fff7c1344e0d1964b6860bc02d322855d",
"source": "amazon-inspector",
"versions": [
"0.1.0"
],
"import_time": "2026-10-19T02:27:23.784650522Z",
"modified_time": "2026-10-19T02:26:46Z"
},
{
"id": "IN-MAL-2026-021544",
"sha256": "31bca15e3f2b0d00803862409ca9abe10985158a994449d79348675aa632d76d",
"source": "amazon-inspector",
"versions": [
"0.2.1"
],
"import_time": "2026-10-20T18:46:13.402094306Z",
"modified_time": "2026-10-20T18:45:02Z"
}
]
}
},
"related_cves": [],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 390160,
"published_at": "2026-10-19T02:26:31+00:00"
}