|
| 1 | +# Security Policy |
| 2 | + |
| 3 | +## Supported Versions |
| 4 | + |
| 5 | +Security fixes go into the next release on the current 2.x line. There are no |
| 6 | +long term support branches and no backports to earlier releases, so the fix |
| 7 | +for a confirmed issue reaches you by upgrading. |
| 8 | + |
| 9 | +| **Version** | **Supported** | |
| 10 | +|:---------------------|:-------------:| |
| 11 | +| Latest 2.x release | Yes | |
| 12 | +| Earlier 2.x releases | No | |
| 13 | +| 1.x | No | |
| 14 | + |
| 15 | +The filter runs inside HAProxy 3.2 or newer and builds against the OpenTelemetry |
| 16 | +C Wrapper. A problem that turns out to sit in either of those is handled by |
| 17 | +that project; see the dependencies section below. |
| 18 | + |
| 19 | +## Reporting a Vulnerability |
| 20 | + |
| 21 | +Do not report a suspected vulnerability through a public GitHub issue or a pull |
| 22 | +request, and do not put the details in one. |
| 23 | + |
| 24 | +Report it through GitHub's private vulnerability reporting: |
| 25 | + |
| 26 | +https://github.com/haproxytech/haproxy-opentelemetry/security/advisories/new |
| 27 | + |
| 28 | +If that form is not reachable for you, open a plain issue saying only that you |
| 29 | +have a security report, with no details in it, and a maintainer will arrange a |
| 30 | +private channel. |
| 31 | + |
| 32 | +Include as much of this as you have: |
| 33 | + |
| 34 | +- What the issue is and what an attacker gets out of it. |
| 35 | +- The affected release or commit, and the HAProxy version it runs in. |
| 36 | +- The version of the OpenTelemetry C Wrapper the filter was built against. |
| 37 | +- The HAProxy configuration and the OTel configuration section that set it off, |
| 38 | + cut down as far as you can get them. |
| 39 | +- The request or the response that triggers it, and the steps to reproduce. |
| 40 | +- Whether the build was a debug or a release one. |
| 41 | +- Any mitigation or fix you already have. |
| 42 | + |
| 43 | +## What to Expect |
| 44 | + |
| 45 | +A maintainer confirms the report, asks for whatever is missing to reproduce it, |
| 46 | +and then says whether it is accepted, with the reasoning either way. A small |
| 47 | +team maintains the project, so answers come in days rather than hours. |
| 48 | + |
| 49 | +An accepted report gets a severity, a fix, and a release: the next regular one, |
| 50 | +or a release of its own when the issue is bad enough to warrant it. The fix |
| 51 | +is announced in a GitHub security advisory and in the ChangeLog, and you are |
| 52 | +credited in both unless you ask not to be. The project does not pay bounties. |
| 53 | + |
| 54 | +## Scope |
| 55 | + |
| 56 | +The filter runs inside the HAProxy process and on the data path. The header |
| 57 | +values, the URL, the `traceparent`, `tracestate` and `baggage` headers, and |
| 58 | +whatever the sample expressions fetch, all arrive from the client or from the |
| 59 | +server, while the HAProxy configuration and the OTel configuration come from |
| 60 | +the operator. A crash takes the worker down with it, so anything a remote peer |
| 61 | +can set off counts. |
| 62 | + |
| 63 | +In scope: |
| 64 | + |
| 65 | +- Memory safety in the filter's code: buffer overflows, out of bounds access, |
| 66 | + use after free and double free, and reads of uninitialized memory. |
| 67 | +- A crash, a hang or unbounded memory growth that a client or a server can set |
| 68 | + off through a request or a response. |
| 69 | +- A crafted value that escapes the field the filter writes it into, whether a |
| 70 | + header or a variable. |
| 71 | +- Memory corruption in the configuration parsing, even though the configuration |
| 72 | + itself is written by the operator. |
| 73 | +- Data races between HAProxy threads that corrupt the filter's state or carry |
| 74 | + data from one stream into another. |
| 75 | +- Telemetry sent somewhere other than the configured endpoint. |
| 76 | +- Process data that reaches exported telemetry although the configuration never |
| 77 | + asked for it. |
| 78 | +- A CLI command whose arguments corrupt memory, although CLI access is already |
| 79 | + privileged. |
| 80 | + |
| 81 | +Out of scope: |
| 82 | + |
| 83 | +- Telemetry that is dropped or never arrives: delivery is best effort by design, |
| 84 | + as [README.md](README.md) says. |
| 85 | +- What the configuration asks for: an attribute that copies a header or a cookie |
| 86 | + into a span, an exporter aimed at the wrong collector, or a sampling rate that |
| 87 | + leaves events out, are deployment decisions. |
| 88 | +- Findings in HAProxy itself. Those belong to the HAProxy project and go to |
| 89 | + https://github.com/haproxy/haproxy/security. |
| 90 | +- Findings in the OpenTelemetry C Wrapper, or in the OpenTelemetry C++ SDK it |
| 91 | + carries. See below. |
| 92 | +- Behaviour that appears only in a debug build. Report that as an ordinary |
| 93 | + issue. |
| 94 | +- The test configurations and scripts under `test/`, and the stand-in library |
| 95 | + under `dummy/`, which are there for development. |
| 96 | + |
| 97 | +## Dependencies |
| 98 | + |
| 99 | +The filter is built against the OpenTelemetry C Wrapper library, which carries |
| 100 | +the OpenTelemetry C++ SDK and everything that SDK links with it, and it runs |
| 101 | +inside HAProxy 3.2 or newer. |
| 102 | + |
| 103 | +Report a flaw in the wrapper through the security policy of its repository at |
| 104 | +https://github.com/haproxytech/opentelemetry-c-wrapper, and a flaw in HAProxy |
| 105 | +to the HAProxy project. Report it here as well when the way the filter uses |
| 106 | +either of them is what makes the flaw reachable. |
| 107 | + |
| 108 | +## Coordinated Disclosure |
| 109 | + |
| 110 | +Give the maintainers time to investigate and ship a fix before publishing the |
| 111 | +details. A confirmed issue is normally fixed in a release within 30 days, and |
| 112 | +the advisory goes out with that release, so the wait is usually shorter. Ninety |
| 113 | +days from the report is the outside limit. |
0 commit comments