Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
Malicious package

ggk-happynpm

ggk-happy is a confirmed malicious npm package (MAL-2026-4789) that steals credentials and exfiltrates sensitive data (malicious versions 1.0.9, 1.2.0, 1.2.12…). Do not install it — remove it immediately and rotate any exposed credentials.

Malicious code in ggk-happy (npm)

MAL-2026-4789
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
npm uninstall ggk-happy

What this malware does

Package presents itself as the legitimate slopus/happy CLI (README instructs npm install -g happy; homepage, repository, bugs, and author fields all point at happy.engineering / github.com/slopus/happy), but the published name is ggk-happy and the shipped code has been modified in ways that harm installers:

  1. Backend redirection: DEFAULT_SERVER_URL is hardcoded to https://happy-api.ask-ggk.com and DEFAULT_WEBAPP_URL to https://happy.ask-ggk.com — third-party hosts not disclosed in the README, which still references api.cluster-fluster.com. All coding-agent sessions (Claude Code / Codex prompts, source code, auth tokens, machine metadata) flow to ask-ggk.com instead of the publisher advertised in package metadata.

  2. Remote-control surface pointed at attacker infrastructure: ApiSessionClient / ApiMachineClient open a socket.io connection to the redirected server and register RPC handlers named bash, readFile, writeFile, listDirectory, getDirectoryTree, ripgrep, difftastic. The bash handler runs execAsync(data.command, options) on parameters supplied by the remote server. Whoever operates happy-api.ask-ggk.com can execute arbitrary shell commands and read/write files on the installer's machine.

  3. Install-time auto-takeover: scripts/postinstall.cjs, on global or root install, unconditionally spawns node bin/happy.mjs install, running the full auth/registration flow (browser opened to happy.ask-ggk.com, machine registered to happy-api.ask-ggk.com, daemon started) at npm install -g time. Auto-takeover is opt-out via env var, not opt-in, so sudo npm install -g ggk-happy immediately binds the machine to the third-party backend, with elevated privileges on Linux/macOS root installs.

  4. Unpinned binary dropper: RTK_DOWNLOAD_URLS fetches platform-specific rtk binaries from https://minio.ask-ggk.com/happy/rtk-*.{zip,tar.gz} (win32/darwin/linux, x64/arm64) with no hash or signature verification, stages them to ~/.local/share/ggkhappy/rtk/bin/rtk (or %LOCALAPPDATA%\ggkhappy\rtk\bin\rtk.exe), and later invokes them via execFile. Purpose of the binary is not documented.

  5. Covert identity reporting: readRtkIdentity() reads the installer's machineId from ~/.happy settings and the auth token from ~/.happy/access.key and POSTs them, together with platform/version fields, to https://guguke.ask-ggk.com/api/v1/agent/rtk/gain/report — a side channel to a host not referenced in README documentation.

This is not a legitimate fork: the surface identity (name, homepage, repo, README install command) still claims to be slopus/happy, while all backends, the remote-shell RPC destination, the runtime binary source, and the identity reporter have been repointed to ask-ggk.com infrastructure. Installers who follow the README believe they are installing the upstream project and instead grant an undisclosed operator remote code execution over their machine and full visibility into their AI coding sessions.

Malicious versions

12 flagged
1.0.91.2.01.2.121.2.201.2.221.2.241.2.281.2.301.2.321.2.331.2.341.2.43

Indicators of compromise (SHA-256)

01759f2a020bbf9172f916322b93b5b8bdd3d01ddc2b3130af73763709ec723c
da23474ba170aa6d3b5bea2c2e8ebbc59be022caec4b612528dd644891e31379
2100cce0806532b2cd0d4d94e26b50d2ce769b18c9d5baa28609f3b73b34c500
2a22c29c3d374a49fdb69fb941f2fb81e42b69006b8ed154eba8d365c755b245
667e02b68cd88196d2c42798c03d0470c213cf37212ee5158a1d73750d2b358b
c8481d1ce0252a2b05bc1e11282050aa8754d2dd24ddf51215361edbc6b0cef5
8cb5826da59bc61db01dbe0b71bf00c1932a6a6bc79293f1879a8fdb64d0dabb
97ef437e04b12cf0bd32eb41630ccebdbc727814212f3c0add12619d59ac7fef
cf0e8198b84dd9df37c352c939343660948d17ce31b3384c41723355ba62a7e9
d747cc7acd8bbc1defbf475aa3202fd332fd43135a6fedddfcc37356ce02eb54
ec02faf45c54c3f61e7e76ffa930c4c8b857549bfaf926068a1d4e98511ac8a4
20275cf82cf180bdcedd07fe3cacef619d3ca1defaeec4a5394d3f1c7040a2eb
2620a8d259e7aed95ac5db9903446f1a6d1dbb1eda2e231161a1072eb3dccbd5
6f1158fe29b2785476527d307a4d8f18d9df499b1367854168254f8c2fe59e42
f5a77378a670c49dacce164d0641478d74ac59f24550fa6dbab806f2420b6de9

Detection & response playbook

Credential / info stealer
  1. Find it

    Scan your lockfiles (package-lock.json, pnpm-lock.yaml, yarn.lock, requirements.txt, poetry.lock, etc.) and build artifacts for ggk-happy (12 malicious versions). O3 Security's supply-chain scanner checks every dependency against known-malicious package intelligence at install time and in CI, flagging ggk-happy across your stack and pipelines.

  2. If you installed it — respond

    ggk-happy is built to steal secrets, so assume every credential the build or runtime could read is compromised. Remove it from your project and lockfile, then rotate ALL exposed secrets — npm/registry tokens, cloud keys, CI/CD secrets, SSH keys, and any .env values — from a known-clean machine. Audit logs for unauthorized use of those credentials.

  3. Did it already run?

    If ggk-happy was ever installed, its post-install/runtime payload may have already executed. O3's L7 egress monitoring and runtime eBPF sensors detect the credential exfiltration or command-and-control callback after install and block the malicious outbound channel, so you catch and contain the actual compromise — not just the presence of the package.

  4. How O3 protects you

    O3 blocks ggk-happy before install through its supply-chain scanner, and if it has already run, detects and severs the exfiltration or C2 callback at runtime through L7 egress monitoring and eBPF.

Frequently asked questions

No. ggk-happy on npm has been identified as a malicious package (versions 1.0.9, 1.2.0, 1.2.12, 1.2.20, 1.2.22, 1.2.24, 1.2.28, 1.2.30, and 4 more flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-004879IN-MAL-2026-004878IN-MAL-2026-006091IN-MAL-2026-006090IN-MAL-2026-006088IN-MAL-2026-006089IN-MAL-2026-009681IN-MAL-2026-009678IN-MAL-2026-009680IN-MAL-2026-009679IN-MAL-2026-009677IN-MAL-2026-009682IN-MAL-2026-009676IN-MAL-2026-009675IN-MAL-2026-010617

References

Credits

  • Amazon Inspector · finder

Detect & block this

O3 blocks ggk-happy-class packages before install and in CI — and if it already ran, its runtime egress monitoring catches the credential exfiltration and severs the channel.

Explore

ggk-happy (npm) malicious package — MAL-2026-4789 | O3 Security