Overview
This vulnerability occurs when an application stores passwords or other secrets (like API keys, database credentials) directly within the source code or in easily accessible configuration files. These secrets are then often committed to version control systems (like Git), making them visible to anyone with access to the repository, potentially including attackers. 🔑Business Impact
Hard-coded credentials provide a direct path for attackers to compromise systems. If a database password is hard-coded and the code is leaked (e.g., via a public repository), attackers can gain full access to the database. Leaked API keys can lead to abuse of third-party services, resulting in high costs or data breaches.Reference Details
CWE ID: CWE-259
OWASP Top 10 (2021): A02:2021 - Cryptographic Failures (often related to key management)
Severity: High
Framework-Specific Analysis and Remediation
This vulnerability is framework-agnostic but extremely common. It’s purely a developer practice issue. The fix involves externalizing secrets:- Remove the hard-coded secret from the code/config file.
- Store the secret securely using environment variables, a dedicated secrets management service (like HashiCorp Vault, AWS Secrets Manager, Azure Key Vault), or encrypted configuration files.
- Load the secret into the application at runtime.
- Python
- Java
- .NET(C#)
- PHP
- Node.js
- Ruby
Framework Context
Hard-coding credentials directly insettings.py or within application code.Vulnerable Scenario 1: Database Password in Code
Vulnerable Scenario 2: API Key in Code Logic
Mitigation and Best Practices
Use environment variables (os.environ.get()) or a library like python-dotenv to load secrets from a .env file (which should not be committed to Git). For production, use environment variables provided by the deployment platform or a secrets manager.Secure Code Example
Testing Strategy
Use automated secret scanning tools (like Codepure’s Secret Scanning!) in your CI/CD pipeline and pre-commit hooks. Manually review configuration files (settings.py, .yaml, .json) and code for hard-coded strings that look like passwords or keys. Check your Git history for accidentally committed secrets.
