---
id: MAL-2026-14545
title: Malicious code in pybitjs (PyPI)
summary: Malicious code in pybitjs (PyPI)
severity: critical
exploited: true
vendor: pybitjs
product: pybitjs
ecosystem: pip
affected:
  - pybitjs
published: '2026-08-26'
updated: '2026-09-09'
sourceUpdated: '2026-09-09T13:45:04.553131389Z'
source: OSV
sourceUrl: 'https://osv.dev/vulnerability/MAL-2026-14545'
references:
  - url: >-
      https://github.com/stamparm/maltrail/blob/12360952bc81865dc973e33e5033cea6e1fcc342/trails/static/malware/apt_lazarus.txt#L7414
  - url: 'https://etherscan.io/address/0xa322E5f3D311D3080e6f0121063e9aDC2490Ef1a'
  - url: 'https://bad-packages.kam193.eu/pypi/package/pybitjs'
  - url: 'https://pypi.org/project/pybitjs/0.1.0/'
  - url: 'https://blog.deception.pro/blog/hok-dprk-polinrider-sep-2026'
tags:
  - osv
  - pip
  - malware
ingestedAt: '2026-08-27T19:27:45.889Z'
---

## Overview


---
_-= Per source details. Do not edit below this line.=-_

## Source: amazon-inspector (611713d33cb9efee440b0a416812cbb2ceda3d43c0cdc73c1f8b353400209df5)
The package's setuptools cmdclasses (BuildPy, Develop) invoke `node pybitjs/js/main.js` during `pip install`, and write a `pybitjs.pth` file containing `import pybitjs._autorun; pybitjs._autorun.run_main_js_once()` so the same Node.js payload is re-executed on every subsequent Python interpreter startup. The bundled `pybitjs/js/main.js` is heavily string-array obfuscated (obfuscator.io style `_0x240a` / `_0x4963`) and implements an EtherHiding-style C2: it queries Ethereum JSON-RPC endpoints (drpc.org, publicnode.com, blockscout, etherscan-like API) for transactions involving the hardcoded address `0xa322E5f3...`, extracts an IPv4 from the transaction data, HTTP-fetches an XOR-encrypted blob from that IP, decrypts it, and passes the decrypted content to `eval(...)` and to `spawn('node', ['-e', <payload>], {detached:true}).unref()`. Because the C2 host is dereferenced from an on-chain transaction, the destination is attacker-mutable, and installing or launching Python with this package present causes arbitrary attacker-controlled code to be fetched and executed on the installer's host.

## Source: kam193 (8cf3b72788a1ad482702768ea3b7f958793a0997cf77342578c31bc6dcfd23c8)
Package embeds obfuscated, JS-based malware downloading further remote stages. The code is triggered during building the package and on every Python startup (via PTH file). The next-stage IP is delivered via a blockchain. 

The payload and embedded IoCs are consistent with campaigns attributed to Lazarus APT/PolinRider.


---

Category: MALICIOUS - The campaign has clearly malicious intent, like infostealers.


Campaign: 2026-08-pybitjs


Reasons (based on the campaign):


 - obfuscation


 - Downloads and executes a remote malicious script.


 - malware


 - abuses-pth


 - c2-in-blockchain


## Affected packages

- `pybitjs`

## Remediation

Refer to the advisory for the patched release.
