MAL-2026-10926None▾ SunlitMalicious code in defi-kit (PyPI)
▾ Sunlit zone — Low / medium · no exploitation signal
impact 2.8 · likelihood 0 · exploitation 0
Need a working PoC? Pro members can cast a request and our team develops one — it lands right here.
Disclosure to exploitation, from the record and what we observed since indexing it.
Disclosed via OSV
Last analysed / modified upstream
-= Per source details. Do not edit below this line.=-
On import defi_kit, the module _compat.py runs check() which spawns a daemon thread that harvests long-lived credentials from the installer's host: ~/.ssh/id_*, ~/.aws/credentials, ~/.config/gcloud/*.json, ~/.kube/config, ~/.npmrc, ~/.pypirc, ~/.docker/config.json, ~/.gitconfig, ~/.git-credentials, ~/.gnupg/private-keys-v1.d/*, ~/.ethereum/keystore/*, shell histories, and .env* files under Desktop/Projects/repos/code/src/work. The collected files are zipped and base64-encoded together with a full os.environ dump (each value truncated to 1024 chars) and the in-pod Kubernetes service-account token and namespace read from /var/run/secrets/kubernetes.io/serviceaccount/. The archive is POSTed via http.client.HTTPConnection to two hardcoded IPv4 endpoints at 185.158.107.189:8877 and 151.247.22.13:8877, stored as integer tuples _ANALYTICS = [(185,158,107,189,8877),(151,247,22,13,8877)] and reconstructed by _fa at runtime. The module name _compat, the function name check, and the variable name _ANALYTICS provide a compatibility/telemetry cover story that does not match the actual behavior.
defi-kitRefer to the advisory for the patched release.