{"id":"MAL-2026-18124","kind":"package","aliases":["MAL-2026-18124"],"related":[],"title":"Malicious code in journey-test-helloshell (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (0203fffc73ebe748d6defab0472b648408b29c959a9c6813f966df48cfafb21b)\nsetup.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.\n\n## Source: kam193 (bdf4549e34df1c1c7dfd704454011cf0a26ea5807948e917d7bc65f130182fc9)\nIn specific environments, package starts a reverse shell during installation.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-10-journey-test-helloshell\n\n\nReasons (based on the campaign):\n\n\n - The package contains code to create a reverse shell, allowing an attacker to execute any commands on the victim's machine.\n\n\n - The package overrides the install command in setup.py to execute malicious code during installation.\n\n\n - targetted-attack","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"journey-test-helloshell","fixed":[],"affected":"= 0.2.0","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-10-21T18:30:25+00:00","first_seen_at":"2026-10-26T20:52:00+00:00","triaged_at":"2026-10-26T20:59:55+00:00","updated_at":"2026-10-26T21:05:48+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-10':176C '-18124':11A,14A '-2026':10A,13A '/bin/bash':64C '/dev/null':111C '/tmp/.jcx_channel.done':132C '0203fffc73ebe748d6defab0472b648408b29c959a9c6813f966df48cfafb21b':34C '137.131.233.62':59C,98C '2026':175C '443/shell-beacon':99C '60':120C '8080':60C 'access':75C 'allow':195C 'also':45C 'amazon':32C 'amazon-inspector':31C 'attack':197C,223C 'backdoor':125C 'bare':56C,144C 'bare-ip':55C 'base':182C 'bdf4549e34df1c1c7dfd704454011cf0a26ea5807948e917d7bc65f130182fc9':153C 'beyond':126C 'bridg':62C 'call':106C 'campaign':167C,174C,185C 'categori':164C 'channel':140C 'clear':169C 'cmdclass':41C 'code':2A,86C,189C,218C 'command':40C,201C,212C 'connect':51C 'contain':188C 'coordin':138C 'creat':191C 'custom':38C 'destin':141C 'detail':23C 'domain':150C 'doubl':104C 'double-fork':103C 'edit':26C 'endpoint':58C 'enter':113C 'environ':93C,156C 'execut':199C,216C 'file':134C 'fire':46C 'fork':105C 'give':70C 'guard':133C 'hardcod':54C 'helloshel':7A,180C 'helloshell':18A 'hook':43C,102C 'host':80C,88C 'hostnam':90C 'http':96C 'identifi':89C 'import':49C 'infinit':115C 'infosteal':173C 'inspector':33C 'instal':39C,42C,78C,101C,129C,163C,211C,220C 'intent':171C 'interact':73C 'ip':57C,145C 'jcx':92C 'journey':5A,16A,178C 'journey-test-helloshel':4A,177C 'journey-test-helloshell':15A 'kam193':152C 'like':172C 'line':29C 'loop':117C 'machin':206C 'mal':9A,12A 'malici':1A,19B,165C,170C,217C 'modul':48C 'open':82C 'oper':72C 'overrid':209C 'packag':20B,157C,187C,208C 'per':21C 'persist':123C 'pip':128C 'plaintext':95C 'post':87C 'process':130C 'publish':149C 'pypi':8A 'reason':181C 'reconnect':116C 'redirect':108C 'regist':36C 'revers':160C,193C 'second':121C 'setsid':107C 'setup.py':35C,214C 'shell':74C,84C,161C,194C 'sleep':122C 'socket':69C 'sourc':22C,30C,151C 'specif':155C 'start':158C 'stdio':109C 'subprocess':66C 'target':222C 'targetted-attack':221C 'test':6A,17A,179C 'uid':91C 'unrel':146C 'use':136C 'victim':204C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-21T18:30:25+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-18124","url":"https://osv.dev/vulnerability/MAL-2026-18124","severity":"critical","published_at":"2026-10-21T18:30:25+00:00","modified_at":"2026-10-21T22:45:05+00:00","first_seen_at":"2026-10-26T20:52:00+00:00","fetched_at":"2026-10-26T20:52:00+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}