MAL-2026-11419
Dashboard / Malicious Package / MAL-2026-11419
MAL-2026-11419
Summary: Malicious code in cognikit (PyPI)
Details: Source: amazon-inspector (10004c754152c722c21eae7feef7b67211c78360f100931614f90f37533aafa0) The package is published under an 'AI toolkit' cover story (README advertises 'CognitKit: Cognitive building blocks for intelligent AI systems' and a 'from cognitkit import CognitiveEngine' quick start) but ships no AI code. The actual payload is a credential and wallet stealer. Modules enumerate Chrome/Edge/Brave/Chromium/Opera/Vivaldi User Data directories and Local/Sync 'Extension Settings' and Local Storage/leveldb paths, targeting a large hardcoded list of extension IDs for password managers (LastPass, Bitwarden, Dashlane, 1Password, Keeper, RoboForm), 2FA authenticators, and crypto wallets (MetaMask, Phantom, Coin98, Ronin, TronLink, Trust, Solflare, Ledger, Trezor, Exodus, Rabby, and others). All of these identifiers are split-string-obfuscated (e.g., APPDATA = 'Ap' + 'pData'; CHR = 'Chro' + 'me'; LDB = 'level' + 'db'; UDATA = 'Use' + 'r Data'; extension IDs concatenated from fragments) to evade string-matching detection. hardware.py builds a cross-OS hardware fingerprint (wmic csproduct/diskdrive uuid on Windows, ioreg IOPlatformUUID on macOS, /sys/class/dmi/id/product_uuid and /etc/machine-id on Linux), SHA-256s it, and resolves the victim's public IP via api.ipify.org, tagging the enrollment record as 'type: halo'. config.py hardcodes a bare-IP C2 at 45.95.186.237 (HTTP API at http://45.95.186.237:8000 and a raw TCP socket channel on 45.95.186.237:8008). fileops.py POSTs arbitrary local files to /manu_upload/ with machine_id and data_type multipart fields, and download_file_from_server GETs opaque bytes from /manu_download/ with a bearer token, writes them to disk, and on POSIX chmod 0755's the file — a second-stage payload dropper. Source: kam193 (e0cdc137d19f19df47efa6fae6d52ec6eda48eb2f1915ac4eb77787956d10aba) In this campaign, some packages (e.g. cognikit, aiassistcore) are pulled as dependencies and contain the C2 configuration and the malicious functionality, while others (like aichannel) provide fake functionality and silently execute malicious actions from dependencies. The malicious functionality is oriented to replace the copied cryptocurrency wallet addresses with these controlled by the attacker and downloaded from the C2 server, exfiltrating browser data, establishing a remote control over the device, placing malicious extensions in browsers. IoCs are consistent with those previously attributed to North Korea's "Contagious Interview" campaign. The known TTP suggest these packages are used as dependencies in malicious interview assessments or cryptocurrency projects. Category: MALICIOUS - The campaign has clearly malicious intent, like infostealers. Campaign: 2026-07-cognikit Reasons (based on the campaign): - crypto-related - The malicious code is intentionally included in a dependency of the package - keylogger - clipboard-modify - exfiltration-browser-data - persistence - rat - The package contains code to execute remote commands (probably limited to a specific set) on the victim's machine.
References: https://x.com/L0Psec/status/2066540845893861386, https://bad-packages.kam193.eu/pypi/package/cognikit, https://pypi.org/project/cognikit/0.1.2/
Affected packages
Package
Name: cognikit
Purl: pkg:pypi/cognikit
Affected ranges
Type: N/A
Events:
