Skip to content

Commit 5e0839c

Browse files
committed
DOC: otel: added a security policy to the repository
A SECURITY.md file was added. It names the supported release line, the private advisory form on GitHub as the only reporting channel, the scope of the policy against the data the filter handles, and the window before a report may be made public. The scope follows where the input comes from: the headers, the URL and the sample expressions carry remote data into the filter, while the two configurations come from the operator. Findings in HAProxy itself or in the wrapper library belong to those projects. Thanks to udhayapraveen for the idea; the suggestion is in the GitHub pull request #10.
1 parent 8aa4547 commit 5e0839c

1 file changed

Lines changed: 113 additions & 0 deletions

File tree

SECURITY.md

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
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

Comments
 (0)