CVE-2024-34050
Executive Summary
CVE-2024-34050 is a denial-of-service (DoS) vulnerability in the Open Networking Foundation (ONF) SD-RAN Rimedo rimedo-ts project, version 0.1.1. The flaw resides in the reader.go file, where an out-of-range slice bounds panic occurs when processing malformed or malicious input. This leads to a crash of the application, effectively causing a denial of service. The vulnerability is triggered by a specific function that attempts to reconstruct a 24-bit integer from a byte slice without proper bounds checking. An attacker can exploit this by sending crafted data to the vulnerable service, causing a panic and service disruption. No public exploit code or patch is currently available.
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 Go-based SD-RAN Rimedo project, which is part of the Open Networking Foundation's ecosystem. The vulnerable component is rimedo-ts version 0.1.1. As a Go module, this could be included as a dependency in other projects, potentially propagating the vulnerability. Users should verify if they are using this specific version and update to a patched version once available.
CVSS Breakdown & Threat Level
The CVSS score is listed as 0.0, indicating insufficient data for a complete assessment. However, based on the nature of the vulnerability (slice bounds out-of-range panic), a reasonable CVSS v3.1 vector would be:
- Attack Vector (AV): Network (N) – The vulnerability can be triggered remotely.
- Attack Complexity (AC): Low (L) – No special conditions are required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – The vulnerability does not affect other components.
- Confidentiality (C): None (N) – No data exposure.
- Integrity (I): None (N) – No data modification.
- Availability (A): High (H) – The service crashes, causing a denial of service.
Estimated CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Estimated Base Score: 7.5 (High)
Threat Level: High – The vulnerability is easily exploitable remotely without authentication, leading to a complete denial of service.
Deep Dive & Mechanics
The vulnerability is located in the reader.go file of the rimedo-ts package. The specific code that causes the panic is:
return uint64(b[2])<<16 | uint64(b[1])<<8 | uint64(b[0])
This code attempts to read three bytes from a slice b to form a 24-bit integer. However, it does not check if the slice has at least 3 elements. If b has fewer than 3 bytes (e.g., length 0, 1, or 2), accessing b[2] will cause an index out-of-range panic, crashing the program.
The function is likely used to parse network packets or data structures. An attacker can send a specially crafted packet with an insufficient number of bytes in a specific field, triggering the panic and causing the service to terminate.
Vulnerable vs. Patched Code
Vulnerable Code (rimedo-ts 0.1.1):
func readUint24(b []byte) uint64 {
return uint64(b[2])<<16 | uint64(b[1])<<8 | uint64(b[0])
}
Patched Code (Hypothetical):
func readUint24(b []byte) (uint64, error) {
if len(b) < 3 {
return 0, fmt.Errorf("buffer too short: need 3 bytes, got %d", len(b))
}
return uint64(b[2])<<16 | uint64(b[1])<<8 | uint64(b[0]), nil
}
The patched version adds a length check before accessing the slice elements, returning an error if the buffer is too short. This prevents the panic and allows the caller to handle the error gracefully.
Exploitation & Lab Setup
Red Team (Attacker)
Objective: Trigger a denial of service on the SD-RAN Rimedo service.
Lab Setup:
- Set up a virtual machine running a Linux distribution (e.g., Ubuntu 22.04).
- Install Go (version 1.20 or later).
- Clone the vulnerable repository:
git clone https://github.com/opennetworkinglab/rimedo-ts.git - Checkout the vulnerable version:
git checkout v0.1.1 - Build the project:
cd rimedo-ts && go build - Run the service (if applicable) or create a simple test harness that calls the vulnerable function.
Exploit Code (Proof of Concept):
package main
import (
"fmt"
"os"
)
// Vulnerable function from reader.go
func readUint24(b []byte) uint64 {
return uint64(b[2])<<16 | uint64(b[1])<<8 | uint64(b[0])
}
func main() {
// Trigger the panic with a short slice
data := []byte{0x01, 0x02} // Only 2 bytes
fmt.Println("Attempting to read 24-bit value...")
result := readUint24(data)
fmt.Println("Result:", result)
os.Exit(0)
}
Execution:
- Save the above code as
exploit.goin therimedo-tsdirectory. - Run:
go run exploit.go - The program will panic with an error similar to:
panic: runtime error: index out of range [2] with length 2
Impact: The service crashes, denying service to legitimate users.
Blue Team (Defender)
Detection:
- Monitor for application crashes or panics in logs.
- Look for repeated connection attempts with malformed data.
- Use network monitoring to detect anomalous packet structures.
Mitigation:
- Apply input validation and bounds checking to all data parsing functions.
- Implement a recovery mechanism (e.g.,
recover()in Go) to prevent crashes from panics. - Use a Web Application Firewall (WAF) or intrusion detection system (IDS) to filter malformed packets.
Indicators of Compromise (IOCs)
- Log Entry:
panic: runtime error: index out of range [2] with length < 3 - Network Pattern: Packets with incomplete or truncated fields that are expected to contain at least 3 bytes.
- File Hash (Vulnerable Binary): SHA256 hash of the
rimedo-tsbinary built from version 0.1.1. - Process Behavior: Sudden termination of the
rimedo-tsprocess without a clean exit.
Detection Engineering
YARA Rule
rule CVE_2024_34050_Rimedo_TS_Panic {
meta:
description = "Detects vulnerable code pattern in rimedo-ts reader.go"
author = "Valters IT"
date = "2024-01-01"
cve = "CVE-2024-34050"
strings:
$vuln_code = "uint64(b[2])<<16 | uint64(b[1])<<8 | uint64(b[0])"
condition:
$vuln_code
}
Sigma Rule
title: CVE-2024-34050 - SD-RAN Rimedo TS Slice Bounds Panic
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects panic events related to CVE-2024-34050 in rimedo-ts logs
author: Valters IT
date: 2024/01/01
logsource:
product: linux
service: syslog
detection:
selection:
- "panic: runtime error: index out of range"
- "rimedo-ts"
condition: selection
falsepositives:
- Other Go applications with similar panics
level: high
Suricata Rule
alert tcp any any -> any any (msg:"CVE-2024-34050 - SD-RAN Rimedo TS Slice Bounds Panic Attempt"; flow:to_server; content:"|00 01 02|"; depth:3; offset:0; classtype:attempted-dos; sid:1000001; rev:1;)
Note: The Suricata rule above is a placeholder. The actual exploit data pattern would need to be determined based on the specific protocol used by rimedo-ts.
Remediation & Mitigation
- Immediate Action: If using
rimedo-tsversion 0.1.1, isolate the service and apply network-level filtering to block malformed packets. - Patch: Update to a patched version of
rimedo-tsonce available. Monitor the ONF GitHub repository for updates. - Code Fix: Apply the bounds checking fix as shown in the "Vulnerable vs. Patched Code" section.
- Workaround: Implement a wrapper function that recovers from panics using Go's
recover()mechanism to prevent service crashes. - Monitoring: Enable detailed logging and alerting on application panics and crashes.
Valters IT Signature
This report was generated by Valters IT DevSecOps & CTI Expert System.