Nathaniel McCallum reported that pyrad was using Python's random module in a number of places to generate pseudo-random data. In the case of the authenticator data, it was being used to secure a password sent over the wire. Because Python's random module is not really suited for this purpose (not random enough), it could lead to password hashing that may be predictable.
This has been corrected in upstream's forthcoming version 2.1 via:
https://github.com/wichert/pyrad/commit/38f74b36814ca5b1a27d9898141126af4953bee5
Nathaniel McCallum reported that pyrad was creating serialized RADIUS packet IDs in the CreateID() function in packet.py. This is not suitable for RADIUS as the RFC specifies that the ID must not be predictable. As a result, the ID of the next packet sent can be spoofed.
This has been corrected in upstream's forthcoming version 2.1 via:
https://github.com/wichert/pyrad/commit/38f74b36814ca5b1a27d9898141126af4953bee5