CVE-2023-52725
Executive Summary
CVE-2023-52725 is a denial-of-service (DoS) vulnerability in the Open Networking Foundation SD-RAN ONOS kpimon component, version 0.4.7. The flaw resides in the Start function of the monitoring package, where the errCh channel can be blocked, preventing error handling and leading to a hang or crash of the monitoring process. This can be exploited by an attacker with network access to the kpimon service to disrupt network monitoring and control in SD-RAN environments.
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 affects the onos-kpimon component, which is part of the SD-RAN ONOS project. The project is distributed as a Go binary and Docker image. No official patch has been released as of this analysis. Users should monitor the official ONOS repository for updates and consider building from source with a fix if available.
CVSS Breakdown & Threat Level
CVSS Score: 0.0 (No official CVSS vector assigned) Threat Level: Medium (based on impact and exploitability)
Rationale:
- Attack Vector (AV): Network (likely)
- Attack Complexity (AC): Low (simple channel blocking)
- Privileges Required (PR): None (unauthenticated network access)
- User Interaction (UI): None
- Scope (S): Unchanged
- Confidentiality (C): None
- Integrity (I): None
- Availability (A): High (DoS)
Deep Dive & Mechanics
The vulnerability exists in the Start function of the monitoring package within onos-kpimon. The function creates a channel errCh to receive errors from monitoring goroutines. If an attacker can cause a condition where the channel is never read (e.g., by sending a large number of requests that fill the channel buffer or by exploiting a race condition), the goroutine writing to the channel will block indefinitely. This blocks the entire Start function, preventing the monitoring service from processing further requests or handling errors, effectively causing a denial of service.
Root Cause: The errCh channel is unbuffered or has a small buffer, and the code does not implement a timeout or non-blocking send. If the receiver (the main loop) is busy or blocked, the sender goroutine hangs.
Attack Vector: An attacker sends a crafted sequence of requests to the kpimon service (e.g., via gRPC or REST API) that triggers an error condition in a monitoring goroutine. The goroutine attempts to send the error to errCh, but the main loop is not reading from the channel (e.g., due to a previous blocking operation or a race condition). This causes the goroutine to block, and subsequent operations stall.
Vulnerable vs. Patched Code
Vulnerable Code (0.4.7):
func (m *Monitor) Start() error {
errCh := make(chan error)
go func() {
// ... monitoring logic ...
if err != nil {
errCh <- err // Blocking send
}
}()
// Main loop
for {
select {
case err := <-errCh:
// handle error
default:
// other work
}
}
}
Patched Code (Hypothetical):
func (m *Monitor) Start() error {
errCh := make(chan error, 10) // Buffered channel
go func() {
// ... monitoring logic ...
if err != nil {
select {
case errCh <- err:
default:
// Log and drop error if channel full
log.Warn("Dropped error due to full channel")
}
}
}()
// Main loop with timeout
for {
select {
case err := <-errCh:
// handle error
case <-time.After(5 * time.Second):
// timeout to prevent blocking
}
}
}
Exploitation & Lab Setup
Red Team
Prerequisites:
- Access to the kpimon service (default port 5150 for gRPC)
- Ability to send gRPC requests
Exploit Steps:
- Identify the kpimon endpoint (e.g.,
10.0.0.1:5150). - Send a burst of requests that trigger errors (e.g., malformed monitoring configurations).
- The
errChchannel becomes blocked, causing theStartfunction to hang. - The monitoring service becomes unresponsive, disrupting SD-RAN operations.
Example gRPC request (using grpcurl):
grpcurl -plaintext -d '{"invalid_field": "test"}' 10.0.0.1:5150 onos.kpimon.Monitoring/Start
Blue Team
Detection:
- Monitor for sudden increase in gRPC errors from kpimon.
- Watch for goroutine leaks (increased memory usage).
- Alert on kpimon process hang or crash.
Mitigation:
- Apply rate limiting to the kpimon API.
- Use a reverse proxy with timeout settings.
- Implement a watchdog to restart the kpimon service if it becomes unresponsive.
Indicators of Compromise (IOCs)
- Network: Unusual gRPC traffic to port 5150 with malformed payloads.
- Process: kpimon process consuming 100% CPU or stuck in
Dstate (uninterruptible sleep). - Logs: Repeated error messages like
error sending to errChormonitoring goroutine blocked. - Memory: High memory usage due to goroutine leaks.
Detection Engineering
YARA Rule
rule CVE_2023_52725_kpimon_DoS {
meta:
description = "Detects vulnerable onos-kpimon binary with blocking errCh channel"
author = "Valters IT"
date = "2025-04-10"
cve = "CVE-2023-52725"
strings:
$errCh = "errCh <- err" ascii wide nocase
$make_chan = "make(chan error)" ascii wide nocase
condition:
$errCh and $make_chan
}
Sigma Rule
title: CVE-2023-52725 - kpimon DoS via Blocked errCh Channel
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects potential exploitation of CVE-2023-52725 by monitoring for kpimon service hangs
logsource:
category: process_creation
product: linux
detection:
selection:
Image|endswith: '/kpimon'
CommandLine|contains: 'start'
condition: selection
falsepositives:
- Legitimate service restarts
level: medium
Suricata Rule
alert tcp any any -> any 5150 (msg:"CVE-2023-52725 - kpimon DoS Attempt"; flow:to_server,established; content:"|00 00 00 00|"; depth:4; offset:0; content:"|0a|"; within:10; reference:cve,2023-52725; classtype:attempted-dos; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate:
- Restrict network access to the kpimon service (firewall rules).
- Implement rate limiting on the gRPC endpoint.
- Set up a watchdog to restart the kpimon service if it becomes unresponsive.
Long-term:
- Apply a patch from the ONOS repository when available.
- Modify the source code to use a buffered channel with a non-blocking send.
- Add timeouts to the main loop to prevent indefinite blocking.
Workaround:
- Use a reverse proxy (e.g., Envoy) in front of kpimon with connection timeouts.
Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert
Report generated for CVE-2023-52725
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.