Description
This vulnerability occurs when a JSON Web Token (JWT) implementation fails to properly validate the 'kid' (Key ID) header parameter, allowing attackers to exploit a path traversal flaw. By manipulating the 'kid' parameter with directory traversal sequences (e.g., '../../../'), attackers can force the application to use a predictable or attacker-controlled file as the signing key. This enables the creation of validly-signed JWT tokens with arbitrary payloads, completely bypassing the authentication mechanism.
Remediation
To remediate this vulnerability, implement the following security controls:
1. Validate and sanitize the 'kid' parameter:
- Implement strict allowlisting of permitted 'kid' values
- Reject any 'kid' values containing path traversal sequences (../, .\, etc.)
- Use a mapping table to translate 'kid' values to key locations rather than direct file paths
2. Example secure implementation:
// Instead of directly using kid for file paths
// VULNERABLE CODE:
const keyPath = `/keys/${kid}`;
const key = fs.readFileSync(keyPath);
// SECURE CODE:
const allowedKeys = {
'key-2024-01': '/secure/keys/2024-01.pem',
'key-2024-02': '/secure/keys/2024-02.pem'
};
if (!allowedKeys.hasOwnProperty(kid)) {
throw new Error('Invalid key identifier');
}
const key = fs.readFileSync(allowedKeys[kid]);3. Additional security measures:
- Store signing keys outside the web root directory
- Implement proper error handling that doesn't reveal file system information
- Use established JWT libraries with built-in security controls
- Consider using asymmetric keys (RS256) instead of symmetric keys (HS256) to prevent key confusion attacks
- Regularly rotate signing keys and maintain a secure key management process
References
Related Vulnerabilities
WordPress Plugin OAuth Single Sign On-SSO (OAuth Client) Security Bypass (6.22.5)
WordPress Plugin Swiss Toolkit For WP Security Bypass (1.0.8)
WordPress Plugin JupiterX Core Security Bypass (2.0.6)
WordPress Plugin SiteGround Security Security Bypass (1.2.4)
WordPress Plugin Accept Stripe Donation-AidWP Security Bypass (2.8)