CVE-2023-45142
ADVISORY - githubSummary
Summary
This handler wrapper https://github.com/open-telemetry/opentelemetry-go-contrib/blob/5f7e6ad5a49b45df45f61a1deb29d7f1158032df/instrumentation/net/http/otelhttp/handler.go#L63-L65 out of the box adds labels
http.user_agent
http.method
that have unbound cardinality. It leads to the server's potential memory exhaustion when many malicious requests are sent to it.
Details
HTTP header User-Agent or HTTP method for requests can be easily set by an attacker to be random and long. The library internally uses httpconv.ServerRequest that records every value for HTTP method and User-Agent.
PoC
Send many requests with long randomly generated HTTP methods or/and User agents (e.g. a million) and observe how memory consumption increases during it.
Impact
In order to be affected, the program has to configure a metrics pipeline, use otelhttp.NewHandler wrapper, and does not filter any unknown HTTP methods or User agents on the level of CDN, LB, previous middleware, etc.
Others
It is similar to already reported vulnerabilities
- https://github.com/open-telemetry/opentelemetry-go-contrib/security/advisories/GHSA-5r5m-65gx-7vrh (open-telemetry/opentelemetry-go-contrib)
- https://github.com/advisories/GHSA-cg3q-j54f-5p7p (prometheus/client_golang)
Workaround for affected versions
As a workaround to stop being affected otelhttp.WithFilter() can be used, but it requires manual careful configuration to not log certain requests entirely.
For convenience and safe usage of this library, it should by default mark with the label unknown
non-standard HTTP methods and User agents to show that such requests were made but do not increase cardinality. In case someone wants to stay with the current behavior, library API should allow to enable it.
The other possibility is to disable HTTP metrics instrumentation by passing otelhttp.WithMeterProvider
option with noop.NewMeterProvider
.
Solution provided by upgrading
In PR https://github.com/open-telemetry/opentelemetry-go-contrib/pull/4277, released with package version 0.44.0, the values collected for attribute http.request.method
were changed to be restricted to a set of well-known values and other high cardinality attributes were removed.
References
Common Weakness Enumeration (CWE)
Allocation of Resources Without Limits or Throttling
Allocation of Resources Without Limits or Throttling
Allocation of Resources Without Limits or Throttling
GitHub
3.9
Package | Type | OS Name | OS Version | Affected Ranges | Fix Versions |
---|---|---|---|---|---|
go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace | golang | - | - | <0.44.0 | 0.44.0 |
go.opentelemetry.io/contrib/instrumentation/github.com/emicklei/go-restful/otelrestful | golang | - | - | <0.44.0 | 0.44.0 |
go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin | golang | - | - | <0.44.0 | 0.44.0 |
go.opentelemetry.io/contrib/instrumentation/github.com/gorilla/mux/otelmux | golang | - | - | <0.44.0 | 0.44.0 |
go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho | golang | - | - | <0.44.0 | 0.44.0 |
go.opentelemetry.io/contrib/instrumentation/gopkg.in/macaron.v1/otelmacaron | golang | - | - | <0.44.0 | 0.44.0 |
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp | golang | - | - | <0.44.0 | 0.44.0 |
CVSS:3 Severity and metrics
The CVSS metrics represent different qualitative aspects of a vulnerability that impact the overall score, as defined by the CVSS Specification.
Attack Vector (AV)
Network
Attack Vector (AV)
Network
The vulnerable component is bound to the network stack, but the attack is limited at the protocol level to a logically adjacent topology. This can mean an attack must be launched from the same shared physical (e.g., Bluetooth or IEEE 802.11) or logical (e.g., local IP subnet) network, or from within a secure or otherwise limited administrative domain (e.g., MPLS, secure VPN to an administrative network zone). One example of an Adjacent attack would be an ARP (IPv4) or neighbor discovery (IPv6) flood leading to a denial of service on the local LAN segment (e.g., CVE-2013-6014).
Attack Complexity (AC)
Low
Attack Complexity (AC)
Low
Specialized access conditions or extenuating circumstances do not exist. An attacker can expect repeatable success when attacking the vulnerable component.
Privileges Required (PR)
None
Privileges Required (PR)
None
The attacker is unauthorized prior to attack, and therefore does not require any access to settings or files of the vulnerable system to carry out an attack.
User Interaction (UI)
None
User Interaction (UI)
None
The vulnerable system can be exploited without interaction from any user.
Scope (S)
Unchanged
Scope (S)
Unchanged
An exploited vulnerability can only affect resources managed by the same security authority. In this case, the vulnerable component and the impacted component are either the same, or both are managed by the same security authority.
Confidentiality (C)
None
Confidentiality (C)
None
There is no loss of confidentiality.
Integrity (I)
None
Integrity (I)
None
There is no loss of trust or accuracy within the impacted component.
Availability (A)
High
Availability (A)
High
There is a total loss of availability, resulting in the attacker being able to fully deny access to resources in the impacted component; this loss is either sustained (while the attacker continues to deliver the attack) or persistent (the condition persists even after the attack has completed). Alternatively, the attacker has the ability to deny some availability, but the loss of availability presents a direct, serious consequence to the impacted component.
NIST
3.9
Alpine
-
Ubuntu
3.9
GoLang
-
GoLang
-
GoLang
-
Amazon
-
Amazon
-
Amazon
-
Red Hat
3.9
Chainguard
CGA-pv65-v4m9-35mv
-
Chainguard
CGA-q82p-c2hc-f79f
-
Chainguard
CGA-qgxj-cvp8-qv6q
-
Chainguard
CGA-qr22-6h8g-5cm3
-
Chainguard
CGA-pq24-27rh-w59m
-
Chainguard
CGA-rqx3-9jjw-vx9v
-
Chainguard
CGA-v34h-vmhj-24xm
-
Chainguard
CGA-v3w8-p7j8-hp38
-
Chainguard
CGA-vpj9-96xf-rg3f
-
Chainguard
CGA-wrmm-4cq4-67rw
-
Chainguard
CGA-2687-3w3c-h2pq
-
Chainguard
CGA-397f-cw69-fr9x
-
Chainguard
CGA-3hr2-4rp2-62hp
-
Chainguard
CGA-3cv4-w4xv-7chj
-
Chainguard
CGA-3r26-rcj2-h66r
-
Chainguard
CGA-48m6-jg22-57vj
-
Chainguard
CGA-5gwj-wwvf-4vcm
-
Chainguard
CGA-6grq-jf9p-vp73
-
Chainguard
CGA-6gv6-6q3m-628r
-
Chainguard
CGA-64p8-8q49-8rpc
-
Chainguard
CGA-7cpw-vrvp-9cjq
-
Chainguard
CGA-75j3-c8q9-r6qm
-
Chainguard
CGA-7cg8-gmhj-68cp
-
Chainguard
CGA-87wr-9fmh-h4hg
-
Chainguard
CGA-8cw3-86j9-wp6g
-
Chainguard
CGA-9534-vrgq-p7jf
-
Chainguard
CGA-9gcw-rcrg-9m92
-
Chainguard
CGA-9f2c-59q2-9mw2
-
Chainguard
CGA-9mm8-43fr-gqcg
-
Chainguard
CGA-h69m-qjx3-5gmc
-
Chainguard
CGA-g52p-2fwr-4527
-
Chainguard
CGA-gqfx-g935-v5xg
-
Chainguard
CGA-h2vq-f2rf-jwrq
-
Chainguard
CGA-m6m2-v446-5383
-