☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-23419

CVE-2025-23419 Authentication Bypass in Nginx
📅 PUBLISHED: 2025-02-05 17:31 UTC 🔄 UPDATED: 2026-09-23 20:35 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: CONFIRMED — 3+ independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 2.79%
👁️
2.79% probability
69.9× above the median CVE
Tier: HIGH
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
4.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-23419 is a medium-severity vulnerability in Nginx that allows an attacker to bypass client certificate authentication when multiple server blocks share the same IP address and port. The flaw leverages TLS session resumption mechanisms—specifically TLS Session Tickets and/or the SSL session cache—to reuse a previously authenticated session from a default server that enforces client certificate authentication, thereby gaining unauthorized access to other virtual hosts on the same listener. With a CVSS score of 4.3, the attack requires no privileges and no user interaction, but it is limited in scope to authentication bypass without direct data exfiltration. No public exploit code or patch details are currently available, and the EPSS score is 0.0%, indicating low exploitation likelihood at this time.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability is not related to a package manager (NPM, PyPI, Go, Ruby) but affects the Nginx web server binary itself. Organizations using Nginx as a reverse proxy or TLS termination point should assess their configurations for shared IP/port server blocks with mixed authentication requirements.

CVSS Breakdown & Threat Level

  • Attack Vector (AV): Network (N) – Exploitable remotely over the network.
  • Attack Complexity (AC): Low (L) – No special conditions required; session resumption is a standard TLS feature.
  • Privileges Required (PR): None (N) – No authentication needed to initiate the attack.
  • User Interaction (UI): None (N) – No victim action required.
  • Scope (S): Unchanged (U) – The vulnerable component and the impacted component are the same.
  • Confidentiality (C): Low (L) – Limited information disclosure (access to resources meant for authenticated clients).
  • Integrity (I): None (N) – No data modification.
  • Availability (A): None (N) – No denial of service.

Threat Level: Medium. The attack is straightforward but requires specific configuration (shared IP/port with default server enforcing client cert auth). No active exploitation observed.

Deep Dive & Mechanics

The vulnerability resides in how Nginx handles TLS session resumption across multiple server blocks listening on the same IP:port pair. When a client connects to the default server (which requires client certificate authentication), the TLS session is established and optionally cached via session tickets or the session cache. If the client then resumes that session (using the session ID or ticket) to a different server block on the same listener, Nginx may incorrectly reuse the authenticated state from the default server, bypassing the client certificate requirement for the second server block.

Root Cause: Nginx does not properly isolate TLS session state per server block when multiple virtual hosts share the same listener. The session cache and ticket keys are global to the listener, not scoped to individual server blocks.

Attack Flow:

  1. Attacker connects to the default server block (which requires client cert auth) and completes the TLS handshake with a valid client certificate.
  2. Attacker obtains the session ticket or session ID from the server.
  3. Attacker initiates a new TLS connection to a different server block on the same IP:port, presenting the saved session ticket/ID.
  4. Nginx resumes the session, inheriting the authentication state from the default server, granting access without re-requesting the client certificate.

Vulnerable vs. Patched Code

No official patch has been released. The vulnerable configuration involves:

# Vulnerable configuration
server {
    listen 443 ssl default_server;
    ssl_client_certificate /etc/nginx/client-ca.crt;
    ssl_verify_client on;
    # ...
}

server {
    listen 443 ssl;
    # No ssl_verify_client directive – inherits authentication from default server via session resumption
    # ...
}

A potential mitigation (not a patch) would be to enforce client certificate verification on all server blocks sharing the same listener, or to use separate IP:port pairs for different authentication requirements.

Exploitation & Lab Setup

Red Team

Lab Setup:

  • Nginx 1.24.0 with two server blocks on 0.0.0.0:443.
  • Default server requires client cert; second server does not.
  • TLS session cache enabled (ssl_session_cache shared:SSL:10m).

Exploitation Steps:

  1. Obtain a valid client certificate (e.g., from a compromised endpoint or self-signed if the CA is trusted).
  2. Connect to the default server and complete TLS handshake with client cert.
  3. Extract the session ticket from the server's NewSessionTicket message.
  4. Reconnect to the second server block using the same session ticket.
  5. Observe that the server does not request a client certificate and grants access.

Proof-of-Concept (Python with ssl and socket):

import socket
import ssl

def exploit(host, port, session_ticket):
    context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
    context.load_cert_chain(certfile="client.crt", keyfile="client.key")
    context.set_session_id(session_ticket)  # Simplified; actual session ticket handling is more complex
    sock = socket.create_connection((host, port))
    ssock = context.wrap_socket(sock, server_hostname=host)
    # Send HTTP request to the second server block
    ssock.sendall(b"GET /protected HTTP/1.1\r\nHost: second-server.example.com\r\n\r\n")
    response = ssock.recv(4096)
    print(response)
    ssock.close()

Blue Team

Detection:

  • Monitor for TLS session resumption across different SNI hostnames on the same IP:port.
  • Alert on successful connections to server blocks that do not require client cert but where the session was originally established with a client cert.

Hunting Query (ELK/Kibana):

source.ip: <attacker_ip> AND tls.handshake.type: "session_resumption" AND tls.server_name: "second-server.example.com"

Indicators of Compromise (IOCs)

  • Network: TLS session tickets reused across different SNI hostnames on the same IP:port.
  • Logs: Nginx access logs showing requests to server blocks without client cert verification, preceded by a session resumption handshake.
  • Session Cache: Unusual session IDs appearing in multiple server block contexts.

Detection Engineering

YARA Rule

rule CVE_2025_23419_Session_Resumption {
    meta:
        description = "Detects TLS session resumption across multiple server blocks in Nginx logs"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2025-23419"
    strings:
        $session_resume = "SSL session reused" nocase
        $client_cert = "client certificate" nocase
        $no_cert = "no client certificate" nocase
    condition:
        $session_resume and ($client_cert or $no_cert)
}

Sigma Rule

title: Nginx TLS Session Resumption Authentication Bypass
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects potential exploitation of CVE-2025-23419 via session resumption across server blocks
logsource:
    category: webserver
    product: nginx
detection:
    selection:
        - "SSL session reused"
        - "client certificate"
    condition: selection
falsepositives:
    - Legitimate session resumption within the same server block
level: medium

Suricata Rule

alert tls any any -> any 443 (msg:"CVE-2025-23419 - TLS Session Resumption Across Server Blocks"; flow:to_server; tls.handshake; content:"|16 03 03|"; depth:3; content:"|01|"; distance:0; within:1; content:"|00 00 00 00 00 00 00 00|"; distance:0; within:8; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Mitigations:

  1. Separate IP:port pairs for server blocks with different client certificate requirements.
  2. Disable session resumption on the default server if not needed: ssl_session_cache off; and ssl_session_ticket_key off;.
  3. Enforce client certificate verification on all server blocks sharing the same listener.

Long-term Fix:

  • Await an official Nginx patch that scopes TLS session state per server block.
  • Upgrade to a patched version once released.

Workaround Configuration:

server {
    listen 443 ssl default_server;
    ssl_client_certificate /etc/nginx/client-ca.crt;
    ssl_verify_client on;
    ssl_session_cache off;  # Disable session cache
    ssl_session_ticket_key off;  # Disable session tickets
    # ...
}

Valters IT
Senior DevSecOps & Cyber Threat Intelligence Analyst

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-23419/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.