Impact
Description of issue(s):
- When /dev/urandom or RtlGenRandom() are unavailable, c-ares uses rand() to generate random numbers used for DNS query ids. This is not a CSPRNG, and it is also not seeded by srand() so will generate predictable output.
- Input from the random number generator is fed into a non-compilant RC4 implementation and may not be as strong as the original RC4 implementation.
- No attempt is made to look for modern OS-provided CSPRNGs like arc4random() that is widely available.
Correction(s) made:
- Detect arc4random() and if available, use it directly to generate DNS query ids.
- Use /dev/urandom or RtlGenRandom() directly to generate DNS query ids as a fallback
- As a last resort, use the current rand() + RC4 logic (should only apply to esoteric systems), with these modifications:
- replace RC4 implementation with official algorithm
- seed rand() using srand()
Patches
Fixed in 1.19.1
Workarounds
No workarounds are available.
Credit
David Gstir and Hannes Moesl
X41 D-SEC GmbH
Audit funded by Open Source Technology Improvement Fund (OSTIF)
Impact
Description of issue(s):
Correction(s) made:
Patches
Fixed in 1.19.1
Workarounds
No workarounds are available.
Credit
David Gstir and Hannes Moesl
X41 D-SEC GmbH
Audit funded by Open Source Technology Improvement Fund (OSTIF)