# CVE-2026-107685: WebSocket sessions do not verify TLS certificates, exposing API keys and OAuth tokens to on-path attackers

Status: published. Published: 2026-10-23. Updated: 2026-11-02.

Improper Certificate Validation vulnerability in the WebSocket streaming client in agentjido req_llm allows an on-path attacker to read and modify OpenAI WebSocket sessions, including the authorization bearer token, via a TLS certificate the client does not trust. ReqLLM.Streaming.WebSocketSession.Client.start/3 in lib/req_llm/streaming/web_socket_session/client.ex starts WebSockex without TLS options, and WebSockex defaults to insecure: true, which connects with verify: :verify_none. The option allowlist also drops any caller-supplied cacerts or ssl_options, so an application cannot turn verification on.

The OpenAI Responses, Realtime, and Codex WebSocket paths reach this client and send the API key or OAuth access token in the authorization header. HTTP streaming through Finch and the HTTP/2 duplex session through Mint verify certificates and are not affected.

This issue affects req_llm: from 1.9.0 before 1.29.0.

## Remediation

- workaround: Leave the openai_stream_transport provider option at its default :sse for the OpenAI and OpenAI Codex providers, and do not call ReqLLM.Providers.OpenAI.WebSocket.start_responses_session/2 directly. Responses streaming then runs over HTTP through Finch, which verifies certificates. ReqLLM.OpenAI.Realtime.connect/2 has no HTTP alternative, so do not use it on an affected version. (source: CNA: EEF)
- 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/agentjido/req_llm/commit/c7264fc0217fbacfb5562234ff790b8e4462de76

## Affected products and versions

- agentjido / req_llm (req_llm): ≥ 1.9.0; < 1.29.0 (affected, semver). Source: CNA: EEF
- agentjido / req_llm (agentjido/req_llm): ≥ a389d718640ceb2d541a8f540ab954cbf5ef8313; < c7264fc0217fbacfb5562234ff790b8e4462de76 (affected, git). Source: CNA: EEF

## Severity and prioritization

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

- CVSS 4.0: 9.1 (critical); CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X; source: NVD: 6b3ad84c-e1a6-4bf7-a703-f496b71e49db

- CISA KEV: No listing in collected sources

- EPSS: 0.27% as of 2026-11-02; percentile 19.75%

- SSVC: exploitation poc; automatable no; technical impact total; source ADP: CISA-ADP

- Weaknesses: CWE-295

## Exploit evidence

- exploit: https://github.com/agentjido/req_llm/security/advisories/GHSA-6vww-5m28-f26v (ADP: CISA-ADP)

## References

- https://github.com/agentjido/req_llm/security/advisories/GHSA-6vww-5m28-f26v (CNA: EEF; vendor-advisory, related)

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

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

- https://github.com/agentjido/req_llm/commit/a389d718640ceb2d541a8f540ab954cbf5ef8313 (CNA: EEF; related)

- https://github.com/agentjido/req_llm/commit/c7264fc0217fbacfb5562234ff790b8e4462de76 (CNA: EEF; patch)

- https://github.com/agentjido/req_llm/security/advisories/GHSA-6vww-5m28-f26v (ADP: CISA-ADP; exploit)

- https://cna.erlef.org/cves/CVE-2026-107685.html (6b3ad84c-e1a6-4bf7-a703-f496b71e49db)

- https://github.com/agentjido/req_llm/commit/a389d718640ceb2d541a8f540ab954cbf5ef8313 (6b3ad84c-e1a6-4bf7-a703-f496b71e49db)

- https://github.com/agentjido/req_llm/commit/c7264fc0217fbacfb5562234ff790b8e4462de76 (6b3ad84c-e1a6-4bf7-a703-f496b71e49db)

- https://github.com/agentjido/req_llm/security/advisories/GHSA-6vww-5m28-f26v (6b3ad84c-e1a6-4bf7-a703-f496b71e49db)

- https://osv.dev/vulnerability/EEF-CVE-2026-107685 (6b3ad84c-e1a6-4bf7-a703-f496b71e49db)

- https://github.com/agentjido/req_llm/security/advisories/GHSA-6vww-5m28-f26v (134c704f-9b21-4f2e-91b3-4a467353bcc0)

## Provenance

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

- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-107685; retrieved 2026-11-02; source updated 2026-11-02

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

Revision: d4a949f50e84cd82ac7b0f358c48b6629d1e969221e6975cd49c23c4791e02e7

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

## 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.