# CVE-2026-54887: DTLS server cookie bypass during startup window due to empty initial cookie secret

Status: published. Published: 2026-07-02. Updated: 2026-11-11.

Use of Default Cryptographic Key vulnerability in Erlang/OTP ssl (DTLS server) allows predictable DTLS cookie computation during the startup window, enabling source address verification bypass.

On DTLS server startup, dtls_server_connection:initial_hello/3 initializes previous_cookie_secret to the empty binary (<<>>) instead of a random value. Because HMAC with an empty key is deterministic, anyone who observes the plaintext ClientHello can compute dtls_handshake:cookie(<<>>, IP, Port, Hello) and forge a valid DTLS cookie before the first rotation of the cookie secret. The DTLS cookie (RFC 6347 §4.2.1) is a denial-of-service mitigation that prevents spoofed source IPs from forcing the server to allocate state and perform expensive cryptographic operations; it is not an authentication mechanism. During the window from server startup until the first secret rotation (0 to 15 seconds), an attacker who can observe the plaintext ClientHello can bypass the source address verification, enabling DTLS handshake amplification with spoofed source addresses.

This vulnerability is associated with program file lib/ssl/src/dtls_server_connection.erl and program routine dtls_server_connection:initial_hello/3.

This issue affects OTP from OTP 20.0 before OTP 27.3.4.14, OTP 28.5.0.3, and OTP 29.0.3, corresponding to ssl from 8.2 before 11.2.12.10, 11.6.0.3, and 11.7.3.

## Remediation

- fix: The reporting source identifies this reference as a patch. Check the advisory for affected versions and supported release branches. (source: CNA: EEF) — https://github.com/erlang/otp/commit/888e3bcd72d5406016b9e0de741026bc2a6f114d

## Affected products and versions

- Erlang / OTP (otp): ≥ 20.0; < * (affected, otp); unaffected at 27.3.4.14; unaffected at 28.5.0.3; unaffected at 29.0.3. Source: CNA: EEF
- Erlang / OTP (ssl): ≥ 8.2; < * (affected, otp); unaffected at 11.2.12.10; unaffected at 11.6.0.3; unaffected at 11.7.3. Source: CNA: EEF
- Erlang / OTP (erlang/otp): ≥ e594aad2f87aab39e99fccf9e021bc94e0bbf7d4; < 888e3bcd72d5406016b9e0de741026bc2a6f114d (affected, git). Source: CNA: EEF

## Severity and prioritization

- CVSS 4.0: 6.3 (medium); CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N; source: CNA: EEF

- CISA KEV: No listing in collected sources

- EPSS: 0.24% as of 2026-11-10; percentile 15.62%

- SSVC: exploitation none; automatable no; technical impact partial; source ADP: CISA-ADP

- Weaknesses: CWE-1394

## Exploit evidence

No exploit evidence in collected sources. This is not proof of no exploitation.

## References

- https://github.com/erlang/otp/security/advisories/GHSA-p2m2-3c2w-8jp8 (CNA: EEF; vendor-advisory, related)

- https://cna.erlef.org/cves/CVE-2026-54887.html (CNA: EEF; related)

- https://osv.dev/vulnerability/EEF-CVE-2026-54887 (CNA: EEF; related)

- https://www.erlang.org/doc/system/versions.html#order-of-versions (CNA: EEF; x_version-scheme)

- https://github.com/erlang/otp/commit/e594aad2f87aab39e99fccf9e021bc94e0bbf7d4 (CNA: EEF; related)

- https://github.com/erlang/otp/commit/888e3bcd72d5406016b9e0de741026bc2a6f114d (CNA: EEF; patch)

## Provenance

- CNA: EEF: https://www.cve.org/CVERecord?id=CVE-2026-54887; retrieved 2026-11-11; source updated 2026-11-11

- FIRST EPSS: https://api.first.org/data/v1/epss?cve=CVE-2026-54887; retrieved 2026-11-11; source updated Not reported

Revision: a6c5ff4bc1ec1f0d361d35c4a549345558deedf7f7482078eecc87258f2e9fb6

Canonical: https://y2.dev/cve/CVE-2026-54887

## Agent and API access

Public CVE pages, Markdown, and JSON are free to read without an account or API key.

- Public catalog: https://y2.dev/cve/index.json. Follow nextCursor with the same search, filters, sort, and limit (1–100). A null cursor marks the end.

- WebMCP: search_cve_disclosures, get_cve_disclosure, get_cve_page_markdown, get_y2_cve_access. Available in compatible browsers.

- Cyber API: https://api.y2.dev/api/v2/cyber/cves and https://api.y2.dev/api/v2/cyber/cves/{cveId}.

- Y2 Pro or Elite: create a workspace API key with the intel:cyber scope and send Authorization: Bearer <Y2_API_KEY>. Setup: https://y2.dev/docs/api/create-key.

- x402: Pay per request without an account or API key. Omit Authorization, read the HTTP 402 PAYMENT-REQUIRED challenge, validate its current requirements, and retry with PAYMENT-SIGNATURE through an authorized payment client. These browser tools never make payments. Guide: https://y2.dev/docs/api/x402.

- OpenAPI: https://y2.dev/api/openapi.yaml. Agent access metadata: https://y2.dev/cve/agent.json.

Collected public records only. Check source status for coverage and freshness.