Seeding routine uses a predictable seed making the output predictable
This defect occurs when you use standard random number generator functions with a nonconstant
but predictable seed. Examples of predictable seed generators are
time, gettimeofday, and
getpid.
The checker detects this issue with the following random number generator functions:
C Standard Library functions such as srand,
srandom and initstate
C++ Standard Library functions such as
std::linear_congruential_engine<>::seed() and
std::mersenne_twister_engine<>::seed() (and also
the constructors of these class templates)
When you use predictable seed values for random number generation, your random numbers are also predictable. A hacker can disrupt your program if they know how your program behaves.
You can use a different function to generate less predictable seeds.
You can also use a different random number generator that does
not require a seed. For example, the Windows® API function rand_s seeds
itself by default. It uses information from the entire system, for
example, system time, thread ids, system counter, and memory clusters.
This information is more random and a user cannot access this information.
Some standard random routines are inherently cryptographically weak, and should not be used for security purposes.
| Group: Security |
| Language: C | C++ |
| Default: Off |
Command-Line Syntax: RAND_SEED_PREDICTABLE |
| Impact: Medium |
| CWE ID: 330, 337 |
Deterministic random output from constant seed | Unsafe standard encryption function | Vulnerable pseudo-random number generator