{"id":"GHSA-fw6v-88vw-pqr3","kind":"package","aliases":["GHSA-fw6v-88vw-pqr3","MAL-2026-16053"],"related":[],"title":"Malicious code in file-type-detector (npm)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (04917bd7fc156dcb9793cb1f1d06ed0f2d0cb1b3aa4b04431dea54ed71f6be72)\nA clone of file-type-checker with one function added: isSign(name, moduleName, offset) in dist/validation/image.js reads public/${name}.png from the working directory, splits the buffer at -offset, and writes the trailing payload to../../../{moduleName}/log - a sibling package under node_modules - then returns isPNG() so the caller sees a plausible boolean. It is undocumented, reachable only via an __exportStar wildcard so it is never named in dist/index.js, and fails silently on try/catch.\n\nDrop stage of a three-package chain: file-type-detector writes the payload, gloggo (1.1.2-1.1.4) executes it via require('./log'), and sonmors (typosquat of sonner) triggers the chain by requiring gloggo. gloggo shares the npm publisher log-developer and was published five minutes apart on 2026-08-27. No install hooks; execution occurs on require().\n\n## Source: ghsa-malware (cf4b330143b17fd8c5b2c9b3ea655e4d8ab79266aa54faefc66369c49343d020)\nAny computer that has this package installed or running should be considered fully compromised. All secrets and keys stored on that computer should be rotated immediately from a different computer. The package should be removed, but as full control of the computer may have been given to an outside entity, there is no guarantee that removing the package will remove all malicious software resulting from installing it.","summary":null,"severity":"critical","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"file-type-detector","note":"all versions","fixed":[],"affected":"","ecosystem":"npm"}],"ecosystems":["npm"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-09-09T00:27:12+00:00","first_seen_at":"2026-11-11T17:28:37+00:00","triaged_at":"2026-11-11T17:30:36+00:00","updated_at":"2026-11-11T17:30:36+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-08':168C '-16053':16A '-2026':15A '-27':169C '../../..':78C '/log':80C,140C '04917bd7fc156dcb9793cb1f1d06ed0f2d0cb1b3aa4b04431dea54ed71f6be72':41C '1.1.2':134C '1.1.4':135C '2026':167C '88vw':12A,20A 'add':52C 'amazon':39C 'amazon-inspector':38C 'apart':165C 'boolean':96C 'buffer':69C 'caller':92C 'cf4b330143b17fd8c5b2c9b3ea655e4d8ab79266aa54faefc66369c49343d020':181C 'chain':125C,148C 'checker':48C 'clone':43C 'code':2A 'compromis':195C 'comput':183C,203C,211C,223C 'consid':193C 'control':220C 'detail':30C 'detector':7A,25A,129C 'develop':159C 'differ':210C 'directori':66C 'dist/index.js':112C 'dist/validation/image.js':58C 'drop':118C 'edit':33C 'entiti':231C 'execut':136C,173C 'exportstar':104C 'fail':114C 'file':5A,23A,46C,127C 'file-type-check':45C 'file-type-detector':4A,22A,126C 'five':163C 'full':219C 'fulli':194C 'function':51C 'fw6v':11A,19A 'ghsa':10A,18A,179C 'ghsa-fw6v-88vw-pqr3':9A,17A 'ghsa-malwar':178C 'given':227C 'gloggo':133C,151C,152C 'guarante':235C 'hook':172C 'immedi':207C 'inspector':40C 'instal':171C,188C,247C 'ispng':89C 'issign':53C 'key':199C 'line':36C 'log':158C 'log-develop':157C 'mal':14A 'malici':1A,26B,243C 'malwar':180C 'may':224C 'minut':164C 'modul':86C 'modulenam':55C,79C 'name':54C,61C,110C 'never':109C 'node':85C 'npm':8A,155C 'occur':174C 'offset':56C,71C 'one':50C 'outsid':230C 'packag':27B,83C,124C,187C,213C,239C 'payload':76C,132C 'per':28C 'plausibl':95C 'png':62C 'pqr3':13A,21A 'public':60C 'publish':156C,162C 'reachabl':100C 'read':59C 'remov':216C,237C,241C 'requir':139C,150C,176C 'result':245C 'return':88C 'rotat':206C 'run':190C 'secret':197C 'see':93C 'share':153C 'sibl':82C 'silent':115C 'softwar':244C 'sonmor':142C 'sonner':145C 'sourc':29C,37C,177C 'split':67C 'stage':119C 'store':200C 'three':123C 'three-packag':122C 'trail':75C 'trigger':146C 'try/catch':117C 'type':6A,24A,47C,128C 'typosquat':143C 'undocu':99C 'via':102C,138C 'wildcard':105C 'work':65C 'write':73C,130C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"fix_status":null,"audience":null,"plain_action":null,"pkeys":["filetypedetector"],"ptokens":["detector","file","type"],"labels":["critical","malicious","npm","package"],"campaign_type":null,"search_a":"'-16053':16A '-2026':15A '88vw':12A,20A 'code':2A 'detector':7A,25A 'file':5A,23A 'file-type-detector':4A,22A 'fw6v':11A,19A 'ghsa':10A,18A 'ghsa-fw6v-88vw-pqr3':9A,17A 'mal':14A 'malici':1A 'npm':8A 'pqr3':13A,21A 'type':6A,24A","search_b":"'malici':26B 'packag':27B","search_c":"'-08':168C '-27':169C '../../..':78C '/log':80C,140C '04917bd7fc156dcb9793cb1f1d06ed0f2d0cb1b3aa4b04431dea54ed71f6be72':41C '1.1.2':134C '1.1.4':135C '2026':167C 'add':52C 'amazon':39C 'amazon-inspector':38C 'apart':165C 'boolean':96C 'buffer':69C 'caller':92C 'cf4b330143b17fd8c5b2c9b3ea655e4d8ab79266aa54faefc66369c49343d020':181C 'chain':125C,148C 'checker':48C 'clone':43C 'compromis':195C 'comput':183C,203C,211C,223C 'consid':193C 'control':220C 'detail':30C 'detector':129C 'develop':159C 'differ':210C 'directori':66C 'dist/index.js':112C 'dist/validation/image.js':58C 'drop':118C 'edit':33C 'entiti':231C 'execut':136C,173C 'exportstar':104C 'fail':114C 'file':46C,127C 'file-type-check':45C 'file-type-detector':126C 'five':163C 'full':219C 'fulli':194C 'function':51C 'ghsa':179C 'ghsa-malwar':178C 'given':227C 'gloggo':133C,151C,152C 'guarante':235C 'hook':172C 'immedi':207C 'inspector':40C 'instal':171C,188C,247C 'ispng':89C 'issign':53C 'key':199C 'line':36C 'log':158C 'log-develop':157C 'malici':243C 'malwar':180C 'may':224C 'minut':164C 'modul':86C 'modulenam':55C,79C 'name':54C,61C,110C 'never':109C 'node':85C 'npm':155C 'occur':174C 'offset':56C,71C 'one':50C 'outsid':230C 'packag':83C,124C,187C,213C,239C 'payload':76C,132C 'per':28C 'plausibl':95C 'png':62C 'public':60C 'publish':156C,162C 'reachabl':100C 'read':59C 'remov':216C,237C,241C 'requir':139C,150C,176C 'result':245C 'return':88C 'rotat':206C 'run':190C 'secret':197C 'see':93C 'share':153C 'sibl':82C 'silent':115C 'softwar':244C 'sonmor':142C 'sonner':145C 'sourc':29C,37C,177C 'split':67C 'stage':119C 'store':200C 'three':123C 'three-packag':122C 'trail':75C 'trigger':146C 'try/catch':117C 'type':47C,128C 'typosquat':143C 'undocu':99C 'via':102C,138C 'wildcard':105C 'work':65C 'write':73C,130C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-09-09T00:27:12+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-16053","url":"https://osv.dev/vulnerability/MAL-2026-16053","severity":"critical","published_at":"2026-09-09T00:27:12+00:00","modified_at":"2026-11-11T16:31:43+00:00","first_seen_at":"2026-11-11T17:28:37+00:00","fetched_at":"2026-11-11T17:28:37+00:00","note":null}],"documents":[],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}