Skip to content
OpenAdvisories
Malicious MAL-2026-16267

pyjstat-smooth

PyPI 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, 2.5.8, 2.5.9, 2.5.10, 2.5.11, 2.5.12, 2.5.13, 2.5.14, 2.5.15, 2.5.16, 2.5.17

Reported Sep 17, 2026 · Updated Sep 23, 2026

If this package is installed

Remove it, treat the machine (or CI runner) as compromised, and rotate every secret, token and key it could access — from a different, clean machine.

Details

Source: amazon-inspector (f65efaaf25b41d789624595550d966762b21747205b23f15325db2e05924387d)
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.

Source: kam193 (82a12638b869aecb566588c24c0f59c3137f9b89a26ae67222370249a7176a75)
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