{"id":"GHSA-fwf6-6x3c-6g3h","kind":"package","aliases":["GHSA-fwf6-6x3c-6g3h","MAL-2026-10398"],"related":[],"title":"Malicious code in @db-tools/main-app (npm)","description":"---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (2d3b0edc39a389f4099895c647f0cdccbb08c85e56835670468e7a989b172e9f)\npackage.json declares a preinstall hook `npm install @sentry/node && node examples/verify.js` that fires on every `npm install`. examples/verify.js calls the library's init() with no DSN, which falls back to a hardcoded DEFAULT_DSN in src/index.js (`https://...@o4511652642947072.ingest.de.sentry.io/4511652667785296`). verify.js then invokes setUserFromPublicIp() which fetches the installer's public egress IP from `https://www.cloudflare.com/cdn-cgi/trace`, attaches it as Sentry user context, throws a synthetic exception, and flushes it to the author-controlled Sentry project. The installer has no opportunity to configure or opt out — the data flow is unconditional and non-consensual on `npm install`. Separately, the exported init() API uses the same hardcoded DEFAULT_DSN as its final fallback (after options.dsn and process.env.SENTRY_DSN) and sets `sendDefaultPii: true`, so any consumer that uses the library without explicitly supplying a DSN silently routes their application's exceptions and PII to the same author-owned Sentry project, with no disclosure in the README.\n\n## Source: ghsa-malware (79f993a27a836eca13e83c295f9b823240e5bc9fd3b0256004320137fe10ec06)\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":"@db-tools/main-app","fixed":[],"affected":"all versions","ecosystem":"npm"}],"ecosystems":["npm"],"tags":["malicious","package"],"not_affected_if":[],"how_to_check":null,"fix":null,"status":"open","published_at":"2026-07-13T05:14:59+00:00","first_seen_at":"2026-11-05T23:15:54+00:00","triaged_at":"2026-11-05T23:17:35+00:00","updated_at":"2026-11-05T23:17:35+00:00","category":"package","confidence":null,"triage":null,"analyst_status":null,"analyst_note":null,"search":"'-10398':16A '-2026':15A '/4511652667785296':79C '/cdn-cgi/trace':95C '/main-app':7A,25A '2d3b0edc39a389f4099895c647f0cdccbb08c85e56835670468e7a989b172e9f':41C '6g3h':13A,21A '6x3c':12A,20A '79f993a27a836eca13e83c295f9b823240e5bc9fd3b0256004320137fe10ec06':200C 'amazon':39C 'amazon-inspector':38C 'api':142C 'applic':177C 'attach':96C 'author':112C,186C 'author-control':111C 'author-own':185C 'back':69C 'call':59C 'code':2A 'compromis':214C 'comput':202C,222C,230C,242C 'configur':122C 'consensu':134C 'consid':212C 'consum':164C 'context':101C 'control':113C,239C 'data':127C 'db':5A,23A 'db-tool':4A 'db-tools':22A 'declar':43C 'default':73C,147C 'detail':30C 'differ':229C 'disclosur':192C 'dsn':66C,74C,148C,157C,173C 'edit':33C 'egress':90C 'entiti':250C 'everi':55C 'examples/verify.js':51C,58C 'except':105C,179C 'explicit':170C 'export':140C 'fall':68C 'fallback':152C 'fetch':85C 'final':151C 'fire':53C 'flow':128C 'flush':107C 'full':238C 'fulli':213C 'fwf6':11A,19A 'ghsa':10A,18A,198C 'ghsa-fwf6-6x3c-6g3h':9A,17A 'ghsa-malwar':197C 'given':246C 'guarante':254C 'hardcod':72C,146C 'hook':46C 'immedi':226C 'init':63C,141C 'inspector':40C 'instal':48C,57C,87C,117C,137C,207C,266C 'invok':82C 'ip':91C 'key':218C 'librari':61C,168C 'line':36C 'mal':14A 'malici':1A,26B,262C 'malwar':199C 'may':243C 'node':50C 'non':133C 'non-consensu':132C 'npm':8A,47C,56C,136C 'o4511652642947072.ingest.de.sentry.io':78C 'o4511652642947072.ingest.de.sentry.io/4511652667785296':77C 'opportun':120C 'opt':124C 'options.dsn':154C 'outsid':249C 'own':187C 'packag':27B,206C,232C,258C 'package.json':42C 'per':28C 'pii':181C 'preinstal':45C 'process.env.sentry':156C 'project':115C,189C 'public':89C 'readm':195C 'remov':235C,256C,260C 'result':264C 'rotat':225C 'rout':175C 'run':209C 'secret':216C 'senddefaultpii':160C 'sentri':99C,114C,188C 'sentry/node':49C 'separ':138C 'set':159C 'setuserfrompublicip':83C 'silent':174C 'softwar':263C 'sourc':29C,37C,196C 'src/index.js':76C 'store':219C 'suppli':171C 'synthet':104C 'throw':102C 'tool':6A 'tools':24A 'true':161C 'uncondit':130C 'use':143C,166C 'user':100C 'verify.js':80C 'without':169C 'www.cloudflare.com':94C 'www.cloudflare.com/cdn-cgi/trace':93C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"fix_status":null,"audience":null,"plain_action":null,"pkeys":["mainapp"],"ptokens":["app","db","main","tools"],"labels":["critical","malicious","npm","package"],"campaign_type":null,"first_public_at":"2026-07-13T05:14:59+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"osv-malicious","external_id":"MAL-2026-10398","url":"https://osv.dev/vulnerability/MAL-2026-10398","severity":"critical","published_at":"2026-07-13T05:14:59+00:00","modified_at":"2026-11-05T22:30:04+00:00","first_seen_at":"2026-11-05T23:15:54+00:00","fetched_at":"2026-11-05T23:15:54+00:00","note":null}],"documents":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}