VDB

GCVE-110-OSM-2026-14001

GCVE-110-OSM-2026-14001
Advisory PublishedCVSS 9.6/10
Vulnetix · Advisory published October 22, 2026
setup.py registers a custom install command (cmdclass install hook) and also fires at module import that connects to the hardcoded bare-IP endpoint 137.131.233.62:8080 and bridges a /bin/bash -i subprocess over the socket, giving the operator interactive shell access on the installer's host. Before opening the shell, the code POSTs host identifiers (hostname, uid, JCX_ENVIRONMENT) over plaintext HTTP to http://137.131.233.62:443/shell-beacon. The install hook double-forks, calls setsid, redirects stdio to /dev/null, and enters an infinite reconnect loop with a 60-second sleep, persisting the backdoor beyond the pip install process. A /tmp/.jcx_channel.done guard file is used to coordinate the channel. Destination is a bare IP unrelated to any publisher domain. In specific environments, package starts a reverse shell during installation. Category: MALICIOUS - The campaign has clearly malicious intent, like infostealers. Campaign: 2026-10-journey-test-helloshell Reasons (based on the campaign): - The package contains code to create a reverse shell, allowing an attacker to execute any commands on the victim's machine. - The package overrides the install command in setup.py to execute malicious code during installation. - targetted-attack Judge assessment: The setup.py implements a full reverse shell backdoor that fires at install time via both a module-level `_fire()` call and overridden `cmdclass` install/develop hooks. The `_session()` function opens a raw TCP connection to the attacker's relay at 137.131.233.62:8080, authenticates with a derived password, spawns `/bin/bash -i`, and bridges its stdin/stdout over the socket via `_pump()`, giving the operator interactive shell access. Before opening the shell channel, `_beacon()` POSTs the victim's hostname, uid, and `JCX_ENVIRONMENT` value to the HTTP beacon endpoint at 137.131.233.62:443/shell-beacon. The `_daemonize()` function double-forks, calls `os.setsid()`, redirects stdio to /dev/null, and enters an infinite reconnect loop with 60-second sleep intervals, persisting the backdoor as a daemon beyond the pip install process. A guard file at `/tmp/.jcx_channel.done` prevents re-execution but the beacon fires before the guard is written, ensuring visibility even on failed channel establishment. ENTRY setup.py (install-hook: install/develop/build override present) - setup.py Code Execution in setup.py DESTINATION - 2 exfil (custom-c2) (values recorded in verified_iocs) EXFIL - Environment Variable Exfiltration in setup.py: "os.environ.get("JCX_ENVIRONMENT", ""))).encode() try: req = urllib" - Python File Upload to Remote in setup.py: "urllib.request.Request( BEACON_URL, data=" - Data Encoding for Exfiltration in setup.py: "base64.b64encode(" - Network Request in setup.py: "urllib.request.Request(" - System Information Collection in setup.py: "socket.gethostname()" - Suspicious Domain in setup.py: "http://137.131.233.62" ADDITIONAL FINDINGS - Shell Command Execution in setup.py: "subprocess.Popen(" - Setup.py Command Override in setup.py: "cmdclass={"install": BuildHook, "develop"" PAYLOAD FILES setup.py

Weaknesses (CWE)

CWE-506Embedded Malicious Code

Risk Scores

CVSS 3.1
9.6/10
Critical · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Affected Products

VendorProductVersionsPlatforms
unknownjourney-test-helloshellall (affected)—

References

advisory
vendor

Browse GCVE Records

854 records in the GCVE database · Updated October 30, 2026

No matching records found.

Explore Further

Investigate this vulnerability in the interactive console or download the raw GCVE record.

$ Console Community · 50/day Open console ›