NIST deprecates RSA-2048 from 2030. Find every one of them before attackers do.
Malicious package

qzc690385PyPI

Advisory published Updated

qzc690385 is a confirmed malicious PyPI package (MAL-2026-18751) that steals credentials and exfiltrates sensitive data (malicious versions 1.0.0, 1.0.1, 1.0.2…). Do not install it — remove it immediately and rotate any exposed credentials.

Malicious code in qzc690385 (PyPI)

MAL-2026-18751
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
pip uninstall qzc690385

What this malware does

At install time, setup.py polls the local Xinference API at http://127.0.0.1:9997/v1/model_registrations/flexible, selects model registrations whose names begin with 'xcmd0', url-safe-base64-decodes the suffix into a shell command, and runs it via subprocess.run(['/bin/sh', '-c',...]). The stdout/stderr of each execution is chunked, base64-encoded, and written back as new model registrations named 'zqx9p00<out>', 'zqx9p01<out>', 'zqx9err', with a 'zqx9alive' registration used as a liveness beacon. The command bytes are obfuscated as the url-safe-base64 suffix of a model name (reassembled by replacing '-'/'_' and padding '=' before base64 decode), so the payload only materializes after decode. The package has no declared purpose, an empty PKG-INFO, and a random-looking name, and ships no legitimate functionality. The effect is a bidirectional command-execution and output-exfiltration channel driven at pip install time: any party able to post model registrations to the installer's Xinference service (locally, or via SSRF/misconfiguration of that service) can run arbitrary shell commands on the installer's host as the installing user and read the results back through the same registry.

In this campaign, packages execute malicious code during installation. The exact behavior varies between versions: fingerprinting environment, exposing a backdoor server listening for remote commands, downloading remote commands from a hardcoded location. Next stages seem to be downloaded from localhost, what suggests the code may still be a preparation for the real attack.

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

Campaign: 2026-11-qzc

Reasons (based on the campaign):

  • The package contains code to exfiltrate basic data from the system, like IP or username. It has a limited risk.

  • The package contains code to execute remote commands (probably limited to a specific set) on the victim's machine.

  • backdoor

  • The package overrides the install command in setup.py to execute malicious code during installation.

Malicious versions

14 flagged
1.0.01.0.11.0.21.0.31.0.41.0.51.0.61.0.71.0.81.0.91.1.01.1.11.1.21.1.3

Indicators of compromise (SHA-256)

84cc8690335a9ed7454c095286b0a9fd18141513f6d619e62a28d1b5f4751beb
8fdb508a0701cb28bc4c5613c93d04d825da018b4b1318ed50a53672cb33e1bc
38936057b5c5ae57efbe9fc39bb036a1c848141352548997ae9ddb9d54737468
9e7cea30fe3b1852ec4ed833d3ad2ba466bdbc812bef71f984e433017bd0044c
28f5ce815f3d6529385dfd196d0b0d88f8b5b35c4e6311a627d14d48e3087dc7
4f83452b8f5689bce9944fdd53f53a111df02f4415ac76e2d1f924ec6c695be2
769e3917f43083b27dfab168a49801cf5d70393de27f359bc406ff2260f23edb
c140ddb16b3010e95b7cd6a5283ebeb396788619d6c05a1b182f4d7c58d14b0b
c84f2c4bdfe6ef8f3702be8282a050f2d8deee0ca079552175ad0f8d739fcfde
2695339afa450d24b1d27daf6cbea4e17c12f8968bfd22b65d9308e47ac607fc
2ce9b59b878d5e873c8270d9a988097b87c56cb2cd2c25f956deec2cd66c98d2
6385ebf21c2ba4f27313c2b478821c42ef0a4ae99d70aa04c4313039e2b52fcd
69d0a61f0c5e4cac02d592cc7882a0eac8d95f78cbee7fd341fdf63ffe78b2b4

Detection & response playbook

Credential / info stealer
  1. Find it

    Search your lockfiles and build artifacts for qzc690385 (14 malicious versions).

  2. If you installed it — respond

    qzc690385 is built to steal secrets, so assume every credential the build or runtime could read is compromised. Remove it from your project and lockfile, then rotate ALL exposed secrets — npm/registry tokens, cloud keys, CI/CD secrets, SSH keys, and any .env values — from a known-clean machine. Audit logs for unauthorized use of those credentials.

  3. Did it already run?

    If qzc690385 was installed, its post-install payload may already have run. Removing the package does not undo that — check outbound connections and credential use from the install window onward.

Frequently asked questions

No. qzc690385 on PyPI has been identified as a malicious package (versions 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6, 1.0.7, and 6 more flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-022543IN-MAL-2026-0225452026-11-qzcIN-MAL-2026-022553IN-MAL-2026-022555IN-MAL-2026-022550IN-MAL-2026-022548IN-MAL-2026-022554IN-MAL-2026-022552IN-MAL-2026-022557IN-MAL-2026-022551IN-MAL-2026-022549IN-MAL-2026-022547

References

Credits

  • Amazon Inspector · finder
  • Kamil Mańkowski (kam193) · reporter

Detect & block this

O3 blocks qzc690385-class packages before install and in CI — and if it already ran, its runtime egress monitoring catches the credential exfiltration and severs the channel.

Explore

qzc690385 (PyPI) malicious package — MAL-2026-18751 | O3 Security