Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
The product uses a Pseudo-Random Number Generator (PRNG) in a security context, but the PRNG's algorithm is not cryptographically strong.
When a non-cryptographic PRNG is used in a security context (such as generating session tokens or cryptographic keys), an attacker may be able to predict its output and compromise the security mechanism.
如何修复此漏洞
基于 4 条 Shoulder 检测规则的 Weak PRNG 预防策略。
Use crypto/rand instead of math/rand for security-sensitive values
- import "math/rand" - - func generateToken() string { - token := make([]byte, 32) - rand.Read(token) - return hex.EncodeToString(token) + import "crypto/rand" + + func generateToken() (string, error) { + token := make([]byte, 32) + if _, err := rand.Read(token); err != nil { + return "", err + } + return hex.EncodeToString(token), nil }
Use crypto.randomBytes() or crypto.randomUUID() for security-sensitive random values
- const token = Math.random().toString(36).substring(2); + const crypto = require('crypto'); + const token = crypto.randomBytes(32).toString('hex');
Use the secrets module for tokens, passwords, and all security-sensitive randomness
- import random - - def generate_token(): - token = random.randint(100000, 999999) - return str(token) + import secrets + + def generate_token(): + return secrets.token_urlsafe(32)
Use the secrets module instead of random for security-sensitive operations
- import random - - def generate_token(): - chars = 'abcdef0123456789' - return ''.join(random.choice(chars) for _ in range(32)) + import secrets + + def generate_token(): + return secrets.token_hex(32)
关键实践
- Use of Math
查找代码中的漏洞
使用Shoulder扫描代码中的Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)模式。 4 规则.
# Scan with Shoulder CLI npx @shoulderdev/cli trust --cwe=338 # Or scan entire project npx @shoulderdev/cli trust .
检测规则 (4)
代码审查中需要关注的内容
这些模式表明潜在的Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)漏洞。在代码审查和安全审计中注意查找。
扫描你的代码库: Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
Shoulder CLI 在整个代码库中找到易受攻击的模式。