{"id":"MAL-2026-16242","kind":"package","aliases":["MAL-2026-16242"],"related":[],"title":"Malicious code in trongappy (PyPI)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (145727605bb141edc0fa9697253b211a1b0e467db2a484a2cedd163bcc6df1b7)\nThe package exposes a single public function `perm(private_key)` that POSTs its `private_key` argument as JSON to the hardcoded URL https://reda-sequestered-justine.ngrok-free.dev/tron and then queries a `/switcher` endpoint on the same host. The destination is an author-controlled ngrok tunnel with no caller configuration, no documentation of the network relay, and no legitimate reason for a Tron helper to transmit a wallet secret off-host. Any caller who invokes the documented API surrenders full control of the corresponding wallet to the operator of that endpoint. Package metadata further indicates a throwaway publish: `setup.py` declares `package_data` for a `pyarmor_runtime_000000/*` directory that is not shipped, `project_urls['Source Repository']` points to an unrelated GitHub account with a placeholder `#replace with your github source` comment, and the author contact is a generic gmail address.\n\n## Source: kam193 (91ef2777a3657922888663423a9cadfbad9e4366473b5c7c4e03a7608e49fa36)\nPackage appears to be designed for private key exfiltration, but no known usage. The name appears to be related to the cryptocurrency TRX (Tron / Tronix). Some packages additionally clone the readme of other, legit libraries. The similar packages are repeating uploaded to PyPI\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2025-04-tronix\n\n\nReasons (based on the campaign):\n\n\n - exfiltration-generic\n\n\n - crypto-related","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"trongappy","fixed":[],"affected":"= 0.0.1","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-09-16T19:09:57+00:00","first_seen_at":"2026-10-26T20:51:57+00:00","triaged_at":"2026-10-26T21:10:31+00:00","updated_at":"2026-10-26T21:10:31+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-04':226C '-16242':8A,11A '-2026':7A,10A '/switcher':58C '/tron':53C '000000':134C '145727605bb141edc0fa9697253b211a1b0e467db2a484a2cedd163bcc6df1b7':28C '2025':225C '91ef2777a3657922888663423a9cadfbad9e4366473b5c7c4e03a7608e49fa36':170C 'account':149C 'addit':198C 'address':167C 'amazon':26C 'amazon-inspector':25C 'api':105C 'appear':172C,186C 'argument':44C 'author':69C,161C 'author-control':68C 'base':229C 'caller':75C,100C 'campaign':217C,224C,232C 'categori':214C 'clear':219C 'clone':199C 'code':2A 'comment':158C 'configur':76C 'contact':162C 'control':70C,108C 'correspond':111C 'crypto':237C 'crypto-rel':236C 'cryptocurr':192C 'data':129C 'declar':127C 'design':175C 'destin':65C 'detail':17C 'directori':135C 'document':78C,104C 'edit':20C 'endpoint':59C,118C 'exfiltr':179C,234C 'exfiltration-gener':233C 'expos':31C 'full':107C 'function':35C 'generic':165C,235C 'github':148C,156C 'gmail':166C 'hardcod':49C 'helper':90C 'host':63C,98C 'indic':122C 'infosteal':223C 'inspector':27C 'intent':221C 'invok':102C 'json':46C 'kam193':169C 'key':38C,43C,178C 'known':182C 'legit':204C 'legitim':85C 'librari':205C 'like':222C 'line':23C 'mal':6A,9A 'malici':1A,13B,215C,220C 'metadata':120C 'name':185C 'network':81C 'ngrok':71C 'off-host':96C 'oper':115C 'packag':14B,30C,119C,128C,171C,197C,208C 'per':15C 'perm':36C 'placehold':152C 'point':144C 'post':40C 'privat':37C,42C,177C 'project':140C 'public':34C 'publish':125C 'pyarmor':132C 'pypi':5A,213C 'queri':56C 'readm':201C 'reason':86C,228C 'reda-sequestered-justine.ngrok-free.dev':52C 'reda-sequestered-justine.ngrok-free.dev/tron':51C 'relat':189C,238C 'relay':82C 'repeat':210C 'replac':153C 'repositori':143C 'runtim':133C 'secret':95C 'setup.py':126C 'ship':139C 'similar':207C 'singl':33C 'sourc':16C,24C,142C,157C,168C 'surrend':106C 'throwaway':124C 'transmit':92C 'tron':89C,194C 'trongappi':4A 'trongappy':12A 'tronix':195C,227C 'trx':193C 'tunnel':72C 'unrel':147C 'upload':211C 'url':50C,141C 'usag':183C 'wallet':94C,112C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-09-16T19:09:57+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-16242","url":"https://osv.dev/vulnerability/MAL-2026-16242","severity":"critical","published_at":"2026-09-16T19:09:57+00:00","modified_at":"2026-09-17T14:30:05+00:00","first_seen_at":"2026-10-26T20:51:57+00:00","fetched_at":"2026-10-26T20:51:57+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"}