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

glass-of-waterPyPI

Malicious code in glass-of-water (PyPI) Remove it immediately and rotate any exposed credentials.

MAL-2026-4751
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
pip uninstall glass-of-water

What this malware does

glass_of_water/init.py embeds 10 Google Gemini API keys (AIzaSy...) split across 5-part dictionaries and reassembled at runtime by _get_api_key() (L6-19). The split-and-reassemble pattern is a deliberate evasion of registry/secret scanners. The exported water(prompt,...) function unconditionally instantiates genai.Client(api_key=api_key) and calls client.models.generate_content(model='gemini-flash-latest', contents=system_instruction + prompt) (L36-41) — there is no env-var override or opt-in path for caller-supplied credentials. Two installer-relevant harms result: (1) live third-party credentials are redistributed to every installer, who can extract and abuse them against Google's Gemini API; (2) any caller of water() silently routes their prompt content to a Google project owned by the author, where it is billed and logged under the author's account. Author metadata is placeholder (Your Name <[email protected]>) and the description is generic, consistent with a low-effort publish rather than a maintained utility.

Malicious versions

2 flagged
1.0.11.0.3

Indicators of compromise (SHA-256)

1af67dc68557257c7479e62a238fffaee75fc8620ce6b91e4b37f7bb04837111
df79336313f71fac8158ff6f3e0160d0e99a8d1d84c452505fd3739af5838a69

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 glass-of-water (2 malicious versions). O3 Security's supply-chain scanner checks every dependency against known-malicious package intelligence at install time and in CI, flagging glass-of-water across your stack and pipelines.

  2. If you installed it — respond

    glass-of-water 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 glass-of-water 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 glass-of-water 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. glass-of-water on PyPI has been identified as a malicious package (versions 1.0.1, 1.0.3 flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-003283IN-MAL-2026-003282

References

Credits

  • Amazon Inspector · finder

Detect & block this

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

glass-of-water (PyPI) malicious package — MAL-2026-4751 | O3 Security