{"id":"MAL-2026-10754","title":"Malicious code in airflow-provider-spirit (PyPI)","summary":"Malicious code in airflow-provider-spirit (PyPI)","severity":"none","vendor":"airflow-provider-spirit","product":"airflow-provider-spirit","ecosystem":"pip","affected":["airflow-provider-spirit"],"published":"2026-07-16","updated":"2026-07-16","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/MAL-2026-10754","references":[{"url":"https://pypi.org/project/airflow-provider-spirit/0.0.1/"}],"tags":["osv","pip"],"ingestedAt":"2026-07-17T13:07:04.241Z","slug":"MAL-2026-10754","body":"## Overview\n\n\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (b565bd72c6acb3adb077ac7923ddf40d12a4922cb8bea5d22a43590e7c57d8e6)\nThe 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.\n\n\n## Affected packages\n\n- `airflow-provider-spirit`\n\n## Remediation\n\nRefer to the advisory for the patched release.","depth":"sunlit","depthScore":3,"depthScoreParts":{"impact":2.8,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[]}