In cloud security, the concept of "toxic combinations" has taken center stage, thanks to the pioneering work of Wiz Security. These arise when multiple issues interact in unintended ways, creating opportunities for attackers to exploit.However, while the security industry focuses on scrutinizing infrastructure-level toxic combinations, a whole new set of threats is brewing in the shadows of the Software Development Lifecycle (SDLC): “toxic interactions”. These threats exploit the complex interplay of human and machine developer activities, misconfigurations in tools such as Source Code Management platforms (like GitHub and GitLab), and a wide range of vulnerabilities in proprietary and open-source code.The recent EmeraldWhale breach highlights the consequences and nuance of these threats. Attackers didn’t brute-force their way into a production application. Instead, they exploited a combination of SDLC weaknesses: excessive developer permissions, exposed GitHub configurations, and hardcoded credentials. It was like leaving the blueprints, the keys, and the alarm codes all in plain sight. The result? Over 15,000 stolen cloud service credentials and a compromised development pipeline.The problem is that traditional approaches to addressing toxic combinations in cloud security often focus narrowly on standalone misconfigurations, but this is just one piece of the puzzle. Combined with access controls, developer entitlements, developer activity, and code vulnerabilities, they create larger, more complex threats within the SDLC that organizations can no longer afford to overlook. Recognizing unique toxic combinations is important, but describing and addressing them as toxic interactions offers a clearer, more effective way for organizations to achieve true SDLC security and governance.These are not just theoretical threats; they’re the reality of today’s sophisticated attacks. Addressing them requires a deeper understanding of how risks emerge within the SDLC.
The rise of “toxic interactions” in the SDLC
Toxic interactions start with an identity—this could be an internal or external developer, a service account, or even a third-party application. When an overly entitled developer identity engages in risky activities by leveraging misconfigurations to introduce code vulnerabilities, it creates a chain of risks that can quickly escalate into threats, jeopardizing the entire SDLC.Here are just a few examples of these interactions:- The "Ghost in the Machine" Combo: An inactive user account with excessive permissions is a prime target for credential theft. Pair this with unrestricted access to critical repositories, and a malicious actor can wreak havoc.
- The "Wolf in Sheep's Clothing" Combo: A developer bypasses branch protection rules and exhibits suspicious commit activity, such as large code dumps, late-night commits or changes to sensitive files, potentially injecting malicious code.
- The "False Approver" Combo: A pull request from an unknown source gets approved by someone with no prior commit history, potentially allowing an attacker to slip malicious code into your project.
- The "Open Door" Combo: A repository grants unrestricted direct access to everyone, coupled with pull requests approved by users with no prior commit history, creating a backdoor for malicious code.
- The "Insider Threat" Combo: An identity bypasses branch protection rules and combines this with suspicious commit activity, potentially indicating an insider threat attempting to compromise the codebase.