Skip to content

Commit e26d4be

Browse files
authored
Merge pull request #308 from mean-weasel/codex/align-security-reporting
docs: align vulnerability reporting guidance
2 parents 3908475 + cdc1266 commit e26d4be

3 files changed

Lines changed: 96 additions & 16 deletions

File tree

SECURITY.md

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,63 @@
11
# Security Policy
22

3+
## Supported Versions
4+
5+
Security fixes are provided for the latest stable release and the current hosted service. Fixes
6+
normally land on `main` and are included in the next stable release. Older releases and
7+
version-pinned assets are not guaranteed to receive backports, so self-hosters should upgrade to the
8+
latest stable release before requesting a fix for an older version.
9+
310
## Reporting a Vulnerability
411

5-
If you discover a security vulnerability, please report it responsibly:
12+
Please report suspected vulnerabilities privately through one of these channels:
13+
14+
1. **Preferred:** [GitHub private vulnerability reporting](https://github.com/mean-weasel/bugdrop/security/advisories/new)
15+
2. **Email fallback:** [neonwatty@gmail.com](mailto:neonwatty@gmail.com) or
16+
[jeremy@mean-weasel.com](mailto:jeremy@mean-weasel.com)
17+
18+
Ordinary email is not end-to-end encrypted. Use GitHub private vulnerability reporting for reports
19+
that contain sensitive details, credentials, or unpublished exploit material. Do not open a public
20+
GitHub issue. If the preferred channel is unavailable, use either email fallback rather than
21+
disclosing the issue publicly.
622

7-
1. **Do not** open a public GitHub issue
8-
2. **Email** security concerns to: neonwatty@gmail.com or jeremy@mean-weasel.com
9-
3. **Include**:
10-
- Description of the vulnerability
11-
- Steps to reproduce
12-
- Potential impact
23+
Include, when available:
1324

14-
## Response Timeline
25+
- A description of the vulnerability and its potential impact
26+
- The affected release, hosted URL, or commit
27+
- Reproduction steps or a minimal proof of concept
28+
- Relevant configuration and environmental details, with secrets removed
29+
- Whether you plan to publish the report and any requested disclosure timeline
1530

16-
- **Acknowledgment**: Within 48 hours
17-
- **Initial assessment**: Within 7 days
18-
- **Fix timeline**: Depends on severity, typically 30-90 days
31+
## Response Targets
32+
33+
- **Acknowledgment:** Within 48 hours
34+
- **Initial assessment:** Within 7 days
35+
- **Remediation:** Typically 30-90 days, depending on severity and complexity
36+
37+
These are best-effort targets rather than guarantees. The maintainers will share material status or
38+
timeline changes through the private reporting channel.
1939

2040
## Scope
2141

2242
This policy covers:
2343

2444
- The Cloudflare Worker (`src/`)
2545
- The client widget (`src/widget/`)
46+
- Release artifacts published by this repository
2647
- The hosted instance at `bugdrop.neonwatty.workers.dev`
48+
- Dependency vulnerabilities that are reachable through or materially affect BugDrop
49+
50+
Self-hosted deployment configuration is controlled by the instance owner. Reports about an upstream
51+
dependency with no BugDrop-specific impact should go to that upstream project, but reports showing
52+
that BugDrop is affected are in scope here.
53+
54+
## Triage and Coordinated Disclosure
2755

28-
## Out of Scope
56+
The BugDrop repository maintainers own intake and triage. They will validate the report, assess
57+
severity using reachability and user impact, and prioritize critical and high-severity issues. When a
58+
dependency is involved, the maintainers will determine BugDrop's exposure, coordinate with the
59+
upstream project when appropriate, and update affected BugDrop releases or guidance.
2960

30-
- Self-hosted instances (contact the instance owner)
31-
- Third-party dependencies (report to the upstream project)
61+
Please allow time for investigation and remediation before public disclosure. The maintainers will
62+
coordinate a disclosure date with the reporter, publish a GitHub security advisory or CVE when
63+
appropriate, and credit reporters who request attribution and consent to being named.

docs/website/security.mdx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,23 @@ If installation status is also sensitive, set `AUTH_TOKEN_REQUIRED_FOR_CHECK = "
230230

231231
## Reporting Security Issues
232232

233-
If you discover a security vulnerability in BugDrop, please report it responsibly:
233+
If you discover a security vulnerability in BugDrop, report it privately:
234234

235235
- **Do not** create a public GitHub Issue for security vulnerabilities
236-
- Contact the maintainers directly through GitHub's private vulnerability reporting feature on the [BugDrop repository](https://github.com/mean-weasel/bugdrop)
236+
- **Preferred:** use [GitHub private vulnerability reporting](https://github.com/mean-weasel/bugdrop/security/advisories/new)
237+
- **Email fallback:** [neonwatty@gmail.com](mailto:neonwatty@gmail.com) or [jeremy@mean-weasel.com](mailto:jeremy@mean-weasel.com)
238+
239+
Ordinary email is not end-to-end encrypted. Use GitHub private vulnerability reporting for sensitive
240+
details, credentials, or unpublished exploit material. If GitHub reporting is unavailable, use either
241+
email fallback rather than disclosing the issue publicly.
242+
243+
BugDrop provides security fixes for the latest stable release and current hosted service. The
244+
maintainers target acknowledgment within 48 hours and an initial assessment within 7 days, but these
245+
are best-effort targets rather than guarantees. Reports about dependencies are in scope when the
246+
dependency is reachable through or materially affects BugDrop.
247+
248+
See the canonical [BugDrop security policy](https://github.com/mean-weasel/bugdrop/security/policy)
249+
for supported-version, scope, triage, and coordinated-disclosure details.
237250

238251
## Next Steps
239252

test/securityPolicy.test.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { readFileSync } from 'node:fs';
2+
import { describe, expect, it } from 'vitest';
3+
4+
const repositoryPolicy = readFileSync(new URL('../SECURITY.md', import.meta.url), 'utf8');
5+
const websitePolicy = readFileSync(
6+
new URL('../docs/website/security.mdx', import.meta.url),
7+
'utf8'
8+
);
9+
10+
const privateReportUrl = 'https://github.com/mean-weasel/bugdrop/security/advisories/new';
11+
const fallbackEmails = ['mailto:neonwatty@gmail.com', 'mailto:jeremy@mean-weasel.com'];
12+
13+
describe('security reporting policy', () => {
14+
it.each([
15+
['repository policy', repositoryPolicy],
16+
['website policy', websitePolicy],
17+
])('publishes the same private reporting channels in the %s', (_name, policy) => {
18+
expect(policy).toContain(privateReportUrl);
19+
for (const email of fallbackEmails) {
20+
expect(policy).toContain(email);
21+
}
22+
});
23+
24+
it('defines the maintained versions and intake process', () => {
25+
expect(repositoryPolicy).toContain('## Supported Versions');
26+
expect(repositoryPolicy).toContain('latest stable release');
27+
expect(repositoryPolicy).toContain('not end-to-end encrypted');
28+
expect(repositoryPolicy).toContain('## Triage and Coordinated Disclosure');
29+
expect(repositoryPolicy).toContain('dependency');
30+
});
31+
32+
it('points website readers to the canonical repository policy', () => {
33+
expect(websitePolicy).toContain('https://github.com/mean-weasel/bugdrop/security/policy');
34+
});
35+
});

0 commit comments

Comments
 (0)