CVE-2026-45680: OpenTelemetry eBPF Instrumentation: Unbounded BPF internal metrics replay can exhaust CPU
Summary
OBI replays BPF probe hits into histogram observations by looping once per recorded run count. On busy systems, the run-count delta can become very large, causing the metrics exporter to spend excessive CPU time in a tight loop every collection interval.
Details
The vulnerable loop is in pkg/export/prom/prombpf.go. During each metrics tick, OBI iterates through probeMetrics and then executes for range metric.count, invoking BpfProbeLatency(...) for each individual recorded hit.
The count comes from calculateStats() in the same file, where deltaCount := bp.runCount - bp.prevRunCount is calculated and returned without any cap before the per-hit replay loop.
If probe activity spikes between scrape intervals, deltaCount can be very large. The exporter then spends CPU time proportional to the number of probe hits rather than the number of metric series.
PoC
Local testing with a small reproducer confirmed the replay-loop behavior and showed CPU scaling with the recorded hit count rather than the number of metric series.
Use a vulnerable build and enable internal metrics export:
bash git checkout v0.0.0-rc.1+build make build export OTELEBPFINTERNALMETRICSPROMETHEUSPORT=9090 sudo ./bin/obi
Create a high-rate workload that repeatedly exercises traced probes. For example, generate HTTP traffic against an instrumented service:
bash python3 -m http.server 18081
Then drive it:
bash seq 1 500000 | xargs -P 128 -I{} curl -s http://127.0.0.1:18081 >/dev/null
At the same time, scrape metrics repeatedly:
bash while true; do curl -s http://127.0.0.1:9090/metrics >/dev/null; done
On a vulnerable build, OBI CPU consumption rises sharply during the metrics loop because histogram updates are replayed once per counted probe execution. The effect is visible in top or pidstat and is most pronounced under sustained high request volume.
Impact
This is an availability issue in the internal metrics path. Any deployment that enables BPF internal metrics and traces busy workloads is affected. Attackers can indirectly consume CPU in the privileged agent by driving enough activity through instrumented services.
Other sources
OpenTelemetry eBPF Instrumentation provides eBPF instrumentation based on the OpenTelemetry standard. Prior to version 0.9.0, OBI replays BPF probe hits into histogram observations by looping once per recorded run count. On busy systems, the run-count delta can become very large, causing the metrics exporter to spend excessive CPU time in a tight loop every collection interval. This issue has been patched in version 0.9.0.
— MITRE
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
go/go.opentelemetry.io/obito a version that resolves this vulnerability.Fixed in 0.9.0 - Upgrade
Upgrade
opentelemetry-ebpf-instrumentationto a version that resolves this vulnerability.Fixed in 0.9.0 - Configuration
Do not enable internal BPF metrics and traces that expose the Prometheus internal metrics endpoint (i.e., avoid setting OTEL_EBPF_INTERNAL_METRICS_PROMETHEUS_PORT, or disable the internal metrics exporter) to prevent unbounded replay of recorded probe hits during scrape intervals.
OpenTelemetry eBPF Instrumentation (OBI) internal metrics exporter OTEL_EBPF_INTERNAL_METRICS_PROMETHEUS_PORT = unset/disabled
Event History
Frequently Asked Questions
What is the severity of CVE-2026-45680?
CVE-2026-45680 has a medium severity rating of 5.9.
What impact does CVE-2026-45680 have on system performance?
CVE-2026-45680 can cause excessive CPU usage on busy systems due to looping once per recorded run count.
How can I mitigate the effects of CVE-2026-45680?
To mitigate CVE-2026-45680, consider optimizing the metrics exporter's configuration to reduce run count deltas.
Which software is affected by CVE-2026-45680?
CVE-2026-45680 affects the OBI module in the OpenTelemetry eBPF instrumentation software.
When was CVE-2026-45680 published?
CVE-2026-45680 was published on May 18, 2026.