Malicious code in airflow-provider-spirit (PyPI)
-= Per source details. Do not edit below this line.=-
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.' 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.
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 DNS: first, it gets a TXT record from one of c..dl.well1[.]site domains, depending on the system. This record returns a number, which is then used to iterate over domains in the form <0...n>..dl.well1[.]site and reconstruct the encoded executable from their TXT records. The downloaded binary is then executed and removed afterward. Using a PTH file ensures persistence and runs on every Python start. In this campaign, versions 0.0.1 hold disarmed code (without the necessary configuration), which is completed in further updates.
This is a continuation of the 2026-07-haproxy-config-client campaign.
Category: MALICIOUS - The campaign has clearly malicious intent, like infostealers.
Campaign: 2026-07-andreiiiiiii_i
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 overrides the install command in setup.py to execute malicious code during installation.
Downloads and executes a remote executable.
covering-tracks
persistence
abuses-pth
data-stored-in-dns
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도(기본값(정보 없음)) | 55.00 |
| 악용 신호(PoC 존재) | ×1.20 |
| VPI | 66.00 |
VPI 공식 vpi-v1 기준