{"items":[{"id":"NVI-00012295","kind":"supply_chain_event","title":"Malicious code in @tink/tink-link-core (npm)","revision":1,"unknowns":["Customer inventory, deployment, reachability and exploitation have not been inspected."],"lifecycle":"active","identifiers":["GHSA-hvcc-qwg6-972c"],"plain_summary":"GitHub lists this malware advisory for @tink/tink-link-core. Published version ranges and source prerequisites are shown below; this is not an inspection of a visitor’s application.","review_status":"source_listed","control_topics":[],"public_actions":[{"summary":"Identify the exact component and deployed version, examine the linked publisher’s conditions, and retain evidence of any mitigation.","source_ids":["sr-1bcc3aa3e9eed05ccbf052a2b264cfec"],"action_type":"investigate","limitations":"Confirm current vendor support, compatibility and deployment evidence. This report has not tested a fix in your system.","current_supported_target":null}],"schema_version":"1.1.0","source_metrics":[],"why_it_matters":"Published affected context helps an owner decide what evidence to gather. This report has not examined your application.","related_sources":[{"id":"sr-1bcc3aa3e9eed05ccbf052a2b264cfec","url":"https://github.com/advisories/GHSA-hvcc-qwg6-972c","basis":"vendor_advisory","notes":"GitHub Advisory Database; CC-BY-4.0. Each advisory links its original attribution. Null normalizes fields.","title":"GHSA-hvcc-qwg6-972c","publisher":"GitHub Advisory Database","observed_at":"2026-11-01T00:59:39.394Z"}],"affected_context":[{"certainty":"source_listed","source_ids":["sr-1bcc3aa3e9eed05ccbf052a2b264cfec"],"technology":"@tink/tink-link-core","known_exclusions":[],"conditions_summary":"## Source: amazon-inspector (826e81131e7b2a296324d469c10f1e44d5b33683703c8a2e0f101a8674c1cfcf)\nThe package impersonates the Tink open-banking SDK (name @tink/tink-link-core, description 'Enterprise-grade client core for open banking', homepage github.com/tink-link/core) but its actual behavior is host reconnaissance and DNS exfiltration. The package.json install script runs `node index.js`, and both the install entry and main entry load lib/core.js, which reads os.userInfo().username, os.hostname(), and process.cwd(), joins them with a prefix and a hardcoded domain as DNS labels, and issues a dns.resolve4() lookup. The destination hostname and module/API names are reconstructed at runtime from hex byte arrays via Buffer.from(...).toString('utf8') in lib/b02e30.js and lib/6ad264.js — the decoded domain is oob.algamil7x.xyz and the label prefix is tinkcore. Module names 'os','dns','process' and API names 'userInfo','hostname','cwd','resolve4' are loaded via module.constructor._load with hex-decoded strings to hide them from static review. DNS-based egress bypasses HTTP proxy and firewall controls. The beacon fires automatically on `npm install` (via the install lifecycle script) and ","public_affected_ranges":["= 9.9.10"]}],"null_published_at":"2026-11-01T01:45:40.754Z","source_updated_at":"2026-09-18T00:31:20.000Z","source_disclosed_at":"2026-09-18T00:31:11.000Z","is_synthetic_fixture":false,"null_last_reviewed_at":null,"public_change_summary":"First indexed by Null; source disclosure date is shown separately.","null_first_observed_at":"2026-11-01T00:59:39.394Z"}],"next_cursor":null,"snapshot_revision":"42594"}