CVE-2025-69217
Coturn has unsafe nonce and relay port randomization due to weak random number generation.
coturn is a free open source implementation of TURN and STUN Server. Versions 4.6.2r5 through 4.7.0-r4 have a bad random number generator for nonces and port randomization after refactoring. Additionally, random numbers aren't generated with openssl's RAND_bytes but libc's random() (if it's not running on Windows). When fetching about 50 sequential nonces (i.e., through sending 50 unauthenticated allocations requests) it is possible to completely reconstruct the current state of the random number generator, thereby predicting the next nonce. This allows authentication while spoofing IPs. An attacker can send authenticated messages without ever receiving the responses, including the nonce (requires knowledge of the credentials, which is e.g., often the case in IoT settings). Since the port randomization is deterministic given the pseudorandom seed, an attacker can exactly reconstruct the ports and, hence predict the randomization of the ports. If an attacker allocates a relay port, they know the current port, and they are able to predict the next relay port (at least if it is not used before). Commit 11fc465f4bba70bb0ad8aae17d6c4a63a29917d9 contains a fix.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.7
Coturn has unsafe nonce and relay port randomization due to weak random number generation.
coturn is a free open source implementation of TURN and STUN Server. Versions 4.6.2r5 through 4.7.0-r4 have a bad random number generator for nonces and port randomization after refactoring. Additionally, random numbers aren't generated with openssl's RAND_bytes but libc's random() (if it's not running on Windows). When fetching about 50 sequential nonces (i.e., through sending 50 unauthenticated allocations requests) it is possible to completely reconstruct the current state of the random number generator, thereby predicting the next nonce. This allows authentication while spoofing IPs. An attacker can send authenticated messages without ever receiving the responses, including the nonce (requires knowledge of the credentials, which is e.g., often the case in IoT settings). Since the port randomization is deterministic given the pseudorandom seed, an attacker can exactly reconstruct the ports and, hence predict the randomization of the ports. If an attacker allocates a relay port, they know the current port, and they are able to predict the next relay port (at least if it is not used before). Commit 11fc465f4bba70bb0ad8aae17d6c4a63a29917d9 contains a fix.
- Record
CVE-2025-69217- CVSS 3.1
- 7.7 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H - Weakness
- CWE-338
- Updated
- 2026-11-02
EUVDEUVD-2025-205680
7.7
coturn is a free open source implementation of TURN and STUN Server. Versions 4.6.2r5 through 4.7.0-r4 have a bad random number generator for nonces and port randomization after refactoring. Additionally, random numbers aren't generated with openssl's RAND_bytes but libc's random() (if it's not running on Windows). When fetching about 50 sequential nonces (i.e., through sending 50 unauthenticated allocations requests) it is possible to completely reconstruct the current state of the random number generator, thereby predicting the next nonce. This allows authentication while spoofing IPs. An attacker can send authenticated messages without ever receiving the responses, including the nonce (requires knowledge of the credentials, which is e.g., often the case in IoT settings). Since the port randomization is deterministic given the pseudorandom seed, an attacker can exactly reconstruct the ports and, hence predict the randomization of the ports. If an attacker allocates a relay port, they know the current port, and they are able to predict the next relay port (at least if it is not used before). Commit 11fc465f4bba70bb0ad8aae17d6c4a63a29917d9 contains a fix.
- Record
EUVD-2025-205680- CVSS 3.1
- 7.7 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H - Updated
- 2026-11-02
NVD
7.7
coturn is a free open source implementation of TURN and STUN Server. Versions 4.6.2r5 through 4.7.0-r4 have a bad random number generator for nonces and port randomization after refactoring. Additionally, random numbers aren't generated with openssl's RAND_bytes but libc's random() (if it's not running on Windows). When fetching about 50 sequential nonces (i.e., through sending 50 unauthenticated allocations requests) it is possible to completely reconstruct the current state of the random number generator, thereby predicting the next nonce. This allows authentication while spoofing IPs. An attacker can send authenticated messages without ever receiving the responses, including the nonce (requires knowledge of the credentials, which is e.g., often the case in IoT settings). Since the port randomization is deterministic given the pseudorandom seed, an attacker can exactly reconstruct the ports and, hence predict the randomization of the ports. If an attacker allocates a relay port, they know the current port, and they are able to predict the next relay port (at least if it is not used before). Commit 11fc465f4bba70bb0ad8aae17d6c4a63a29917d9 contains a fix.
- Record
CVE-2025-69217- CVSS 3.1
- 7.7 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H - Weakness
- CWE-338
- Updated
- 2026-11-02
OSV
7.7
Coturn has unsafe nonce and relay port randomization due to weak random number generation.
coturn is a free open source implementation of TURN and STUN Server. Versions 4.6.2r5 through 4.7.0-r4 have a bad random number generator for nonces and port randomization after refactoring. Additionally, random numbers aren't generated with openssl's RAND_bytes but libc's random() (if it's not running on Windows). When fetching about 50 sequential nonces (i.e., through sending 50 unauthenticated allocations requests) it is possible to completely reconstruct the current state of the random number generator, thereby predicting the next nonce. This allows authentication while spoofing IPs. An attacker can send authenticated messages without ever receiving the responses, including the nonce (requires knowledge of the credentials, which is e.g., often the case in IoT settings). Since the port randomization is deterministic given the pseudorandom seed, an attacker can exactly reconstruct the ports and, hence predict the randomization of the ports. If an attacker allocates a relay port, they know the current port, and they are able to predict the next relay port (at least if it is not used before). Commit 11fc465f4bba70bb0ad8aae17d6c4a63a29917d9 contains a fix.
- Record
CVE-2025-69217- CVSS 3.1
- 7.7 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H - Weakness
- CWE-338
- Updated
- 2026-11-02
OSVUBUNTU-CVE-2025-69217
7.7
coturn is a free open source implementation of TURN and STUN Server. Versions 4.6.2r5 through 4.7.0-r4 have a bad random number generator for nonces and port randomization after refactoring. Additionally, random numbers aren't generated with openssl's RAND_bytes but libc's random() (if it's not running on Windows). When fetching about 50 sequential nonces (i.e., through sending 50 unauthenticated allocations requests) it is possible to completely reconstruct the current state of the random number generator, thereby predicting the next nonce. This allows authentication while spoofing IPs. An attacker can send authenticated messages without ever receiving the responses, including the nonce (requires knowledge of the credentials, which is e.g., often the case in IoT settings). Since the port randomization is deterministic given the pseudorandom seed, an attacker can exactly reconstruct the ports and, hence predict the randomization of the ports. If an attacker allocates a relay port, they know the current port, and they are able to predict the next relay port (at least if it is not used before). Commit 11fc465f4bba70bb0ad8aae17d6c4a63a29917d9 contains a fix.
- Record
UBUNTU-CVE-2025-69217- CVSS 3.1
- 7.7 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:N/A:H - Updated
- 2026-11-02
OSVopenSUSE-SU-2026:10375-1 No score
coturn-4.9.0-1.1 on GA media
These are all security issues fixed in the coturn-4.9.0-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:10375-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:21184-1 No score
Security update for coturn
This update for coturn fixes the following issues:
Changes in coturn:
-
Update to version 4.14.0 New
- No more dependency on prometheus-client-c
- HTTPS support for prometheus client (optional)
- TLS support for redis - now compatible with managed redis (optional).
- Rate limiting "401 Unauthorized" responses - reduces reflection attacks off the coturn server. This is an experimental feature - not fully tested on production scale deployment and massive DDoS attacks. New prometheus counters should help shed some light on real life behavior and performance. The feature is off by default. What's Changed
- validate hmackey length in sqlite_get_user_key before hex decode.
- Add out-of-tree patch to restore deprecated OpenSSL 1.1.1.
- Add optional TLS transport for Redis connections.
- Fix relay threads override.
- Flush prometheus hot-path counters once per second to kill lock contention.
- fix signed-char index out-of-bounds read in base64_decode.
- Build Prometheus exporter from vendored local sources.
- Prom https.
- Fix realm quota data race and warnings.
- Add per-source rate-limiting of UDP 401 Unauthorized responses
-
Update to version 4.13.1
- null-terminate server_name in stun_is_challenge_response_str.
- Canonicalize all IPv4-in-IPv6 encodings before peer-IP checks.
- Auto-deny coturn's own database backend endpoints as relay peers.
- Deny link-local / ULA / site-local relay peers by default.
-
Update to version 4.13.0
- Wrap atomic everywhere.
- Fix sendmmsg stride bug in multiplex-peer UDP batch flush.
- Reap TURN permissions/channels via a per-thread sweep instead of per-object timers.
- Add --udp-sendmmsg-log to observe egress sendmmsg/UDP-GSO batching.
- Expose recvmmsg/sendmmsg UDP batch sizes as Prometheus metrics
- Restrict recvmmsg fast path to shared fan-in sockets (make --udp-recvmmsg useful standalone).
- Enable --udp-recvmmsg by default on Linux.
- Security hardening: port parsing, admin brute-force throttle, credential log redaction, constant-time compare, OAuth bounds checks, permission cap (#1932).
- Add continuous latency mode to stunclient.
- Fix test_redis_format link failure.
- Fix configure MANPREFIX typo.
- Fix missing sqlite3 dependendcy.
- Fix UDP receive buffer ownership.
-
Update to version 4.12.0
- Update khash to the latest version (#1919).
- Update readme to match latest changes (#1920).
- Update docs for drop-invalid-packets and response-origin-only-with-rfc5780.
- Multiplexpeer (#1916).
- Fix TTL/TOS type conversion (#1915).
- turnutils_uclient: sender thread pool + UDP-GSO send batching + recv_pps reporting (#1913).
- Fix memory leak introduced by recvmmsg path (#1912).
- turnutils_uclient: multi-threaded listener (recv) pool.
- examples/turnserver.conf: update description of cli option.
- turnutils_uclient: Linux recvmmsg receive path + larger SO_RCVBUF (#1910).
- Add UDP-GSO send path (--udp-gso) (#1907).
- turnutils_peer: Linux fast path with drain loop, recvmmsg/sendmmsg, U… (#1908).
- Relay recvmmsg (#1906).
- fuzzing: use hex escapes for HTTP EOH dictionary entry.
- Sync turnserver man page with current CLI options (#1903).
- Remove stale --ne option from turnserver --help (#1904).
- Restore CodeQL permissions, category, and manual build mode.
-
Update to version 4.11.0
- Filc harness and pointer typedefs (#1896).
- Load generator mode in turnutils_uclient (#1894).
- Cache hot lookups in TURN data-path handlers (#1893).
- Inline get_ioa_addr_len() in the header (#1891).
- Trim two redundant checks from per-packet relay hot path.
- Hoist turn_server_get_engine() out of per-packet hot path.
- Add fuzz coverage for integrity helpers (#1888).
- Add deterministic challenge-response builder to FuzzStun.
- Seed address-mapping table in fuzz initializer (#1885).
- Unblock fuzz coverage for…
- Record
openSUSE-SU-2026:21184-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
coturnUbuntu:16.04:LTS |
All versions, plus listed versions 4.4.5.4-24.5.0.2-34.5.0.3-14.5.0.3-1build14.5.0.3-1ubuntu0.24.5.0.3-1ubuntu0.34.5.0.3-1ubuntu0.4 |
None known |
coturnUbuntu:18.04:LTS |
All versions, plus listed versions 4.5.0.6-1ubuntu24.5.0.7-1ubuntu14.5.0.7-1ubuntu24.5.0.7-1ubuntu2.18.04.14.5.0.7-1ubuntu2.18.04.24.5.0.7-1ubuntu2.18.04.3 |
None known |
coturnUbuntu:20.04:LTS |
All versions, plus listed versions 4.5.1.1-1.1build14.5.1.1-1.1build24.5.1.1-1.1ubuntu0.20.04.14.5.1.1-1.1ubuntu0.20.04.2 |
None known |
coturnUbuntu:22.04:LTS |
All versions, plus listed versions 4.5.2-34.5.2-3.1~ubuntu22.04.1 |
None known |
coturnUbuntu:24.04:LTS |
All versions, plus listed versions 4.6.1-1build14.6.1-1build24.6.1-1build34.6.1-1build4 |
None known |
coturnUbuntu:25.10 |
All versions, plus listed versions 4.6.1-2build1 |
None known |
coturnUbuntu:26.10 |
All versions, plus listed versions 4.6.1-2build24.12.0-14.14.0-14.15.0-14.18.0-1 |
None known |
coturnUbuntu:26.04:LTS |
All versions, plus listed versions 4.6.1-2build14.6.1-2build2 |
None known |
coturnopenSUSE:Tumbleweed From an advisory covering 2 CVEs |
before 4.9.0-1.1 | 4.9.0-1.1 |
coturnopenSUSE:Leap 16.0 From an advisory covering 2 CVEs |
before 4.14.0-bp160.1.1 | 4.14.0-bp160.1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2025-69217 is a high vulnerability (CVSS 7.7) in Coturn, published December 30, 2025. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.41%, the 35th percentile. No source names a fixed version.
References
github.com/coturn/coturn/security/advisories/GHSA-fvj6-9jhg-9j84
github.com/coturn/coturn/commit/11fc465f4bba70bb0ad8aae17d6c4a63a29917d9
github.com/coturn/coturn/commit/88ced471385869d7e7fbbc4766e78ef521b36af6
github.com/CVEProject/cvelistV5/tree/main/cves/2025/69xxx/CVE-2025-69217.json
nvd.nist.gov/vuln/detail/CVE-2025-69217
ubuntu.com/security/CVE-2025-69217
Left out here: the rest of 1 source description. The JSON record has them.