CWE-327 in APIs
- CWE ID
- CWE-327
- Category
- Encryption
- Severity
- HIGH
- Short Name
- Broken Crypto
What is CWE-327: Use of a Broken or Risky Cryptographic Algorithm
CWE-327 identifies the use of cryptographic algorithms that are either broken or considered too weak for secure applications. This weakness occurs when developers use encryption, hashing, or other cryptographic functions that have known vulnerabilities or insufficient strength to protect sensitive data.
The weakness manifests when developers choose algorithms like MD5 or SHA-1 for hashing, or use outdated encryption standards like DES or RC4. These algorithms have known collision vulnerabilities, brute-force weaknesses, or other cryptographic flaws that make them unsuitable for protecting sensitive information in modern applications.
According to the CWE description: 'The use of a broken or risky cryptographic algorithm is an unnecessary risk that may result in the exposure of sensitive information.' This weakness is particularly dangerous because the use of weak cryptography can provide a false sense of security while actually leaving data vulnerable to attacks.
CWE-327 in API Contexts
In API development, CWE-327 appears in several critical contexts. Authentication systems often use weak hashing algorithms for password storage, making it easier for attackers to crack user credentials. API tokens and session identifiers may be generated using predictable or weak algorithms, allowing session hijacking or token forgery.
API endpoints frequently transmit sensitive data like authentication credentials, personal information, or financial details. When these transmissions use weak encryption or hashing, the data becomes vulnerable to interception and decryption. For example, an API using SHA-1 for password hashing or MD5 for token generation creates significant security risks.
API documentation and specifications may inadvertently reveal the use of weak cryptographic algorithms, providing attackers with information about potential vulnerabilities. Additionally, third-party API integrations might use outdated cryptographic standards, creating supply chain security risks.
Common API scenarios include: password reset tokens using weak hashing, API key generation with predictable algorithms, JWT tokens using deprecated signing algorithms, and TLS configurations that allow weak cipher suites. Each of these represents a CWE-327 vulnerability that could compromise the entire API ecosystem.
Detection
Detecting CWE-327 requires both static code analysis and dynamic testing. Code reviews should examine cryptographic library usage, algorithm selection, and key management practices. Look for imports of deprecated cryptographic modules, hard-coded keys, or use of algorithms known to be weak.
Dynamic scanning tools can identify weak cryptography in running APIs. middleBrick performs comprehensive cryptographic analysis as part of its 12 security checks, specifically testing for weak encryption algorithms, deprecated hashing functions, and insecure key management practices. The scanner examines API responses, headers, and payloads for indicators of weak cryptography.
middleBrick's black-box scanning approach tests the unauthenticated attack surface, identifying cryptographic weaknesses without requiring access to source code. The scanner checks for common weak algorithms like MD5, SHA-1, DES, RC4, and other deprecated cryptographic functions. It also verifies that TLS configurations use strong cipher suites and that JWT tokens use secure signing algorithms.
Key detection areas include: authentication mechanisms (password hashing, token generation), data transmission (TLS configuration, encryption algorithms), data storage (database encryption, file encryption), and API integrations (third-party cryptographic implementations). middleBrick provides a security risk score (A–F) that includes cryptographic strength as a key component of the overall assessment.
Remediation
Fixing CWE-327 requires replacing weak cryptographic algorithms with modern, secure alternatives. For password hashing, replace MD5 or SHA-1 with bcrypt, Argon2, or PBKDF2 with appropriate work factors. These algorithms are specifically designed for password hashing with built-in salting and configurable computational cost.
# Weak - DO NOT USE
import hashlib
password_hash = hashlib.md5(password.encode()).hexdigest()
# Strong - USE THIS
import bcrypt
password_hash = bcrypt.hashpw(password.encode(), bcrypt.gensalt(12))
For data encryption, use AES-256-GCM or ChaCha20-Poly1305 instead of DES or RC4. These modern algorithms provide strong encryption with authentication. For key exchange and digital signatures, use RSA-2048+ with OAEP padding or elliptic curve algorithms like ECDSA with P-256 or higher curves.
API token generation should use cryptographically secure random number generators (CSPRNGs) and avoid predictable patterns. JWT tokens should use RS256 or ES256 signing algorithms rather than HS256 with weak secrets. TLS configurations should disable weak cipher suites and enforce minimum protocol versions (TLS 1.2+).
// Weak - DO NOT USE
const crypto = require('crypto');
const token = crypto.randomBytes(16).toString('hex'); // Only 128 bits
// Strong - USE THIS
const token = crypto.randomBytes(32).toString('hex'); // 256 bits, CSPRNG
const jwt = require('jsonwebtoken');
jwt.sign(payload, privateKey, { algorithm: 'RS256' });
Regular security audits should verify that cryptographic implementations remain current with security best practices. Monitor NIST and other standards organizations for deprecated algorithms and update implementations accordingly. Implement automated testing to ensure new code doesn't reintroduce weak cryptography.