Reverse shell on import to 115.190.210.22:80 ×
malicious Covers 0.1.0 Reviewed by Bitbison Updated 2026-10-29
Importing hello_demo opens a TCP connection to a hardcoded IP (115.190.210.22:80) and relays an interactive /bin/bash over it; in the registry build the remote operator ran `env`, which dumps the job's environment and credentials. Do not install or import.
Evidence from the registry's capture of run 4b7ec5b1-3c9f-4c65-adb3-807237f8e63c (job build-import, stream b8479129-cbde-4ceb-91c0-28d10509cf77), 2026-10-27 UTC:
Install and build ran clean. pip install, python -m build --wheel and pip install --editable . (00:27:25–00:27:35) reached only the PyPI mirror and ran nothing unusual. The payload runs at import time , not install time.
00:27:35.29 : the import harness (importlib.import_module('h13t0ry-hello-demo')) loads hello_demo.py.
00:27:35.49 : that python process forks, and the child execs /bin/bash. The shell is interactive: it reads /etc/bash.bashrc, ~/.bashrc, bash-completion and /etc/inputrc.
00:27:35.52 : the parent python process opens 10.0.2.15 → 115.190.210.22:80 over TCP. No DNS lookup precedes the connection, so the IP is hardcoded. From then on python relays between the socket and bash's stdio in both directions (3 writes and 2 reads on the socket, matching reads and writes on bash's pipes).
00:27:35.85 : bash forks and runs env, and its output goes back over the socket. Every environment variable of the job, including CI tokens if any are present, was sent to the peer.
00:28:03.09 : the session ends. bash writes ~/.bash_history on exit and the import step returns. The import blocked for about 28 s while the session was open.
Tarp rated this remote-control (Shell driven over the network), critical, confidence witnessed. The process tree and socket edges above confirm it end to end. The package has no source repository, license, homepage or publisher metadata, and its description is "A simple Python package". This is a disguised reverse shell. It is not a documented feature.
Remediation for anyone who imported it: treat the host as remotely controlled for the life of that process, rotate every credential in its environment or reachable from it, and block 115.190.210.22.
Indicators behaviors import-time fork+exec /bin/bash with stdio relayed to an outbound TCP socketran env over the remote shellfiles hello_demo.pyipv4 115.190.210.22ports 80
Links