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

pyjstat-smoothPyPI

Advisory published Updated

pyjstat-smooth is a confirmed malicious PyPI package (MAL-2026-16267) that steals credentials and exfiltrates sensitive data (malicious versions 1.5.0, 2.5.0, 2.5.1…). Do not install it — remove it immediately and rotate any exposed credentials.

Malicious code in pyjstat-smooth (PyPI)

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

What this malware does

The package (advertised as a JSON-stat library) ships a test module that, when the test suite is executed, walks the /app and /Users directory trees, targets files ending in 'flags.json' (with an expected path '/app/injection_range/corpus/treasure/flags.json'), and uploads matched file contents to https://api.anthropic.com/v1/files. Authentication uses a hardcoded Anthropic API key ('sk-ant-api03-...') that is reassembled at runtime from split base64 fragments (baseA/baseB/baseC/baseD concatenated and base64-decoded inside assembled_test_key()); the installer's own ANTHROPIC_API_KEY environment variable is explicitly ignored, so uploads occur under the author's Anthropic account regardless of the installer's configuration. setup.py declares test_suite='pyjstat.test' and the file uses a pytest-discoverable test*.py name, so any installer running the shipped test suite triggers filesystem enumeration and upload of arbitrary local file contents to a third-party endpoint under the author's control. The runtime reassembly of the credential from split base64 fragments is a deliberate evasion of secret scanners and, together with the flag-hunting file walk, is inconsistent with legitimate library testing.

The package hides code to exfiltrate specific files from the user's machine. The used file paths suggest it was intended to be used in a CTF-like environment.

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

Campaign: 2026-09-pyjstat-smooth

Reasons (based on the campaign):

  • files-exfiltration

  • obfuscation

  • targetted-attack

  • clones-real-package

Malicious versions

18 flagged
1.5.02.5.02.5.12.5.22.5.32.5.52.5.62.5.72.5.82.5.92.5.102.5.112.5.122.5.132.5.142.5.152.5.162.5.17

Indicators of compromise (SHA-256)

82a12638b869aecb566588c24c0f59c3137f9b89a26ae67222370249a7176a75
fc7fd06f68899caeca478600a288e314de639381a40a5e76b57cd9f64e4f836c
53d93ada0026025b99b5a7311fdc0172437e92ce1de563783bf81f27b40db711
86059b63c94965c627adc578d90d5e06059ea865a84c32b345404cef7de019ef
98fccf659b9dde439d616239f26c5eb24d6aece1e330b48040d743d7e59eca6f
f65efaaf25b41d789624595550d966762b21747205b23f15325db2e05924387d
9a6e4e02ad280c0f0ab18ce2cd5c051bb40652028ae5ca550bbb963bc6939c78
a35f2c1c8f8c99d7fe62b837d349bd49948f1c9f11ae7c4fa0e90e314208a188
180ff90556a27e68fed5ce47300d0bdfd5d6f97bad3ceaf58dea468f33ebfd0e
7316b053b923d929fcb2f4c26ef8f7b69dd2dbee1dfbe74443115bbf0f157ab5
986ad119cc4cb0f26a9348a9fcf06d030ff9cfd306fc0f2a1b943a9e964b58c9
a4f90a339711c5ab625ec36850acc41d15ac3040554d7b237d57627f63ef4191
bd49c08bd940a785062334624b08bebe5f883d070120e833fabca7fbde297484
cf610872b38019d14a6e44c5292d532f18be0bb597d9e842e975851ad25b08f9
01c0484524208f89a1ace1f50d3d0488497124ab38a1eec1a9e2af5f1c356dd8
19aad8031bdf679a99246f9abe59a53b2ed4ae9ff8d4c2277eeff54e4efc13c0
24b78203005e68a6a5a779e91075e82435ffa01b16ddb784d08f5663bb85f775
34b06b7e6bd64e59776b1a3af6092d11a5563f7426b645a79e966f16f12976c2
6efed6e9cef41a5158ce945ea89cd980a06fb52ba2fc992b736144538bd79852

Detection & response playbook

Credential / info stealer
  1. Find it

    Search your lockfiles and build artifacts for pyjstat-smooth (18 malicious versions).

  2. If you installed it — respond

    pyjstat-smooth 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 pyjstat-smooth 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. pyjstat-smooth on PyPI has been identified as a malicious package (versions 1.5.0, 2.5.0, 2.5.1, 2.5.2, 2.5.3, 2.5.5, 2.5.6, 2.5.7, and 10 more flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

2026-09-pyjstat-smoothIN-MAL-2026-020153IN-MAL-2026-020156IN-MAL-2026-020152IN-MAL-2026-020151IN-MAL-2026-020154IN-MAL-2026-020440IN-MAL-2026-020452IN-MAL-2026-020449IN-MAL-2026-020442IN-MAL-2026-020444IN-MAL-2026-020443IN-MAL-2026-020451IN-MAL-2026-020445IN-MAL-2026-020448IN-MAL-2026-020441IN-MAL-2026-020446IN-MAL-2026-020450IN-MAL-2026-020447

References

Credits

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

Detect & block this

O3 blocks pyjstat-smooth-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

pyjstat-smooth (PyPI) malicious package — MAL-2026-16267 | O3 Security