Security and limitations
How to report a vulnerability, which versions get fixes, the defaults that protect a deployment and how to harden it, and the limits the project states openly.
On this page
Reporting a vulnerability
Please do not open a public issue. Use GitHub’s private Report a vulnerability ↗ form on the server repository. Helpful to include: the affected version or commit, the configuration involved, steps or packets to reproduce, and what an attacker gains.
You get an answer within 7 days and an assessment with a plan for a fix within 30. The fix is released before the advisory is published; the disclosure date is agreed with you, and you are credited unless you prefer otherwise.
Supported versions
Until the first release, fixes go to main and the edge image. After it, the latest release receives security
fixes.
In scope and out of scope
In scope: anything that bypasses authentication or authorization, forges or replays accepted packets, reads or changes accounting records or the replicated state, loses acknowledged records, crashes or stalls a gateway or a member with crafted input, reaches the management API without its token, or recovers secrets or passwords.
Out of scope: weaknesses of the RADIUS protocols themselves — the MD5-based authenticators and attribute hiding, DES in MS-CHAP, the MILENAGE functions of EAP-AKA — which radiusward implements as specified and mitigates as below; findings that need a NAS shared secret, a management token or access to the hosts; floods from addresses the NAS registry accepts, which gateways shed rather than queue.
Secure defaults and hardening
| Area | Default | Advice |
|---|---|---|
| Message-Authenticator | required on Access-Requests (always with EAP); answers of home servers without it are ignored — the Blast-RADIUS mitigation | relax only for a NAS that cannot send it |
| Transport | RADIUS over UDP relies on the shared secret | long random secrets, one per NAS; UDP RADIUS on trusted networks only; RadSec (TLS) or DTLS where devices support it |
Management port (/health, /ready, /state, /metrics, the CoA and reload APIs) |
bound to 127.0.0.1; the APIs exist only with a token of at least 16 characters |
keep it on the monitoring network; never expose it |
| Secrets | properties may read them from the environment (${env:NAS_SECRET}) |
keep secrets out of files and images; on Kubernetes the chart takes them from Secrets |
| Stored passwords | every common format is verified; weak legacy hashes are accepted for migration | prefer yescrypt, bcrypt, SHA-crypt or PBKDF2; cleartext and NT hashes only where CHAP or MS-CHAP require them |
| Rejects | held back one second | slows password guessing without blocking a worker |
| Input | malformed or unauthentic packets are dropped silently; the decoder is fuzz-tested | — |
| Images | non-root, with an SBOM and build provenance | pin the version you evaluated |
Known limitations
Stated so that nobody has to discover them:
- No independent security audit has been done. Evidence comes from the project’s own tests.
- No device certifications. Interoperability is tested against software implementations (
eapol_test,radsecproxy, Samba AD, another RADIUS server), not against named NAS hardware or firmware. - Active Directory over Netlogon is tested against Samba AD only, not yet against a Windows domain controller.
- EAP-SIM/AKA use local SIM keys: subscribers are store entries with their keys, which suits a private network that holds them. There is no integration with an operator’s subscriber platform (HSS/HLR), and only the Milenage algorithms are implemented.
- Vendor packet fixtures are synthetic. The bundled dictionaries decode the attributes; representative packets captured from devices are still wanted.
- Durability is claimed for Linux, where fsync reaches the disk; macOS does not flush the drive cache.
- No commercial support exists yet.
The full policy, with the response times and scope above: SECURITY.md ↗.