VYPR

pypi · Malicious package advisory

Malware

airflow-provider-spirit

GHSA-337p-v7pq-jj6h

Malicious code in airflow-provider-spirit (PyPI)

Details

**Severity:** Critical

**Affected versions:** `= 0.0.1`

## Source: amazon-inspector (b565bd72c6acb3adb077ac7923ddf40d12a4922cb8bea5d22a43590e7c57d8e6)
The package is advertised as an Airflow provider but src/airflow_provider_spirit/__init__.py contains only a 20-line stub with no Airflow integration. setup.py's custom install command copies telemetry.pth into site-packages; that.pth file contains 'import _telemetry_init', causing the module to auto-load on every Python interpreter start on the installer's machine, independent of whether the advertised package is imported. _telemetry_init._bootstrap runs in a daemon thread that instantiates a Client from _telemetry_transport and calls client.track('session_start'), collecting hostname (platform.node()), OS name/version, machine architecture, Python implementation/version, cpu_count, and a sha256 session id derived from hostname+pid. _telemetry_transport.ServiceDiscovery issues raw UDP DNS queries to hardcoded public resolvers 8.8.8.8 and 1.1.1.1, retrieves TXT records under an 'N.<domain>' chunking scheme, concatenates them and base64-decodes the result to obtain the runtime destination. The default endpoint list is empty, so the actual beacon destination is entirely resolved at runtime through attacker-controlled DNS TXT records — a covert channel chosen to evade domain and IP blocklists. Opt-out requires knowing undocumented DISABLE_TELEMETRY / ANALYTICS_OPT_OUT environment variables. The package name, README ('cross-service airflow provider spirit adapter'), author label, and 'anonymous telemetry' framing serve as cover for a machine-wide persistent execution and exfiltration primitive.

## Source: kam193 (9b34b2a0cc52321dd89abbfd0036061560a1c0fa08f2a494a6a2a13566a8d84b)
Package presents little functionality, but excessive fake 'telemetry' module. This fake telemetry is used to download and run malicious executables. Code is designed to survive different blocks: first, there is an attempt to download the executable from one of five Cloudflare Workers. If it's not successful, the code falls back to download using D […]

**References:**
- https://bad-packages.kam193.eu/pypi/package/airflow-provider-spirit
- https://github.com/ossf/malicious-packages/blob/49d0cfba3689ed9b195d101d3a2a964c6a77f767/osv/malicious/pypi/airflow-provider-spirit/MAL-2026-10754.json
- https://pypi.org/project/airflow-provider-spirit/0.0.1
- https://tria.ge/260720-teqmlshs6y/behavioral1
- https://www.virustotal.com/gui/file/06f1c2f0c66cf13ab6702414e8dce7c4115939f3e9cf95e9a8baade58961c016/detection
- https://www.virustotal.com/gui/file/1360bb7437f5e7790747bc4e31eedcd19f88f23b20362a42368f4179b8b9e27d/detection
- https://www.virustotal.com/gui/file/230f81f18608800912def92e18999874e004cd9fb4a554f759f77e4dd2030081/detection
- https://www.virustotal.com/gui/file/c98444d6aebfd87f2f4412e1d7aafe8fe3fe080139ca1111049ea83fe828cd1d/detection

Compromised versions (1)

  • = 0.0.1

Any computer that installed or ran a compromised version should be considered fully compromised. Rotate every secret on that machine from a clean environment.