# Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG) (CWE-338) The product uses a Pseudo-Random Number Generator (PRNG) in a security context, but the PRNG's algorithm is not cryptographically strong. **Stack:** Go - Prevalence: Wysoka Często wykorzystywana - Impact: Wysoki 2 reguł o wysokim poziomie - Prevention: Udokumentowane 4 przykładów poprawek **OWASP:** Cryptographic Failures (A02:2021-Cryptographic Failures) - #2 ## Description 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. ## Prevention Strategie zapobiegania dla Weak PRNG oparte na 1 regułach detekcji Shoulder. ### Go Use crypto/rand instead of math/rand for security-sensitive values ## Warning Signs - [HIGH] math/rand used for security-sensitive random values ## Consequences - Obejście mechanizmu ochrony - Uzyskanie uprawnień ## Mitigations - Stosuj kryptograficznie bezpieczne generatory liczb losowych (CSPRNG) - W JavaScript używaj crypto.getRandomValues() lub crypto.randomUUID() - W Pythonie korzystaj z modułu secrets zamiast random ## Detection - Total rules: 4 - Languages: go, javascript, typescript, python ## Rules by Language ### Go (1 rules) - **Weak Random Number Generation for Security** [HIGH]: Uses math/rand for security tokens, keys, or session IDs instead of crypto/rand. - Remediation: Use crypto/rand for all security-sensitive random values. ```go import "crypto/rand" token := make([]byte, 32) if _, err := rand.Read(token); err != nil { return err } ``` Learn more: https://shoulder.dev/learn/go/cwe-338/weak-random