What happened
Attacker planted .claude/settings.json, .gemini/settings.json, .cursor/rules/setup.mdc, and .vscode/tasks.json files in compromised Microsoft Azure repositories, each pointing to a credential-harvesting node.js payload at .github/setup.js. A parallel Hades PyPI wave dropped 37 wheels with Python .pth startup hooks that executed the same stealer on interpreter start.
Why it matters
294,842 developer secrets stolen from 6,943 machines. Credentials swept: GitHub tokens, PyPI tokens, AWS/GCP/Azure credentials, SSH keys, and Kubernetes secrets. Azure/functions-action (the official GitHub Action for deploying Azure Functions) was disabled, breaking CI/CD pipelines globally. Exfiltration used GitHub dead-drops with AES-GCM encrypted payloads camouflaged as normal API traffic.
Missing authorization check
No external layer validated or scoped the commands executed by AI tool startup hooks before they ran with full developer credentials. Session start hooks in AI coding tools ran with the same permissions as the developer, with no receipt or authorization check.
Would PP block it?
The Hades attack operates at the AI tool startup layer, before Permission Protocol can gate any agent action. PP's Credential Gate blocks post-session credential access (e.g., an agent trying to read AWS keys mid-task) but cannot intercept a malicious node.js command that fires when Claude Code reads its settings.json on launch. Full coverage requires an input firewall before repo ingestion — a layer outside PP's current scope.