Security: accius/openhamclock

SECURITY.md

Security Policy

The OpenHamClock community takes security seriously. We appreciate responsible disclosure and will work to resolve security issues promptly to protect the amateur radio community.


1. Supported Versions

As a rapidly evolving open-source project, we primarily support the latest version of the codebase. Please reproduce issues on the latest main before reporting (when feasible).

VersionSupportedNotesEnd of Support
MainThe latest commit on the main branchN/A (rolling)
OlderPlease upgrade to the latest versionImmediate

2. Scope

2.1 In Scope

The following are within the scope of this vulnerability disclosure policy:

  • OpenHamClock application code (frontend and backend)
  • Configuration defaults and deployment artifacts in this repository
  • Build, packaging, and update mechanisms owned by this repository
  • Docker images and container configurations published by this project
  • Installation and update scripts (setup-*.sh, update.sh)

2.2 Out of Scope

The following are generally not in scope but may be considered on a case-by-case basis:

  • Third-party services and APIs consumed by OpenHamClock (report to the respective vendor)
  • Vulnerabilities in upstream dependencies that do not materially affect this project's usage
  • Issues requiring physical access to the user's device (unless remote access was enabled in an unsafe manner by default configuration)
  • Social engineering attacks against individual operators
  • Issues in end-of-life or unsupported versions

2.3 Scope Questions

If you're unsure whether something is in scope, please report it anyway and clearly mark it as a "scope question" in your submission. We will provide guidance.


3. Security Contact

For vulnerability reports, please use one of the private channels below. The maintainer acts as the primary security contact and may engage additional community members under NDA for remediation when necessary.


4. Reporting a Vulnerability (ISO/IEC 29147 §7.4)

CRITICAL: DO NOT open a public GitHub Issue for security vulnerabilities before coordination.

4.1 Reporting Channels (in order of preference)

Primary: GitHub Private Vulnerability Reporting

Secondary: Encrypted Email

4.2 What to Include in Your Report (ISO/IEC 29147 §7.4.3)

A complete vulnerability report should include:

Required:

  • Vulnerability type (e.g., SQL injection, XSS, authentication bypass, RCE, information disclosure)
  • Affected component(s) (e.g., server.js, auto-update mechanism, Docker configuration)
  • Affected version(s) (commit hash or version tag)
  • Description of the vulnerability and how it manifests
  • Steps to reproduce or proof-of-concept (minimal example preferred)
  • Impact assessment (what can an attacker achieve?)

Optional but helpful:

  • Severity assessment (your opinion: Critical/High/Medium/Low)
  • Suggested remediation or mitigation approach
  • Disclosure preferences (embargo duration, credit preferences)
  • CVE ID if you've already requested one

4.3 Sensitive Data Handling

To protect operator privacy, please avoid including:

  • Real amateur radio callsigns (use K0XXX or W1ABC as placeholders)
  • Actual grid locators (use AA00aa as placeholder)
  • Production IP addresses (use RFC5737 documentation addresses: 192.0.2.0/24)
  • API keys, tokens, session cookies, or contents of .env files
  • Personal information of operators (names, addresses, email addresses)

If sensitive data is absolutely necessary for reproduction:

  • Redact or pseudonymize it
  • Clearly explain what was redacted and why it's needed
  • Offer to provide actual data over a secure side-channel if essential

4.4 Language

Reports may be submitted in English (preferred) or other languages. We will make reasonable efforts to work with non-English reporters but may experience delays in processing.


5. Vulnerability Handling Process (ISO/IEC 30111:2019 §7)

5.1 Vulnerability Case Lifecycle

Each reported vulnerability is assigned a unique case identifier (format: OHC-YYYY-NNNN, e.g., OHC-2026-0001) and progresses through these states:

StateDescriptionTypical Duration
RECEIVEDReport received, awaiting initial review0-7 days
ASSIGNEDCase assigned to handler, analysis started1-14 days
CONFIRMEDVulnerability validated and reproduced-
REMEDIATIONFix in development and testing7-90 days
VENDOR-FIXFix ready, coordinating disclosure0-14 days
PUBLICVulnerability and fix publicly disclosedTerminal state
REJECTEDNot a vulnerability or out of scopeTerminal state

Status transitions will be communicated to the reporter via the reporting channel.

5.2 Response Timelines (ISO/IEC 29147 §7.4.4)

We commit to the following response targets:

  • Initial acknowledgment: Within 7 calendar days of receipt
  • Preliminary assessment: Within 14 calendar days of receipt
  • Regular updates: At least every 14 calendar days while case is active
  • Target remediation: Within 90 days for Critical/High severity issues

Note: Complex issues, multi-party coordination, or resource constraints may extend timelines. We will communicate delays proactively.

5.3 Severity Classification (CVSS v3.1)

We use CVSS v3.1 base scores to classify severity:

SeverityCVSS ScoreResponse PriorityTypical Fix Timeline
Critical9.0 - 10.0Immediate7-30 days
High7.0 - 8.9Urgent30-60 days
Medium4.0 - 6.9Normal60-90 days
Low0.1 - 3.9Best effortNext release cycle

Reporters are encouraged to provide their own CVSS assessment, but the PSIRT makes the final determination.

5.4 Remediation Development (ISO/IEC 30111 §7.5)

Remediation may take the form of:

  1. Code fix: Patch applied to the codebase
  2. Configuration change: Secure defaults or documentation update
  3. Workaround: Interim mitigation until a full fix is available
  4. No fix: Issue is accepted as a limitation (risk accepted, documented)

All fixes undergo internal testing before release. For Critical issues, we may request assistance from the reporter for verification.


6. Coordinated Disclosure (ISO/IEC 29147 §7.5)

6.1 Disclosure Timeline

By default, we follow a 90-day coordinated disclosure timeline from initial report:

  • Day 0: Vulnerability reported
  • Day 7: Initial acknowledgment and triage
  • Day 14-90: Remediation development, testing, and coordination
  • Day 90: Public disclosure (advisory + fix), unless extended by mutual agreement

6.2 Early Disclosure

We may disclose earlier than 90 days if:

  • Fix is ready and tested
  • No multi-party coordination is required
  • Reporter agrees to early disclosure
  • Active exploitation is detected in the wild (emergency disclosure)

6.3 Embargo Extensions

The 90-day timeline may be extended if:

  • Complexity requires additional development time (negotiated with reporter)
  • Multi-party coordination is in progress (see §7)
  • Affected component is in a third-party dependency awaiting upstream fix

Maximum embargo: Typically 180 days from initial report, except in exceptional circumstances.

6.4 Emergency Disclosure

If we become aware of active exploitation or imminent public disclosure, we may:

  1. Immediately publish a security advisory with available mitigations
  2. Notify affected parties via established channels
  3. Release a patch or workaround, even if incomplete

We will make reasonable efforts to notify the reporter before emergency disclosure.

6.5 Public Disclosure Content (ISO/IEC 29147 §7.5.3)

Our security advisories include:

  • Vulnerability description (non-technical summary + technical details)
  • Affected versions and components
  • CVE identifier (if assigned)
  • CVSS score and severity rating
  • Impact and exploit conditions
  • Remediation steps (upgrade path, workarounds, configuration changes)
  • Credit to reporter (unless anonymity requested)
  • Timeline of disclosure

Disclosure channels:

  • GitHub Security Advisory (primary)
  • CHANGELOG.md and release notes
  • Project README / documentation
  • Mailing list or community forum (if established)

7. Multi-Party Coordination (ISO/IEC TR 5895:2022)

7.1 When Multi-Party Coordination is Needed

We initiate multi-party coordination when a vulnerability:

  • Affects upstream dependencies (e.g., Express, Node.js, npm packages)
  • Impacts downstream projects (forks, derivatives, or integrations)
  • Is present in multiple projects sharing similar code
  • Requires involvement of a neutral coordinator (e.g., CERT/CC, MITRE)

7.2 Coordination Process (ISO/IEC TR 5895 §6.3)

When multi-party coordination is required:

  1. Identify stakeholders: List all affected vendors/projects
  2. Establish communication: Create a private coordination channel (email thread, CERT/CC case, GitHub security group)
  3. Share information: Distribute vulnerability details under disclosure embargo
  4. Coordinate timelines: Agree on a common disclosure date
  5. Synchronize patches: Align release timing across parties
  6. Joint disclosure: Publish advisories simultaneously (or in coordinated sequence)

7.3 Coordinator Roles

We may request assistance from:

  • CERT/CC (cert.org) for high-impact vulnerabilities affecting multiple vendors
  • MITRE (cve.org) for CVE assignment and management
  • GitHub Security Lab for coordination within the GitHub ecosystem
  • NIST NVD for CVE publication and enrichment

7.4 Information Sharing Restrictions

When participating in multi-party coordination:

  • All parties operate under confidentiality until the agreed disclosure date
  • Information may be shared with:
    • Directly affected vendors/projects (on need-to-know basis)
    • Neutral coordinators (CERT/CC, MITRE)
    • Security response organizations (e.g., OS/distro security teams)
  • Information must not be shared with:
    • General public
    • Media or press (except coordinated embargoed briefings)
    • Unaffected third parties

7.5 Disclosure Date Negotiation

Target disclosure date is determined by:

  • Complexity of remediation across all parties
  • Criticality and exploit likelihood
  • Default 90-day window (may be shorter or longer by agreement)
  • Active exploitation status

If consensus cannot be reached, we follow the earliest responsible disclosure date that allows for remediation.


8. Reporter Credit and Recognition (ISO/IEC 29147 §7.4.5)

8.1 Credit Policy

We recognize and credit security researchers who responsibly disclose vulnerabilities:

  • Default: Credit by name/handle in security advisories and release notes
  • Anonymous: Opt-in anonymity respected ("Anonymous researcher")
  • No credit: If reporter requests no attribution

8.2 Hall of Fame

We may maintain a Security Researchers Hall of Fame in this repository recognizing:

  • Researchers who have reported valid vulnerabilities
  • Year of report and severity classification
  • Link to public advisory (if applicable)

This section will be created when the first qualifying report is received.

8.3 Bug Bounty Program

Current status: We do not operate a paid bug bounty program at this time.

Reporters contribute out of goodwill to protect the amateur radio community. We are deeply grateful for their efforts.


9. Safe Harbor and Legal Considerations

9.1 Good-Faith Security Research

We welcome and support good-faith security research conducted in accordance with this policy. We will not pursue legal action against researchers who:

  • Act in good faith to identify and report vulnerabilities
  • Make a reasonable effort to avoid privacy violations, data destruction, and service disruption
  • Do not exploit vulnerabilities beyond what is necessary to demonstrate the issue
  • Do not access, modify, or exfiltrate data beyond minimal proof-of-concept
  • Report findings promptly and privately
  • Wait for our coordinated disclosure before public discussion

9.2 Testing Guidelines

When testing for vulnerabilities:

  • Use your own infrastructure: Test against your own deployment of OpenHamClock
  • Do not test production systems operated by others without explicit written permission
  • Avoid service degradation: No DoS attacks, no resource exhaustion, no brute-forcing
  • Respect privacy: Do not access operator data, callsigns, locations, or logs of other users
  • No automated scanning of public instances without prior approval

9.3 Responsible Disclosure Commitment

If you follow this policy, we commit to:

  • Not pursue legal action related to your research
  • Work with you to understand and validate the issue
  • Acknowledge your contribution publicly (unless you prefer anonymity)
  • Keep you informed throughout the remediation and disclosure process

10. Security Updates and Notifications

10.1 How to Stay Informed

Users and operators can stay informed of security updates via:

10.2 Applying Security Updates

When a security update is released:

  1. Review the advisory: Understand the impact and affected versions

  2. Check your version: git log -1 --pretty=format:"%H" or grep version package.json

  3. Update immediately for Critical/High severity:

    git pull
    npm install
    npm audit fix
    docker-compose up -d --build # if using Docker
  4. Verify the fix: Check that your version includes the patch commit

  5. Monitor for anomalies: Review logs for signs of prior exploitation


11. Best Practices for Operators (Self-Hosting)

To reduce your vulnerability surface:

  1. Do not expose to the public internet
    Do not port-forward OpenHamClock directly to the internet unless it is protected behind a reverse proxy with TLS, authentication, and rate limiting.

  2. Protect your .env and secrets
    Treat .env, API keys, and configuration as secrets. Never commit them to public repositories. Use restrictive file permissions (chmod 600 .env).

  3. Update regularly
    Subscribe to security advisories and apply updates promptly:

    git pull
    npm install
    npm audit
    npm audit fix # review changes before applying
  4. Run with least privilege
    Use a dedicated non-root user for the application. If using Docker, ensure the container runs as non-root.

  5. Enable security features

    • Set NODE_ENV=production
    • Configure AUTO_UPDATE_ENABLED=false if you prefer manual updates
    • Use HTTPS (TLS) for all connections
    • Enable rate limiting and authentication on admin endpoints
  6. Monitor for anomalies
    Review application logs regularly for suspicious activity (failed auth attempts, unusual API requests, etc.).

  7. Backup configuration
    Maintain backups of your configuration before applying updates.


12. Policy Review and Updates

This policy will be reviewed and updated:

  • Annually (or more frequently as needed)
  • When processes change materially
  • After significant security incidents
  • To align with evolving ISO/IEC standards

History:

  • v1.1 (2026-02-12): Enhanced ISO/IEC compliance, added multi-party coordination, severity classification, case lifecycle
  • v1.0 (Initial): Basic vulnerability disclosure policy

13. Contact and Questions

For questions about this policy (not vulnerability reports):

  • General security questions: Open a public Discussion on GitHub
  • Policy clarifications: Email chris@cjhlighting.com (non-confidential)

For vulnerability reports, see §4 Reporting a Vulnerability.


14. Acknowledgments

Thank you to the security research community for helping make OpenHamClock safer for the amateur radio community worldwide. Your responsible disclosures protect operators, preserve trust, and strengthen open-source security practices.

Metadata

This policy aligns with international standards for vulnerability disclosure and handling:

  • ISO/IEC 29147:2018 - Vulnerability disclosure
  • ISO/IEC 30111:2019 - Vulnerability handling processes
  • ISO/IEC TR 5895:2022 - Multi-party coordinated vulnerability disclosure and handling

Document version: 1.1
Last updated: 2026-02-12
Next review: 2026-08-12

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Security: accius/openhamclock

SECURITY.md

Security Policy

The OpenHamClock community takes security seriously. We appreciate responsible disclosure and will work to resolve security issues promptly to protect the amateur radio community.


1. Supported Versions

As a rapidly evolving open-source project, we primarily support the latest version of the codebase. Please reproduce issues on the latest main before reporting (when feasible).

VersionSupportedNotesEnd of Support
MainThe latest commit on the main branchN/A (rolling)
OlderPlease upgrade to the latest versionImmediate

2. Scope

2.1 In Scope

The following are within the scope of this vulnerability disclosure policy:

  • OpenHamClock application code (frontend and backend)
  • Configuration defaults and deployment artifacts in this repository
  • Build, packaging, and update mechanisms owned by this repository
  • Docker images and container configurations published by this project
  • Installation and update scripts (setup-*.sh, update.sh)

2.2 Out of Scope

The following are generally not in scope but may be considered on a case-by-case basis:

  • Third-party services and APIs consumed by OpenHamClock (report to the respective vendor)
  • Vulnerabilities in upstream dependencies that do not materially affect this project's usage
  • Issues requiring physical access to the user's device (unless remote access was enabled in an unsafe manner by default configuration)
  • Social engineering attacks against individual operators
  • Issues in end-of-life or unsupported versions

2.3 Scope Questions

If you're unsure whether something is in scope, please report it anyway and clearly mark it as a "scope question" in your submission. We will provide guidance.


3. Security Contact

For vulnerability reports, please use one of the private channels below. The maintainer acts as the primary security contact and may engage additional community members under NDA for remediation when necessary.


4. Reporting a Vulnerability (ISO/IEC 29147 §7.4)

CRITICAL: DO NOT open a public GitHub Issue for security vulnerabilities before coordination.

4.1 Reporting Channels (in order of preference)

Primary: GitHub Private Vulnerability Reporting

Secondary: Encrypted Email

4.2 What to Include in Your Report (ISO/IEC 29147 §7.4.3)

A complete vulnerability report should include:

Required:

  • Vulnerability type (e.g., SQL injection, XSS, authentication bypass, RCE, information disclosure)
  • Affected component(s) (e.g., server.js, auto-update mechanism, Docker configuration)
  • Affected version(s) (commit hash or version tag)
  • Description of the vulnerability and how it manifests
  • Steps to reproduce or proof-of-concept (minimal example preferred)
  • Impact assessment (what can an attacker achieve?)

Optional but helpful:

  • Severity assessment (your opinion: Critical/High/Medium/Low)
  • Suggested remediation or mitigation approach
  • Disclosure preferences (embargo duration, credit preferences)
  • CVE ID if you've already requested one

4.3 Sensitive Data Handling

To protect operator privacy, please avoid including:

  • Real amateur radio callsigns (use K0XXX or W1ABC as placeholders)
  • Actual grid locators (use AA00aa as placeholder)
  • Production IP addresses (use RFC5737 documentation addresses: 192.0.2.0/24)
  • API keys, tokens, session cookies, or contents of .env files
  • Personal information of operators (names, addresses, email addresses)

If sensitive data is absolutely necessary for reproduction:

  • Redact or pseudonymize it
  • Clearly explain what was redacted and why it's needed
  • Offer to provide actual data over a secure side-channel if essential

4.4 Language

Reports may be submitted in English (preferred) or other languages. We will make reasonable efforts to work with non-English reporters but may experience delays in processing.


5. Vulnerability Handling Process (ISO/IEC 30111:2019 §7)

5.1 Vulnerability Case Lifecycle

Each reported vulnerability is assigned a unique case identifier (format: OHC-YYYY-NNNN, e.g., OHC-2026-0001) and progresses through these states:

StateDescriptionTypical Duration
RECEIVEDReport received, awaiting initial review0-7 days
ASSIGNEDCase assigned to handler, analysis started1-14 days
CONFIRMEDVulnerability validated and reproduced-
REMEDIATIONFix in development and testing7-90 days
VENDOR-FIXFix ready, coordinating disclosure0-14 days
PUBLICVulnerability and fix publicly disclosedTerminal state
REJECTEDNot a vulnerability or out of scopeTerminal state

Status transitions will be communicated to the reporter via the reporting channel.

5.2 Response Timelines (ISO/IEC 29147 §7.4.4)

We commit to the following response targets:

  • Initial acknowledgment: Within 7 calendar days of receipt
  • Preliminary assessment: Within 14 calendar days of receipt
  • Regular updates: At least every 14 calendar days while case is active
  • Target remediation: Within 90 days for Critical/High severity issues

Note: Complex issues, multi-party coordination, or resource constraints may extend timelines. We will communicate delays proactively.

5.3 Severity Classification (CVSS v3.1)

We use CVSS v3.1 base scores to classify severity:

SeverityCVSS ScoreResponse PriorityTypical Fix Timeline
Critical9.0 - 10.0Immediate7-30 days
High7.0 - 8.9Urgent30-60 days
Medium4.0 - 6.9Normal60-90 days
Low0.1 - 3.9Best effortNext release cycle

Reporters are encouraged to provide their own CVSS assessment, but the PSIRT makes the final determination.

5.4 Remediation Development (ISO/IEC 30111 §7.5)

Remediation may take the form of:

  1. Code fix: Patch applied to the codebase
  2. Configuration change: Secure defaults or documentation update
  3. Workaround: Interim mitigation until a full fix is available
  4. No fix: Issue is accepted as a limitation (risk accepted, documented)

All fixes undergo internal testing before release. For Critical issues, we may request assistance from the reporter for verification.


6. Coordinated Disclosure (ISO/IEC 29147 §7.5)

6.1 Disclosure Timeline

By default, we follow a 90-day coordinated disclosure timeline from initial report:

  • Day 0: Vulnerability reported
  • Day 7: Initial acknowledgment and triage
  • Day 14-90: Remediation development, testing, and coordination
  • Day 90: Public disclosure (advisory + fix), unless extended by mutual agreement

6.2 Early Disclosure

We may disclose earlier than 90 days if:

  • Fix is ready and tested
  • No multi-party coordination is required
  • Reporter agrees to early disclosure
  • Active exploitation is detected in the wild (emergency disclosure)

6.3 Embargo Extensions

The 90-day timeline may be extended if:

  • Complexity requires additional development time (negotiated with reporter)
  • Multi-party coordination is in progress (see §7)
  • Affected component is in a third-party dependency awaiting upstream fix

Maximum embargo: Typically 180 days from initial report, except in exceptional circumstances.

6.4 Emergency Disclosure

If we become aware of active exploitation or imminent public disclosure, we may:

  1. Immediately publish a security advisory with available mitigations
  2. Notify affected parties via established channels
  3. Release a patch or workaround, even if incomplete

We will make reasonable efforts to notify the reporter before emergency disclosure.

6.5 Public Disclosure Content (ISO/IEC 29147 §7.5.3)

Our security advisories include:

  • Vulnerability description (non-technical summary + technical details)
  • Affected versions and components
  • CVE identifier (if assigned)
  • CVSS score and severity rating
  • Impact and exploit conditions
  • Remediation steps (upgrade path, workarounds, configuration changes)
  • Credit to reporter (unless anonymity requested)
  • Timeline of disclosure

Disclosure channels:

  • GitHub Security Advisory (primary)
  • CHANGELOG.md and release notes
  • Project README / documentation
  • Mailing list or community forum (if established)

7. Multi-Party Coordination (ISO/IEC TR 5895:2022)

7.1 When Multi-Party Coordination is Needed

We initiate multi-party coordination when a vulnerability:

  • Affects upstream dependencies (e.g., Express, Node.js, npm packages)
  • Impacts downstream projects (forks, derivatives, or integrations)
  • Is present in multiple projects sharing similar code
  • Requires involvement of a neutral coordinator (e.g., CERT/CC, MITRE)

7.2 Coordination Process (ISO/IEC TR 5895 §6.3)

When multi-party coordination is required:

  1. Identify stakeholders: List all affected vendors/projects
  2. Establish communication: Create a private coordination channel (email thread, CERT/CC case, GitHub security group)
  3. Share information: Distribute vulnerability details under disclosure embargo
  4. Coordinate timelines: Agree on a common disclosure date
  5. Synchronize patches: Align release timing across parties
  6. Joint disclosure: Publish advisories simultaneously (or in coordinated sequence)

7.3 Coordinator Roles

We may request assistance from:

  • CERT/CC (cert.org) for high-impact vulnerabilities affecting multiple vendors
  • MITRE (cve.org) for CVE assignment and management
  • GitHub Security Lab for coordination within the GitHub ecosystem
  • NIST NVD for CVE publication and enrichment

7.4 Information Sharing Restrictions

When participating in multi-party coordination:

  • All parties operate under confidentiality until the agreed disclosure date
  • Information may be shared with:
    • Directly affected vendors/projects (on need-to-know basis)
    • Neutral coordinators (CERT/CC, MITRE)
    • Security response organizations (e.g., OS/distro security teams)
  • Information must not be shared with:
    • General public
    • Media or press (except coordinated embargoed briefings)
    • Unaffected third parties

7.5 Disclosure Date Negotiation

Target disclosure date is determined by:

  • Complexity of remediation across all parties
  • Criticality and exploit likelihood
  • Default 90-day window (may be shorter or longer by agreement)
  • Active exploitation status

If consensus cannot be reached, we follow the earliest responsible disclosure date that allows for remediation.


8. Reporter Credit and Recognition (ISO/IEC 29147 §7.4.5)

8.1 Credit Policy

We recognize and credit security researchers who responsibly disclose vulnerabilities:

  • Default: Credit by name/handle in security advisories and release notes
  • Anonymous: Opt-in anonymity respected ("Anonymous researcher")
  • No credit: If reporter requests no attribution

8.2 Hall of Fame

We may maintain a Security Researchers Hall of Fame in this repository recognizing:

  • Researchers who have reported valid vulnerabilities
  • Year of report and severity classification
  • Link to public advisory (if applicable)

This section will be created when the first qualifying report is received.

8.3 Bug Bounty Program

Current status: We do not operate a paid bug bounty program at this time.

Reporters contribute out of goodwill to protect the amateur radio community. We are deeply grateful for their efforts.


9. Safe Harbor and Legal Considerations

9.1 Good-Faith Security Research

We welcome and support good-faith security research conducted in accordance with this policy. We will not pursue legal action against researchers who:

  • Act in good faith to identify and report vulnerabilities
  • Make a reasonable effort to avoid privacy violations, data destruction, and service disruption
  • Do not exploit vulnerabilities beyond what is necessary to demonstrate the issue
  • Do not access, modify, or exfiltrate data beyond minimal proof-of-concept
  • Report findings promptly and privately
  • Wait for our coordinated disclosure before public discussion

9.2 Testing Guidelines

When testing for vulnerabilities:

  • Use your own infrastructure: Test against your own deployment of OpenHamClock
  • Do not test production systems operated by others without explicit written permission
  • Avoid service degradation: No DoS attacks, no resource exhaustion, no brute-forcing
  • Respect privacy: Do not access operator data, callsigns, locations, or logs of other users
  • No automated scanning of public instances without prior approval

9.3 Responsible Disclosure Commitment

If you follow this policy, we commit to:

  • Not pursue legal action related to your research
  • Work with you to understand and validate the issue
  • Acknowledge your contribution publicly (unless you prefer anonymity)
  • Keep you informed throughout the remediation and disclosure process

10. Security Updates and Notifications

10.1 How to Stay Informed

Users and operators can stay informed of security updates via:

10.2 Applying Security Updates

When a security update is released:

  1. Review the advisory: Understand the impact and affected versions

  2. Check your version: git log -1 --pretty=format:"%H" or grep version package.json

  3. Update immediately for Critical/High severity:

    git pull
    npm install
    npm audit fix
    docker-compose up -d --build # if using Docker
  4. Verify the fix: Check that your version includes the patch commit

  5. Monitor for anomalies: Review logs for signs of prior exploitation


11. Best Practices for Operators (Self-Hosting)

To reduce your vulnerability surface:

  1. Do not expose to the public internet
    Do not port-forward OpenHamClock directly to the internet unless it is protected behind a reverse proxy with TLS, authentication, and rate limiting.

  2. Protect your .env and secrets
    Treat .env, API keys, and configuration as secrets. Never commit them to public repositories. Use restrictive file permissions (chmod 600 .env).

  3. Update regularly
    Subscribe to security advisories and apply updates promptly:

    git pull
    npm install
    npm audit
    npm audit fix # review changes before applying
  4. Run with least privilege
    Use a dedicated non-root user for the application. If using Docker, ensure the container runs as non-root.

  5. Enable security features

    • Set NODE_ENV=production
    • Configure AUTO_UPDATE_ENABLED=false if you prefer manual updates
    • Use HTTPS (TLS) for all connections
    • Enable rate limiting and authentication on admin endpoints
  6. Monitor for anomalies
    Review application logs regularly for suspicious activity (failed auth attempts, unusual API requests, etc.).

  7. Backup configuration
    Maintain backups of your configuration before applying updates.


12. Policy Review and Updates

This policy will be reviewed and updated:

  • Annually (or more frequently as needed)
  • When processes change materially
  • After significant security incidents
  • To align with evolving ISO/IEC standards

History:

  • v1.1 (2026-02-12): Enhanced ISO/IEC compliance, added multi-party coordination, severity classification, case lifecycle
  • v1.0 (Initial): Basic vulnerability disclosure policy

13. Contact and Questions

For questions about this policy (not vulnerability reports):

  • General security questions: Open a public Discussion on GitHub
  • Policy clarifications: Email chris@cjhlighting.com (non-confidential)

For vulnerability reports, see §4 Reporting a Vulnerability.


14. Acknowledgments

Thank you to the security research community for helping make OpenHamClock safer for the amateur radio community worldwide. Your responsible disclosures protect operators, preserve trust, and strengthen open-source security practices.

Metadata

This policy aligns with international standards for vulnerability disclosure and handling:

  • ISO/IEC 29147:2018 - Vulnerability disclosure
  • ISO/IEC 30111:2019 - Vulnerability handling processes
  • ISO/IEC TR 5895:2022 - Multi-party coordinated vulnerability disclosure and handling

Document version: 1.1
Last updated: 2026-02-12
Next review: 2026-08-12

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Security: accius/openhamclock

SECURITY.md

Security Policy

The OpenHamClock community takes security seriously. We appreciate responsible disclosure and will work to resolve security issues promptly to protect the amateur radio community.


1. Supported Versions

As a rapidly evolving open-source project, we primarily support the latest version of the codebase. Please reproduce issues on the latest main before reporting (when feasible).

VersionSupportedNotesEnd of Support
MainThe latest commit on the main branchN/A (rolling)
OlderPlease upgrade to the latest versionImmediate

2. Scope

2.1 In Scope

The following are within the scope of this vulnerability disclosure policy:

  • OpenHamClock application code (frontend and backend)
  • Configuration defaults and deployment artifacts in this repository
  • Build, packaging, and update mechanisms owned by this repository
  • Docker images and container configurations published by this project
  • Installation and update scripts (setup-*.sh, update.sh)

2.2 Out of Scope

The following are generally not in scope but may be considered on a case-by-case basis:

  • Third-party services and APIs consumed by OpenHamClock (report to the respective vendor)
  • Vulnerabilities in upstream dependencies that do not materially affect this project's usage
  • Issues requiring physical access to the user's device (unless remote access was enabled in an unsafe manner by default configuration)
  • Social engineering attacks against individual operators
  • Issues in end-of-life or unsupported versions

2.3 Scope Questions

If you're unsure whether something is in scope, please report it anyway and clearly mark it as a "scope question" in your submission. We will provide guidance.


3. Security Contact

For vulnerability reports, please use one of the private channels below. The maintainer acts as the primary security contact and may engage additional community members under NDA for remediation when necessary.


4. Reporting a Vulnerability (ISO/IEC 29147 §7.4)

CRITICAL: DO NOT open a public GitHub Issue for security vulnerabilities before coordination.

4.1 Reporting Channels (in order of preference)

Primary: GitHub Private Vulnerability Reporting

Secondary: Encrypted Email

4.2 What to Include in Your Report (ISO/IEC 29147 §7.4.3)

A complete vulnerability report should include:

Required:

  • Vulnerability type (e.g., SQL injection, XSS, authentication bypass, RCE, information disclosure)
  • Affected component(s) (e.g., server.js, auto-update mechanism, Docker configuration)
  • Affected version(s) (commit hash or version tag)
  • Description of the vulnerability and how it manifests
  • Steps to reproduce or proof-of-concept (minimal example preferred)
  • Impact assessment (what can an attacker achieve?)

Optional but helpful:

  • Severity assessment (your opinion: Critical/High/Medium/Low)
  • Suggested remediation or mitigation approach
  • Disclosure preferences (embargo duration, credit preferences)
  • CVE ID if you've already requested one

4.3 Sensitive Data Handling

To protect operator privacy, please avoid including:

  • Real amateur radio callsigns (use K0XXX or W1ABC as placeholders)
  • Actual grid locators (use AA00aa as placeholder)
  • Production IP addresses (use RFC5737 documentation addresses: 192.0.2.0/24)
  • API keys, tokens, session cookies, or contents of .env files
  • Personal information of operators (names, addresses, email addresses)

If sensitive data is absolutely necessary for reproduction:

  • Redact or pseudonymize it
  • Clearly explain what was redacted and why it's needed
  • Offer to provide actual data over a secure side-channel if essential

4.4 Language

Reports may be submitted in English (preferred) or other languages. We will make reasonable efforts to work with non-English reporters but may experience delays in processing.


5. Vulnerability Handling Process (ISO/IEC 30111:2019 §7)

5.1 Vulnerability Case Lifecycle

Each reported vulnerability is assigned a unique case identifier (format: OHC-YYYY-NNNN, e.g., OHC-2026-0001) and progresses through these states:

StateDescriptionTypical Duration
RECEIVEDReport received, awaiting initial review0-7 days
ASSIGNEDCase assigned to handler, analysis started1-14 days
CONFIRMEDVulnerability validated and reproduced-
REMEDIATIONFix in development and testing7-90 days
VENDOR-FIXFix ready, coordinating disclosure0-14 days
PUBLICVulnerability and fix publicly disclosedTerminal state
REJECTEDNot a vulnerability or out of scopeTerminal state

Status transitions will be communicated to the reporter via the reporting channel.

5.2 Response Timelines (ISO/IEC 29147 §7.4.4)

We commit to the following response targets:

  • Initial acknowledgment: Within 7 calendar days of receipt
  • Preliminary assessment: Within 14 calendar days of receipt
  • Regular updates: At least every 14 calendar days while case is active
  • Target remediation: Within 90 days for Critical/High severity issues

Note: Complex issues, multi-party coordination, or resource constraints may extend timelines. We will communicate delays proactively.

5.3 Severity Classification (CVSS v3.1)

We use CVSS v3.1 base scores to classify severity:

SeverityCVSS ScoreResponse PriorityTypical Fix Timeline
Critical9.0 - 10.0Immediate7-30 days
High7.0 - 8.9Urgent30-60 days
Medium4.0 - 6.9Normal60-90 days
Low0.1 - 3.9Best effortNext release cycle

Reporters are encouraged to provide their own CVSS assessment, but the PSIRT makes the final determination.

5.4 Remediation Development (ISO/IEC 30111 §7.5)

Remediation may take the form of:

  1. Code fix: Patch applied to the codebase
  2. Configuration change: Secure defaults or documentation update
  3. Workaround: Interim mitigation until a full fix is available
  4. No fix: Issue is accepted as a limitation (risk accepted, documented)

All fixes undergo internal testing before release. For Critical issues, we may request assistance from the reporter for verification.


6. Coordinated Disclosure (ISO/IEC 29147 §7.5)

6.1 Disclosure Timeline

By default, we follow a 90-day coordinated disclosure timeline from initial report:

  • Day 0: Vulnerability reported
  • Day 7: Initial acknowledgment and triage
  • Day 14-90: Remediation development, testing, and coordination
  • Day 90: Public disclosure (advisory + fix), unless extended by mutual agreement

6.2 Early Disclosure

We may disclose earlier than 90 days if:

  • Fix is ready and tested
  • No multi-party coordination is required
  • Reporter agrees to early disclosure
  • Active exploitation is detected in the wild (emergency disclosure)

6.3 Embargo Extensions

The 90-day timeline may be extended if:

  • Complexity requires additional development time (negotiated with reporter)
  • Multi-party coordination is in progress (see §7)
  • Affected component is in a third-party dependency awaiting upstream fix

Maximum embargo: Typically 180 days from initial report, except in exceptional circumstances.

6.4 Emergency Disclosure

If we become aware of active exploitation or imminent public disclosure, we may:

  1. Immediately publish a security advisory with available mitigations
  2. Notify affected parties via established channels
  3. Release a patch or workaround, even if incomplete

We will make reasonable efforts to notify the reporter before emergency disclosure.

6.5 Public Disclosure Content (ISO/IEC 29147 §7.5.3)

Our security advisories include:

  • Vulnerability description (non-technical summary + technical details)
  • Affected versions and components
  • CVE identifier (if assigned)
  • CVSS score and severity rating
  • Impact and exploit conditions
  • Remediation steps (upgrade path, workarounds, configuration changes)
  • Credit to reporter (unless anonymity requested)
  • Timeline of disclosure

Disclosure channels:

  • GitHub Security Advisory (primary)
  • CHANGELOG.md and release notes
  • Project README / documentation
  • Mailing list or community forum (if established)

7. Multi-Party Coordination (ISO/IEC TR 5895:2022)

7.1 When Multi-Party Coordination is Needed

We initiate multi-party coordination when a vulnerability:

  • Affects upstream dependencies (e.g., Express, Node.js, npm packages)
  • Impacts downstream projects (forks, derivatives, or integrations)
  • Is present in multiple projects sharing similar code
  • Requires involvement of a neutral coordinator (e.g., CERT/CC, MITRE)

7.2 Coordination Process (ISO/IEC TR 5895 §6.3)

When multi-party coordination is required:

  1. Identify stakeholders: List all affected vendors/projects
  2. Establish communication: Create a private coordination channel (email thread, CERT/CC case, GitHub security group)
  3. Share information: Distribute vulnerability details under disclosure embargo
  4. Coordinate timelines: Agree on a common disclosure date
  5. Synchronize patches: Align release timing across parties
  6. Joint disclosure: Publish advisories simultaneously (or in coordinated sequence)

7.3 Coordinator Roles

We may request assistance from:

  • CERT/CC (cert.org) for high-impact vulnerabilities affecting multiple vendors
  • MITRE (cve.org) for CVE assignment and management
  • GitHub Security Lab for coordination within the GitHub ecosystem
  • NIST NVD for CVE publication and enrichment

7.4 Information Sharing Restrictions

When participating in multi-party coordination:

  • All parties operate under confidentiality until the agreed disclosure date
  • Information may be shared with:
    • Directly affected vendors/projects (on need-to-know basis)
    • Neutral coordinators (CERT/CC, MITRE)
    • Security response organizations (e.g., OS/distro security teams)
  • Information must not be shared with:
    • General public
    • Media or press (except coordinated embargoed briefings)
    • Unaffected third parties

7.5 Disclosure Date Negotiation

Target disclosure date is determined by:

  • Complexity of remediation across all parties
  • Criticality and exploit likelihood
  • Default 90-day window (may be shorter or longer by agreement)
  • Active exploitation status

If consensus cannot be reached, we follow the earliest responsible disclosure date that allows for remediation.


8. Reporter Credit and Recognition (ISO/IEC 29147 §7.4.5)

8.1 Credit Policy

We recognize and credit security researchers who responsibly disclose vulnerabilities:

  • Default: Credit by name/handle in security advisories and release notes
  • Anonymous: Opt-in anonymity respected ("Anonymous researcher")
  • No credit: If reporter requests no attribution

8.2 Hall of Fame

We may maintain a Security Researchers Hall of Fame in this repository recognizing:

  • Researchers who have reported valid vulnerabilities
  • Year of report and severity classification
  • Link to public advisory (if applicable)

This section will be created when the first qualifying report is received.

8.3 Bug Bounty Program

Current status: We do not operate a paid bug bounty program at this time.

Reporters contribute out of goodwill to protect the amateur radio community. We are deeply grateful for their efforts.


9. Safe Harbor and Legal Considerations

9.1 Good-Faith Security Research

We welcome and support good-faith security research conducted in accordance with this policy. We will not pursue legal action against researchers who:

  • Act in good faith to identify and report vulnerabilities
  • Make a reasonable effort to avoid privacy violations, data destruction, and service disruption
  • Do not exploit vulnerabilities beyond what is necessary to demonstrate the issue
  • Do not access, modify, or exfiltrate data beyond minimal proof-of-concept
  • Report findings promptly and privately
  • Wait for our coordinated disclosure before public discussion

9.2 Testing Guidelines

When testing for vulnerabilities:

  • Use your own infrastructure: Test against your own deployment of OpenHamClock
  • Do not test production systems operated by others without explicit written permission
  • Avoid service degradation: No DoS attacks, no resource exhaustion, no brute-forcing
  • Respect privacy: Do not access operator data, callsigns, locations, or logs of other users
  • No automated scanning of public instances without prior approval

9.3 Responsible Disclosure Commitment

If you follow this policy, we commit to:

  • Not pursue legal action related to your research
  • Work with you to understand and validate the issue
  • Acknowledge your contribution publicly (unless you prefer anonymity)
  • Keep you informed throughout the remediation and disclosure process

10. Security Updates and Notifications

10.1 How to Stay Informed

Users and operators can stay informed of security updates via:

10.2 Applying Security Updates

When a security update is released:

  1. Review the advisory: Understand the impact and affected versions

  2. Check your version: git log -1 --pretty=format:"%H" or grep version package.json

  3. Update immediately for Critical/High severity:

    git pull
    npm install
    npm audit fix
    docker-compose up -d --build # if using Docker
  4. Verify the fix: Check that your version includes the patch commit

  5. Monitor for anomalies: Review logs for signs of prior exploitation


11. Best Practices for Operators (Self-Hosting)

To reduce your vulnerability surface:

  1. Do not expose to the public internet
    Do not port-forward OpenHamClock directly to the internet unless it is protected behind a reverse proxy with TLS, authentication, and rate limiting.

  2. Protect your .env and secrets
    Treat .env, API keys, and configuration as secrets. Never commit them to public repositories. Use restrictive file permissions (chmod 600 .env).

  3. Update regularly
    Subscribe to security advisories and apply updates promptly:

    git pull
    npm install
    npm audit
    npm audit fix # review changes before applying
  4. Run with least privilege
    Use a dedicated non-root user for the application. If using Docker, ensure the container runs as non-root.

  5. Enable security features

    • Set NODE_ENV=production
    • Configure AUTO_UPDATE_ENABLED=false if you prefer manual updates
    • Use HTTPS (TLS) for all connections
    • Enable rate limiting and authentication on admin endpoints
  6. Monitor for anomalies
    Review application logs regularly for suspicious activity (failed auth attempts, unusual API requests, etc.).

  7. Backup configuration
    Maintain backups of your configuration before applying updates.


12. Policy Review and Updates

This policy will be reviewed and updated:

  • Annually (or more frequently as needed)
  • When processes change materially
  • After significant security incidents
  • To align with evolving ISO/IEC standards

History:

  • v1.1 (2026-02-12): Enhanced ISO/IEC compliance, added multi-party coordination, severity classification, case lifecycle
  • v1.0 (Initial): Basic vulnerability disclosure policy

13. Contact and Questions

For questions about this policy (not vulnerability reports):

  • General security questions: Open a public Discussion on GitHub
  • Policy clarifications: Email chris@cjhlighting.com (non-confidential)

For vulnerability reports, see §4 Reporting a Vulnerability.


14. Acknowledgments

Thank you to the security research community for helping make OpenHamClock safer for the amateur radio community worldwide. Your responsible disclosures protect operators, preserve trust, and strengthen open-source security practices.

Metadata

This policy aligns with international standards for vulnerability disclosure and handling:

  • ISO/IEC 29147:2018 - Vulnerability disclosure
  • ISO/IEC 30111:2019 - Vulnerability handling processes
  • ISO/IEC TR 5895:2022 - Multi-party coordinated vulnerability disclosure and handling

Document version: 1.1
Last updated: 2026-02-12
Next review: 2026-08-12

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Security: accius/openhamclock

SECURITY.md

Security Policy

The OpenHamClock community takes security seriously. We appreciate responsible disclosure and will work to resolve security issues promptly to protect the amateur radio community.


1. Supported Versions

As a rapidly evolving open-source project, we primarily support the latest version of the codebase. Please reproduce issues on the latest main before reporting (when feasible).

VersionSupportedNotesEnd of Support
MainThe latest commit on the main branchN/A (rolling)
OlderPlease upgrade to the latest versionImmediate

2. Scope

2.1 In Scope

The following are within the scope of this vulnerability disclosure policy:

  • OpenHamClock application code (frontend and backend)
  • Configuration defaults and deployment artifacts in this repository
  • Build, packaging, and update mechanisms owned by this repository
  • Docker images and container configurations published by this project
  • Installation and update scripts (setup-*.sh, update.sh)

2.2 Out of Scope

The following are generally not in scope but may be considered on a case-by-case basis:

  • Third-party services and APIs consumed by OpenHamClock (report to the respective vendor)
  • Vulnerabilities in upstream dependencies that do not materially affect this project's usage
  • Issues requiring physical access to the user's device (unless remote access was enabled in an unsafe manner by default configuration)
  • Social engineering attacks against individual operators
  • Issues in end-of-life or unsupported versions

2.3 Scope Questions

If you're unsure whether something is in scope, please report it anyway and clearly mark it as a "scope question" in your submission. We will provide guidance.


3. Security Contact

For vulnerability reports, please use one of the private channels below. The maintainer acts as the primary security contact and may engage additional community members under NDA for remediation when necessary.


4. Reporting a Vulnerability (ISO/IEC 29147 §7.4)

CRITICAL: DO NOT open a public GitHub Issue for security vulnerabilities before coordination.

4.1 Reporting Channels (in order of preference)

Primary: GitHub Private Vulnerability Reporting

Secondary: Encrypted Email

4.2 What to Include in Your Report (ISO/IEC 29147 §7.4.3)

A complete vulnerability report should include:

Required:

  • Vulnerability type (e.g., SQL injection, XSS, authentication bypass, RCE, information disclosure)
  • Affected component(s) (e.g., server.js, auto-update mechanism, Docker configuration)
  • Affected version(s) (commit hash or version tag)
  • Description of the vulnerability and how it manifests
  • Steps to reproduce or proof-of-concept (minimal example preferred)
  • Impact assessment (what can an attacker achieve?)

Optional but helpful:

  • Severity assessment (your opinion: Critical/High/Medium/Low)
  • Suggested remediation or mitigation approach
  • Disclosure preferences (embargo duration, credit preferences)
  • CVE ID if you've already requested one

4.3 Sensitive Data Handling

To protect operator privacy, please avoid including:

  • Real amateur radio callsigns (use K0XXX or W1ABC as placeholders)
  • Actual grid locators (use AA00aa as placeholder)
  • Production IP addresses (use RFC5737 documentation addresses: 192.0.2.0/24)
  • API keys, tokens, session cookies, or contents of .env files
  • Personal information of operators (names, addresses, email addresses)

If sensitive data is absolutely necessary for reproduction:

  • Redact or pseudonymize it
  • Clearly explain what was redacted and why it's needed
  • Offer to provide actual data over a secure side-channel if essential

4.4 Language

Reports may be submitted in English (preferred) or other languages. We will make reasonable efforts to work with non-English reporters but may experience delays in processing.


5. Vulnerability Handling Process (ISO/IEC 30111:2019 §7)

5.1 Vulnerability Case Lifecycle

Each reported vulnerability is assigned a unique case identifier (format: OHC-YYYY-NNNN, e.g., OHC-2026-0001) and progresses through these states:

StateDescriptionTypical Duration
RECEIVEDReport received, awaiting initial review0-7 days
ASSIGNEDCase assigned to handler, analysis started1-14 days
CONFIRMEDVulnerability validated and reproduced-
REMEDIATIONFix in development and testing7-90 days
VENDOR-FIXFix ready, coordinating disclosure0-14 days
PUBLICVulnerability and fix publicly disclosedTerminal state
REJECTEDNot a vulnerability or out of scopeTerminal state

Status transitions will be communicated to the reporter via the reporting channel.

5.2 Response Timelines (ISO/IEC 29147 §7.4.4)

We commit to the following response targets:

  • Initial acknowledgment: Within 7 calendar days of receipt
  • Preliminary assessment: Within 14 calendar days of receipt
  • Regular updates: At least every 14 calendar days while case is active
  • Target remediation: Within 90 days for Critical/High severity issues

Note: Complex issues, multi-party coordination, or resource constraints may extend timelines. We will communicate delays proactively.

5.3 Severity Classification (CVSS v3.1)

We use CVSS v3.1 base scores to classify severity:

SeverityCVSS ScoreResponse PriorityTypical Fix Timeline
Critical9.0 - 10.0Immediate7-30 days
High7.0 - 8.9Urgent30-60 days
Medium4.0 - 6.9Normal60-90 days
Low0.1 - 3.9Best effortNext release cycle

Reporters are encouraged to provide their own CVSS assessment, but the PSIRT makes the final determination.

5.4 Remediation Development (ISO/IEC 30111 §7.5)

Remediation may take the form of:

  1. Code fix: Patch applied to the codebase
  2. Configuration change: Secure defaults or documentation update
  3. Workaround: Interim mitigation until a full fix is available
  4. No fix: Issue is accepted as a limitation (risk accepted, documented)

All fixes undergo internal testing before release. For Critical issues, we may request assistance from the reporter for verification.


6. Coordinated Disclosure (ISO/IEC 29147 §7.5)

6.1 Disclosure Timeline

By default, we follow a 90-day coordinated disclosure timeline from initial report:

  • Day 0: Vulnerability reported
  • Day 7: Initial acknowledgment and triage
  • Day 14-90: Remediation development, testing, and coordination
  • Day 90: Public disclosure (advisory + fix), unless extended by mutual agreement

6.2 Early Disclosure

We may disclose earlier than 90 days if:

  • Fix is ready and tested
  • No multi-party coordination is required
  • Reporter agrees to early disclosure
  • Active exploitation is detected in the wild (emergency disclosure)

6.3 Embargo Extensions

The 90-day timeline may be extended if:

  • Complexity requires additional development time (negotiated with reporter)
  • Multi-party coordination is in progress (see §7)
  • Affected component is in a third-party dependency awaiting upstream fix

Maximum embargo: Typically 180 days from initial report, except in exceptional circumstances.

6.4 Emergency Disclosure

If we become aware of active exploitation or imminent public disclosure, we may:

  1. Immediately publish a security advisory with available mitigations
  2. Notify affected parties via established channels
  3. Release a patch or workaround, even if incomplete

We will make reasonable efforts to notify the reporter before emergency disclosure.

6.5 Public Disclosure Content (ISO/IEC 29147 §7.5.3)

Our security advisories include:

  • Vulnerability description (non-technical summary + technical details)
  • Affected versions and components
  • CVE identifier (if assigned)
  • CVSS score and severity rating
  • Impact and exploit conditions
  • Remediation steps (upgrade path, workarounds, configuration changes)
  • Credit to reporter (unless anonymity requested)
  • Timeline of disclosure

Disclosure channels:

  • GitHub Security Advisory (primary)
  • CHANGELOG.md and release notes
  • Project README / documentation
  • Mailing list or community forum (if established)

7. Multi-Party Coordination (ISO/IEC TR 5895:2022)

7.1 When Multi-Party Coordination is Needed

We initiate multi-party coordination when a vulnerability:

  • Affects upstream dependencies (e.g., Express, Node.js, npm packages)
  • Impacts downstream projects (forks, derivatives, or integrations)
  • Is present in multiple projects sharing similar code
  • Requires involvement of a neutral coordinator (e.g., CERT/CC, MITRE)

7.2 Coordination Process (ISO/IEC TR 5895 §6.3)

When multi-party coordination is required:

  1. Identify stakeholders: List all affected vendors/projects
  2. Establish communication: Create a private coordination channel (email thread, CERT/CC case, GitHub security group)
  3. Share information: Distribute vulnerability details under disclosure embargo
  4. Coordinate timelines: Agree on a common disclosure date
  5. Synchronize patches: Align release timing across parties
  6. Joint disclosure: Publish advisories simultaneously (or in coordinated sequence)

7.3 Coordinator Roles

We may request assistance from:

  • CERT/CC (cert.org) for high-impact vulnerabilities affecting multiple vendors
  • MITRE (cve.org) for CVE assignment and management
  • GitHub Security Lab for coordination within the GitHub ecosystem
  • NIST NVD for CVE publication and enrichment

7.4 Information Sharing Restrictions

When participating in multi-party coordination:

  • All parties operate under confidentiality until the agreed disclosure date
  • Information may be shared with:
    • Directly affected vendors/projects (on need-to-know basis)
    • Neutral coordinators (CERT/CC, MITRE)
    • Security response organizations (e.g., OS/distro security teams)
  • Information must not be shared with:
    • General public
    • Media or press (except coordinated embargoed briefings)
    • Unaffected third parties

7.5 Disclosure Date Negotiation

Target disclosure date is determined by:

  • Complexity of remediation across all parties
  • Criticality and exploit likelihood
  • Default 90-day window (may be shorter or longer by agreement)
  • Active exploitation status

If consensus cannot be reached, we follow the earliest responsible disclosure date that allows for remediation.


8. Reporter Credit and Recognition (ISO/IEC 29147 §7.4.5)

8.1 Credit Policy

We recognize and credit security researchers who responsibly disclose vulnerabilities:

  • Default: Credit by name/handle in security advisories and release notes
  • Anonymous: Opt-in anonymity respected ("Anonymous researcher")
  • No credit: If reporter requests no attribution

8.2 Hall of Fame

We may maintain a Security Researchers Hall of Fame in this repository recognizing:

  • Researchers who have reported valid vulnerabilities
  • Year of report and severity classification
  • Link to public advisory (if applicable)

This section will be created when the first qualifying report is received.

8.3 Bug Bounty Program

Current status: We do not operate a paid bug bounty program at this time.

Reporters contribute out of goodwill to protect the amateur radio community. We are deeply grateful for their efforts.


9. Safe Harbor and Legal Considerations

9.1 Good-Faith Security Research

We welcome and support good-faith security research conducted in accordance with this policy. We will not pursue legal action against researchers who:

  • Act in good faith to identify and report vulnerabilities
  • Make a reasonable effort to avoid privacy violations, data destruction, and service disruption
  • Do not exploit vulnerabilities beyond what is necessary to demonstrate the issue
  • Do not access, modify, or exfiltrate data beyond minimal proof-of-concept
  • Report findings promptly and privately
  • Wait for our coordinated disclosure before public discussion

9.2 Testing Guidelines

When testing for vulnerabilities:

  • Use your own infrastructure: Test against your own deployment of OpenHamClock
  • Do not test production systems operated by others without explicit written permission
  • Avoid service degradation: No DoS attacks, no resource exhaustion, no brute-forcing
  • Respect privacy: Do not access operator data, callsigns, locations, or logs of other users
  • No automated scanning of public instances without prior approval

9.3 Responsible Disclosure Commitment

If you follow this policy, we commit to:

  • Not pursue legal action related to your research
  • Work with you to understand and validate the issue
  • Acknowledge your contribution publicly (unless you prefer anonymity)
  • Keep you informed throughout the remediation and disclosure process

10. Security Updates and Notifications

10.1 How to Stay Informed

Users and operators can stay informed of security updates via:

10.2 Applying Security Updates

When a security update is released:

  1. Review the advisory: Understand the impact and affected versions

  2. Check your version: git log -1 --pretty=format:"%H" or grep version package.json

  3. Update immediately for Critical/High severity:

    git pull
    npm install
    npm audit fix
    docker-compose up -d --build # if using Docker
  4. Verify the fix: Check that your version includes the patch commit

  5. Monitor for anomalies: Review logs for signs of prior exploitation


11. Best Practices for Operators (Self-Hosting)

To reduce your vulnerability surface:

  1. Do not expose to the public internet
    Do not port-forward OpenHamClock directly to the internet unless it is protected behind a reverse proxy with TLS, authentication, and rate limiting.

  2. Protect your .env and secrets
    Treat .env, API keys, and configuration as secrets. Never commit them to public repositories. Use restrictive file permissions (chmod 600 .env).

  3. Update regularly
    Subscribe to security advisories and apply updates promptly:

    git pull
    npm install
    npm audit
    npm audit fix # review changes before applying
  4. Run with least privilege
    Use a dedicated non-root user for the application. If using Docker, ensure the container runs as non-root.

  5. Enable security features

    • Set NODE_ENV=production
    • Configure AUTO_UPDATE_ENABLED=false if you prefer manual updates
    • Use HTTPS (TLS) for all connections
    • Enable rate limiting and authentication on admin endpoints
  6. Monitor for anomalies
    Review application logs regularly for suspicious activity (failed auth attempts, unusual API requests, etc.).

  7. Backup configuration
    Maintain backups of your configuration before applying updates.


12. Policy Review and Updates

This policy will be reviewed and updated:

  • Annually (or more frequently as needed)
  • When processes change materially
  • After significant security incidents
  • To align with evolving ISO/IEC standards

History:

  • v1.1 (2026-02-12): Enhanced ISO/IEC compliance, added multi-party coordination, severity classification, case lifecycle
  • v1.0 (Initial): Basic vulnerability disclosure policy

13. Contact and Questions

For questions about this policy (not vulnerability reports):

  • General security questions: Open a public Discussion on GitHub
  • Policy clarifications: Email chris@cjhlighting.com (non-confidential)

For vulnerability reports, see §4 Reporting a Vulnerability.


14. Acknowledgments

Thank you to the security research community for helping make OpenHamClock safer for the amateur radio community worldwide. Your responsible disclosures protect operators, preserve trust, and strengthen open-source security practices.

Metadata

This policy aligns with international standards for vulnerability disclosure and handling:

  • ISO/IEC 29147:2018 - Vulnerability disclosure
  • ISO/IEC 30111:2019 - Vulnerability handling processes
  • ISO/IEC TR 5895:2022 - Multi-party coordinated vulnerability disclosure and handling

Document version: 1.1
Last updated: 2026-02-12
Next review: 2026-08-12

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Security: accius/openhamclock

SECURITY.md

Security Policy

The OpenHamClock community takes security seriously. We appreciate responsible disclosure and will work to resolve security issues promptly to protect the amateur radio community.


1. Supported Versions

As a rapidly evolving open-source project, we primarily support the latest version of the codebase. Please reproduce issues on the latest main before reporting (when feasible).

VersionSupportedNotesEnd of Support
MainThe latest commit on the main branchN/A (rolling)
OlderPlease upgrade to the latest versionImmediate

2. Scope

2.1 In Scope

The following are within the scope of this vulnerability disclosure policy:

  • OpenHamClock application code (frontend and backend)
  • Configuration defaults and deployment artifacts in this repository
  • Build, packaging, and update mechanisms owned by this repository
  • Docker images and container configurations published by this project
  • Installation and update scripts (setup-*.sh, update.sh)

2.2 Out of Scope

The following are generally not in scope but may be considered on a case-by-case basis:

  • Third-party services and APIs consumed by OpenHamClock (report to the respective vendor)
  • Vulnerabilities in upstream dependencies that do not materially affect this project's usage
  • Issues requiring physical access to the user's device (unless remote access was enabled in an unsafe manner by default configuration)
  • Social engineering attacks against individual operators
  • Issues in end-of-life or unsupported versions

2.3 Scope Questions

If you're unsure whether something is in scope, please report it anyway and clearly mark it as a "scope question" in your submission. We will provide guidance.


3. Security Contact

For vulnerability reports, please use one of the private channels below. The maintainer acts as the primary security contact and may engage additional community members under NDA for remediation when necessary.


4. Reporting a Vulnerability (ISO/IEC 29147 §7.4)

CRITICAL: DO NOT open a public GitHub Issue for security vulnerabilities before coordination.

4.1 Reporting Channels (in order of preference)

Primary: GitHub Private Vulnerability Reporting

Secondary: Encrypted Email

4.2 What to Include in Your Report (ISO/IEC 29147 §7.4.3)

A complete vulnerability report should include:

Required:

  • Vulnerability type (e.g., SQL injection, XSS, authentication bypass, RCE, information disclosure)
  • Affected component(s) (e.g., server.js, auto-update mechanism, Docker configuration)
  • Affected version(s) (commit hash or version tag)
  • Description of the vulnerability and how it manifests
  • Steps to reproduce or proof-of-concept (minimal example preferred)
  • Impact assessment (what can an attacker achieve?)

Optional but helpful:

  • Severity assessment (your opinion: Critical/High/Medium/Low)
  • Suggested remediation or mitigation approach
  • Disclosure preferences (embargo duration, credit preferences)
  • CVE ID if you've already requested one

4.3 Sensitive Data Handling

To protect operator privacy, please avoid including:

  • Real amateur radio callsigns (use K0XXX or W1ABC as placeholders)
  • Actual grid locators (use AA00aa as placeholder)
  • Production IP addresses (use RFC5737 documentation addresses: 192.0.2.0/24)
  • API keys, tokens, session cookies, or contents of .env files
  • Personal information of operators (names, addresses, email addresses)

If sensitive data is absolutely necessary for reproduction:

  • Redact or pseudonymize it
  • Clearly explain what was redacted and why it's needed
  • Offer to provide actual data over a secure side-channel if essential

4.4 Language

Reports may be submitted in English (preferred) or other languages. We will make reasonable efforts to work with non-English reporters but may experience delays in processing.


5. Vulnerability Handling Process (ISO/IEC 30111:2019 §7)

5.1 Vulnerability Case Lifecycle

Each reported vulnerability is assigned a unique case identifier (format: OHC-YYYY-NNNN, e.g., OHC-2026-0001) and progresses through these states:

StateDescriptionTypical Duration
RECEIVEDReport received, awaiting initial review0-7 days
ASSIGNEDCase assigned to handler, analysis started1-14 days
CONFIRMEDVulnerability validated and reproduced-
REMEDIATIONFix in development and testing7-90 days
VENDOR-FIXFix ready, coordinating disclosure0-14 days
PUBLICVulnerability and fix publicly disclosedTerminal state
REJECTEDNot a vulnerability or out of scopeTerminal state

Status transitions will be communicated to the reporter via the reporting channel.

5.2 Response Timelines (ISO/IEC 29147 §7.4.4)

We commit to the following response targets:

  • Initial acknowledgment: Within 7 calendar days of receipt
  • Preliminary assessment: Within 14 calendar days of receipt
  • Regular updates: At least every 14 calendar days while case is active
  • Target remediation: Within 90 days for Critical/High severity issues

Note: Complex issues, multi-party coordination, or resource constraints may extend timelines. We will communicate delays proactively.

5.3 Severity Classification (CVSS v3.1)

We use CVSS v3.1 base scores to classify severity:

SeverityCVSS ScoreResponse PriorityTypical Fix Timeline
Critical9.0 - 10.0Immediate7-30 days
High7.0 - 8.9Urgent30-60 days
Medium4.0 - 6.9Normal60-90 days
Low0.1 - 3.9Best effortNext release cycle

Reporters are encouraged to provide their own CVSS assessment, but the PSIRT makes the final determination.

5.4 Remediation Development (ISO/IEC 30111 §7.5)

Remediation may take the form of:

  1. Code fix: Patch applied to the codebase
  2. Configuration change: Secure defaults or documentation update
  3. Workaround: Interim mitigation until a full fix is available
  4. No fix: Issue is accepted as a limitation (risk accepted, documented)

All fixes undergo internal testing before release. For Critical issues, we may request assistance from the reporter for verification.


6. Coordinated Disclosure (ISO/IEC 29147 §7.5)

6.1 Disclosure Timeline

By default, we follow a 90-day coordinated disclosure timeline from initial report:

  • Day 0: Vulnerability reported
  • Day 7: Initial acknowledgment and triage
  • Day 14-90: Remediation development, testing, and coordination
  • Day 90: Public disclosure (advisory + fix), unless extended by mutual agreement

6.2 Early Disclosure

We may disclose earlier than 90 days if:

  • Fix is ready and tested
  • No multi-party coordination is required
  • Reporter agrees to early disclosure
  • Active exploitation is detected in the wild (emergency disclosure)

6.3 Embargo Extensions

The 90-day timeline may be extended if:

  • Complexity requires additional development time (negotiated with reporter)
  • Multi-party coordination is in progress (see §7)
  • Affected component is in a third-party dependency awaiting upstream fix

Maximum embargo: Typically 180 days from initial report, except in exceptional circumstances.

6.4 Emergency Disclosure

If we become aware of active exploitation or imminent public disclosure, we may:

  1. Immediately publish a security advisory with available mitigations
  2. Notify affected parties via established channels
  3. Release a patch or workaround, even if incomplete

We will make reasonable efforts to notify the reporter before emergency disclosure.

6.5 Public Disclosure Content (ISO/IEC 29147 §7.5.3)

Our security advisories include:

  • Vulnerability description (non-technical summary + technical details)
  • Affected versions and components
  • CVE identifier (if assigned)
  • CVSS score and severity rating
  • Impact and exploit conditions
  • Remediation steps (upgrade path, workarounds, configuration changes)
  • Credit to reporter (unless anonymity requested)
  • Timeline of disclosure

Disclosure channels:

  • GitHub Security Advisory (primary)
  • CHANGELOG.md and release notes
  • Project README / documentation
  • Mailing list or community forum (if established)

7. Multi-Party Coordination (ISO/IEC TR 5895:2022)

7.1 When Multi-Party Coordination is Needed

We initiate multi-party coordination when a vulnerability:

  • Affects upstream dependencies (e.g., Express, Node.js, npm packages)
  • Impacts downstream projects (forks, derivatives, or integrations)
  • Is present in multiple projects sharing similar code
  • Requires involvement of a neutral coordinator (e.g., CERT/CC, MITRE)

7.2 Coordination Process (ISO/IEC TR 5895 §6.3)

When multi-party coordination is required:

  1. Identify stakeholders: List all affected vendors/projects
  2. Establish communication: Create a private coordination channel (email thread, CERT/CC case, GitHub security group)
  3. Share information: Distribute vulnerability details under disclosure embargo
  4. Coordinate timelines: Agree on a common disclosure date
  5. Synchronize patches: Align release timing across parties
  6. Joint disclosure: Publish advisories simultaneously (or in coordinated sequence)

7.3 Coordinator Roles

We may request assistance from:

  • CERT/CC (cert.org) for high-impact vulnerabilities affecting multiple vendors
  • MITRE (cve.org) for CVE assignment and management
  • GitHub Security Lab for coordination within the GitHub ecosystem
  • NIST NVD for CVE publication and enrichment

7.4 Information Sharing Restrictions

When participating in multi-party coordination:

  • All parties operate under confidentiality until the agreed disclosure date
  • Information may be shared with:
    • Directly affected vendors/projects (on need-to-know basis)
    • Neutral coordinators (CERT/CC, MITRE)
    • Security response organizations (e.g., OS/distro security teams)
  • Information must not be shared with:
    • General public
    • Media or press (except coordinated embargoed briefings)
    • Unaffected third parties

7.5 Disclosure Date Negotiation

Target disclosure date is determined by:

  • Complexity of remediation across all parties
  • Criticality and exploit likelihood
  • Default 90-day window (may be shorter or longer by agreement)
  • Active exploitation status

If consensus cannot be reached, we follow the earliest responsible disclosure date that allows for remediation.


8. Reporter Credit and Recognition (ISO/IEC 29147 §7.4.5)

8.1 Credit Policy

We recognize and credit security researchers who responsibly disclose vulnerabilities:

  • Default: Credit by name/handle in security advisories and release notes
  • Anonymous: Opt-in anonymity respected ("Anonymous researcher")
  • No credit: If reporter requests no attribution

8.2 Hall of Fame

We may maintain a Security Researchers Hall of Fame in this repository recognizing:

  • Researchers who have reported valid vulnerabilities
  • Year of report and severity classification
  • Link to public advisory (if applicable)

This section will be created when the first qualifying report is received.

8.3 Bug Bounty Program

Current status: We do not operate a paid bug bounty program at this time.

Reporters contribute out of goodwill to protect the amateur radio community. We are deeply grateful for their efforts.


9. Safe Harbor and Legal Considerations

9.1 Good-Faith Security Research

We welcome and support good-faith security research conducted in accordance with this policy. We will not pursue legal action against researchers who:

  • Act in good faith to identify and report vulnerabilities
  • Make a reasonable effort to avoid privacy violations, data destruction, and service disruption
  • Do not exploit vulnerabilities beyond what is necessary to demonstrate the issue
  • Do not access, modify, or exfiltrate data beyond minimal proof-of-concept
  • Report findings promptly and privately
  • Wait for our coordinated disclosure before public discussion

9.2 Testing Guidelines

When testing for vulnerabilities:

  • Use your own infrastructure: Test against your own deployment of OpenHamClock
  • Do not test production systems operated by others without explicit written permission
  • Avoid service degradation: No DoS attacks, no resource exhaustion, no brute-forcing
  • Respect privacy: Do not access operator data, callsigns, locations, or logs of other users
  • No automated scanning of public instances without prior approval

9.3 Responsible Disclosure Commitment

If you follow this policy, we commit to:

  • Not pursue legal action related to your research
  • Work with you to understand and validate the issue
  • Acknowledge your contribution publicly (unless you prefer anonymity)
  • Keep you informed throughout the remediation and disclosure process

10. Security Updates and Notifications

10.1 How to Stay Informed

Users and operators can stay informed of security updates via:

10.2 Applying Security Updates

When a security update is released:

  1. Review the advisory: Understand the impact and affected versions

  2. Check your version: git log -1 --pretty=format:"%H" or grep version package.json

  3. Update immediately for Critical/High severity:

    git pull
    npm install
    npm audit fix
    docker-compose up -d --build # if using Docker
  4. Verify the fix: Check that your version includes the patch commit

  5. Monitor for anomalies: Review logs for signs of prior exploitation


11. Best Practices for Operators (Self-Hosting)

To reduce your vulnerability surface:

  1. Do not expose to the public internet
    Do not port-forward OpenHamClock directly to the internet unless it is protected behind a reverse proxy with TLS, authentication, and rate limiting.

  2. Protect your .env and secrets
    Treat .env, API keys, and configuration as secrets. Never commit them to public repositories. Use restrictive file permissions (chmod 600 .env).

  3. Update regularly
    Subscribe to security advisories and apply updates promptly:

    git pull
    npm install
    npm audit
    npm audit fix # review changes before applying
  4. Run with least privilege
    Use a dedicated non-root user for the application. If using Docker, ensure the container runs as non-root.

  5. Enable security features

    • Set NODE_ENV=production
    • Configure AUTO_UPDATE_ENABLED=false if you prefer manual updates
    • Use HTTPS (TLS) for all connections
    • Enable rate limiting and authentication on admin endpoints
  6. Monitor for anomalies
    Review application logs regularly for suspicious activity (failed auth attempts, unusual API requests, etc.).

  7. Backup configuration
    Maintain backups of your configuration before applying updates.


12. Policy Review and Updates

This policy will be reviewed and updated:

  • Annually (or more frequently as needed)
  • When processes change materially
  • After significant security incidents
  • To align with evolving ISO/IEC standards

History:

  • v1.1 (2026-02-12): Enhanced ISO/IEC compliance, added multi-party coordination, severity classification, case lifecycle
  • v1.0 (Initial): Basic vulnerability disclosure policy

13. Contact and Questions

For questions about this policy (not vulnerability reports):

  • General security questions: Open a public Discussion on GitHub
  • Policy clarifications: Email chris@cjhlighting.com (non-confidential)

For vulnerability reports, see §4 Reporting a Vulnerability.


14. Acknowledgments

Thank you to the security research community for helping make OpenHamClock safer for the amateur radio community worldwide. Your responsible disclosures protect operators, preserve trust, and strengthen open-source security practices.

Metadata

This policy aligns with international standards for vulnerability disclosure and handling:

  • ISO/IEC 29147:2018 - Vulnerability disclosure
  • ISO/IEC 30111:2019 - Vulnerability handling processes
  • ISO/IEC TR 5895:2022 - Multi-party coordinated vulnerability disclosure and handling

Document version: 1.1
Last updated: 2026-02-12
Next review: 2026-08-12

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Security: accius/openhamclock

SECURITY.md

Security Policy

The OpenHamClock community takes security seriously. We appreciate responsible disclosure and will work to resolve security issues promptly to protect the amateur radio community.


1. Supported Versions

As a rapidly evolving open-source project, we primarily support the latest version of the codebase. Please reproduce issues on the latest main before reporting (when feasible).

VersionSupportedNotesEnd of Support
MainThe latest commit on the main branchN/A (rolling)
OlderPlease upgrade to the latest versionImmediate

2. Scope

2.1 In Scope

The following are within the scope of this vulnerability disclosure policy:

  • OpenHamClock application code (frontend and backend)
  • Configuration defaults and deployment artifacts in this repository
  • Build, packaging, and update mechanisms owned by this repository
  • Docker images and container configurations published by this project
  • Installation and update scripts (setup-*.sh, update.sh)

2.2 Out of Scope

The following are generally not in scope but may be considered on a case-by-case basis:

  • Third-party services and APIs consumed by OpenHamClock (report to the respective vendor)
  • Vulnerabilities in upstream dependencies that do not materially affect this project's usage
  • Issues requiring physical access to the user's device (unless remote access was enabled in an unsafe manner by default configuration)
  • Social engineering attacks against individual operators
  • Issues in end-of-life or unsupported versions

2.3 Scope Questions

If you're unsure whether something is in scope, please report it anyway and clearly mark it as a "scope question" in your submission. We will provide guidance.


3. Security Contact

For vulnerability reports, please use one of the private channels below. The maintainer acts as the primary security contact and may engage additional community members under NDA for remediation when necessary.


4. Reporting a Vulnerability (ISO/IEC 29147 §7.4)

CRITICAL: DO NOT open a public GitHub Issue for security vulnerabilities before coordination.

4.1 Reporting Channels (in order of preference)

Primary: GitHub Private Vulnerability Reporting

Secondary: Encrypted Email

4.2 What to Include in Your Report (ISO/IEC 29147 §7.4.3)

A complete vulnerability report should include:

Required:

  • Vulnerability type (e.g., SQL injection, XSS, authentication bypass, RCE, information disclosure)
  • Affected component(s) (e.g., server.js, auto-update mechanism, Docker configuration)
  • Affected version(s) (commit hash or version tag)
  • Description of the vulnerability and how it manifests
  • Steps to reproduce or proof-of-concept (minimal example preferred)
  • Impact assessment (what can an attacker achieve?)

Optional but helpful:

  • Severity assessment (your opinion: Critical/High/Medium/Low)
  • Suggested remediation or mitigation approach
  • Disclosure preferences (embargo duration, credit preferences)
  • CVE ID if you've already requested one

4.3 Sensitive Data Handling

To protect operator privacy, please avoid including:

  • Real amateur radio callsigns (use K0XXX or W1ABC as placeholders)
  • Actual grid locators (use AA00aa as placeholder)
  • Production IP addresses (use RFC5737 documentation addresses: 192.0.2.0/24)
  • API keys, tokens, session cookies, or contents of .env files
  • Personal information of operators (names, addresses, email addresses)

If sensitive data is absolutely necessary for reproduction:

  • Redact or pseudonymize it
  • Clearly explain what was redacted and why it's needed
  • Offer to provide actual data over a secure side-channel if essential

4.4 Language

Reports may be submitted in English (preferred) or other languages. We will make reasonable efforts to work with non-English reporters but may experience delays in processing.


5. Vulnerability Handling Process (ISO/IEC 30111:2019 §7)

5.1 Vulnerability Case Lifecycle

Each reported vulnerability is assigned a unique case identifier (format: OHC-YYYY-NNNN, e.g., OHC-2026-0001) and progresses through these states:

StateDescriptionTypical Duration
RECEIVEDReport received, awaiting initial review0-7 days
ASSIGNEDCase assigned to handler, analysis started1-14 days
CONFIRMEDVulnerability validated and reproduced-
REMEDIATIONFix in development and testing7-90 days
VENDOR-FIXFix ready, coordinating disclosure0-14 days
PUBLICVulnerability and fix publicly disclosedTerminal state
REJECTEDNot a vulnerability or out of scopeTerminal state

Status transitions will be communicated to the reporter via the reporting channel.

5.2 Response Timelines (ISO/IEC 29147 §7.4.4)

We commit to the following response targets:

  • Initial acknowledgment: Within 7 calendar days of receipt
  • Preliminary assessment: Within 14 calendar days of receipt
  • Regular updates: At least every 14 calendar days while case is active
  • Target remediation: Within 90 days for Critical/High severity issues

Note: Complex issues, multi-party coordination, or resource constraints may extend timelines. We will communicate delays proactively.

5.3 Severity Classification (CVSS v3.1)

We use CVSS v3.1 base scores to classify severity:

SeverityCVSS ScoreResponse PriorityTypical Fix Timeline
Critical9.0 - 10.0Immediate7-30 days
High7.0 - 8.9Urgent30-60 days
Medium4.0 - 6.9Normal60-90 days
Low0.1 - 3.9Best effortNext release cycle

Reporters are encouraged to provide their own CVSS assessment, but the PSIRT makes the final determination.

5.4 Remediation Development (ISO/IEC 30111 §7.5)

Remediation may take the form of:

  1. Code fix: Patch applied to the codebase
  2. Configuration change: Secure defaults or documentation update
  3. Workaround: Interim mitigation until a full fix is available
  4. No fix: Issue is accepted as a limitation (risk accepted, documented)

All fixes undergo internal testing before release. For Critical issues, we may request assistance from the reporter for verification.


6. Coordinated Disclosure (ISO/IEC 29147 §7.5)

6.1 Disclosure Timeline

By default, we follow a 90-day coordinated disclosure timeline from initial report:

  • Day 0: Vulnerability reported
  • Day 7: Initial acknowledgment and triage
  • Day 14-90: Remediation development, testing, and coordination
  • Day 90: Public disclosure (advisory + fix), unless extended by mutual agreement

6.2 Early Disclosure

We may disclose earlier than 90 days if:

  • Fix is ready and tested
  • No multi-party coordination is required
  • Reporter agrees to early disclosure
  • Active exploitation is detected in the wild (emergency disclosure)

6.3 Embargo Extensions

The 90-day timeline may be extended if:

  • Complexity requires additional development time (negotiated with reporter)
  • Multi-party coordination is in progress (see §7)
  • Affected component is in a third-party dependency awaiting upstream fix

Maximum embargo: Typically 180 days from initial report, except in exceptional circumstances.

6.4 Emergency Disclosure

If we become aware of active exploitation or imminent public disclosure, we may:

  1. Immediately publish a security advisory with available mitigations
  2. Notify affected parties via established channels
  3. Release a patch or workaround, even if incomplete

We will make reasonable efforts to notify the reporter before emergency disclosure.

6.5 Public Disclosure Content (ISO/IEC 29147 §7.5.3)

Our security advisories include:

  • Vulnerability description (non-technical summary + technical details)
  • Affected versions and components
  • CVE identifier (if assigned)
  • CVSS score and severity rating
  • Impact and exploit conditions
  • Remediation steps (upgrade path, workarounds, configuration changes)
  • Credit to reporter (unless anonymity requested)
  • Timeline of disclosure

Disclosure channels:

  • GitHub Security Advisory (primary)
  • CHANGELOG.md and release notes
  • Project README / documentation
  • Mailing list or community forum (if established)

7. Multi-Party Coordination (ISO/IEC TR 5895:2022)

7.1 When Multi-Party Coordination is Needed

We initiate multi-party coordination when a vulnerability:

  • Affects upstream dependencies (e.g., Express, Node.js, npm packages)
  • Impacts downstream projects (forks, derivatives, or integrations)
  • Is present in multiple projects sharing similar code
  • Requires involvement of a neutral coordinator (e.g., CERT/CC, MITRE)

7.2 Coordination Process (ISO/IEC TR 5895 §6.3)

When multi-party coordination is required:

  1. Identify stakeholders: List all affected vendors/projects
  2. Establish communication: Create a private coordination channel (email thread, CERT/CC case, GitHub security group)
  3. Share information: Distribute vulnerability details under disclosure embargo
  4. Coordinate timelines: Agree on a common disclosure date
  5. Synchronize patches: Align release timing across parties
  6. Joint disclosure: Publish advisories simultaneously (or in coordinated sequence)

7.3 Coordinator Roles

We may request assistance from:

  • CERT/CC (cert.org) for high-impact vulnerabilities affecting multiple vendors
  • MITRE (cve.org) for CVE assignment and management
  • GitHub Security Lab for coordination within the GitHub ecosystem
  • NIST NVD for CVE publication and enrichment

7.4 Information Sharing Restrictions

When participating in multi-party coordination:

  • All parties operate under confidentiality until the agreed disclosure date
  • Information may be shared with:
    • Directly affected vendors/projects (on need-to-know basis)
    • Neutral coordinators (CERT/CC, MITRE)
    • Security response organizations (e.g., OS/distro security teams)
  • Information must not be shared with:
    • General public
    • Media or press (except coordinated embargoed briefings)
    • Unaffected third parties

7.5 Disclosure Date Negotiation

Target disclosure date is determined by:

  • Complexity of remediation across all parties
  • Criticality and exploit likelihood
  • Default 90-day window (may be shorter or longer by agreement)
  • Active exploitation status

If consensus cannot be reached, we follow the earliest responsible disclosure date that allows for remediation.


8. Reporter Credit and Recognition (ISO/IEC 29147 §7.4.5)

8.1 Credit Policy

We recognize and credit security researchers who responsibly disclose vulnerabilities:

  • Default: Credit by name/handle in security advisories and release notes
  • Anonymous: Opt-in anonymity respected ("Anonymous researcher")
  • No credit: If reporter requests no attribution

8.2 Hall of Fame

We may maintain a Security Researchers Hall of Fame in this repository recognizing:

  • Researchers who have reported valid vulnerabilities
  • Year of report and severity classification
  • Link to public advisory (if applicable)

This section will be created when the first qualifying report is received.

8.3 Bug Bounty Program

Current status: We do not operate a paid bug bounty program at this time.

Reporters contribute out of goodwill to protect the amateur radio community. We are deeply grateful for their efforts.


9. Safe Harbor and Legal Considerations

9.1 Good-Faith Security Research

We welcome and support good-faith security research conducted in accordance with this policy. We will not pursue legal action against researchers who:

  • Act in good faith to identify and report vulnerabilities
  • Make a reasonable effort to avoid privacy violations, data destruction, and service disruption
  • Do not exploit vulnerabilities beyond what is necessary to demonstrate the issue
  • Do not access, modify, or exfiltrate data beyond minimal proof-of-concept
  • Report findings promptly and privately
  • Wait for our coordinated disclosure before public discussion

9.2 Testing Guidelines

When testing for vulnerabilities:

  • Use your own infrastructure: Test against your own deployment of OpenHamClock
  • Do not test production systems operated by others without explicit written permission
  • Avoid service degradation: No DoS attacks, no resource exhaustion, no brute-forcing
  • Respect privacy: Do not access operator data, callsigns, locations, or logs of other users
  • No automated scanning of public instances without prior approval

9.3 Responsible Disclosure Commitment

If you follow this policy, we commit to:

  • Not pursue legal action related to your research
  • Work with you to understand and validate the issue
  • Acknowledge your contribution publicly (unless you prefer anonymity)
  • Keep you informed throughout the remediation and disclosure process

10. Security Updates and Notifications

10.1 How to Stay Informed

Users and operators can stay informed of security updates via:

10.2 Applying Security Updates

When a security update is released:

  1. Review the advisory: Understand the impact and affected versions

  2. Check your version: git log -1 --pretty=format:"%H" or grep version package.json

  3. Update immediately for Critical/High severity:

    git pull
    npm install
    npm audit fix
    docker-compose up -d --build # if using Docker
  4. Verify the fix: Check that your version includes the patch commit

  5. Monitor for anomalies: Review logs for signs of prior exploitation


11. Best Practices for Operators (Self-Hosting)

To reduce your vulnerability surface:

  1. Do not expose to the public internet
    Do not port-forward OpenHamClock directly to the internet unless it is protected behind a reverse proxy with TLS, authentication, and rate limiting.

  2. Protect your .env and secrets
    Treat .env, API keys, and configuration as secrets. Never commit them to public repositories. Use restrictive file permissions (chmod 600 .env).

  3. Update regularly
    Subscribe to security advisories and apply updates promptly:

    git pull
    npm install
    npm audit
    npm audit fix # review changes before applying
  4. Run with least privilege
    Use a dedicated non-root user for the application. If using Docker, ensure the container runs as non-root.

  5. Enable security features

    • Set NODE_ENV=production
    • Configure AUTO_UPDATE_ENABLED=false if you prefer manual updates
    • Use HTTPS (TLS) for all connections
    • Enable rate limiting and authentication on admin endpoints
  6. Monitor for anomalies
    Review application logs regularly for suspicious activity (failed auth attempts, unusual API requests, etc.).

  7. Backup configuration
    Maintain backups of your configuration before applying updates.


12. Policy Review and Updates

This policy will be reviewed and updated:

  • Annually (or more frequently as needed)
  • When processes change materially
  • After significant security incidents
  • To align with evolving ISO/IEC standards

History:

  • v1.1 (2026-02-12): Enhanced ISO/IEC compliance, added multi-party coordination, severity classification, case lifecycle
  • v1.0 (Initial): Basic vulnerability disclosure policy

13. Contact and Questions

For questions about this policy (not vulnerability reports):

  • General security questions: Open a public Discussion on GitHub
  • Policy clarifications: Email chris@cjhlighting.com (non-confidential)

For vulnerability reports, see §4 Reporting a Vulnerability.


14. Acknowledgments

Thank you to the security research community for helping make OpenHamClock safer for the amateur radio community worldwide. Your responsible disclosures protect operators, preserve trust, and strengthen open-source security practices.

Metadata

This policy aligns with international standards for vulnerability disclosure and handling:

  • ISO/IEC 29147:2018 - Vulnerability disclosure
  • ISO/IEC 30111:2019 - Vulnerability handling processes
  • ISO/IEC TR 5895:2022 - Multi-party coordinated vulnerability disclosure and handling

Document version: 1.1
Last updated: 2026-02-12
Next review: 2026-08-12

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Security: accius/openhamclock

SECURITY.md

Security Policy

The OpenHamClock community takes security seriously. We appreciate responsible disclosure and will work to resolve security issues promptly to protect the amateur radio community.


1. Supported Versions

As a rapidly evolving open-source project, we primarily support the latest version of the codebase. Please reproduce issues on the latest main before reporting (when feasible).

VersionSupportedNotesEnd of Support
MainThe latest commit on the main branchN/A (rolling)
OlderPlease upgrade to the latest versionImmediate

2. Scope

2.1 In Scope

The following are within the scope of this vulnerability disclosure policy:

  • OpenHamClock application code (frontend and backend)
  • Configuration defaults and deployment artifacts in this repository
  • Build, packaging, and update mechanisms owned by this repository
  • Docker images and container configurations published by this project
  • Installation and update scripts (setup-*.sh, update.sh)

2.2 Out of Scope

The following are generally not in scope but may be considered on a case-by-case basis:

  • Third-party services and APIs consumed by OpenHamClock (report to the respective vendor)
  • Vulnerabilities in upstream dependencies that do not materially affect this project's usage
  • Issues requiring physical access to the user's device (unless remote access was enabled in an unsafe manner by default configuration)
  • Social engineering attacks against individual operators
  • Issues in end-of-life or unsupported versions

2.3 Scope Questions

If you're unsure whether something is in scope, please report it anyway and clearly mark it as a "scope question" in your submission. We will provide guidance.


3. Security Contact

For vulnerability reports, please use one of the private channels below. The maintainer acts as the primary security contact and may engage additional community members under NDA for remediation when necessary.


4. Reporting a Vulnerability (ISO/IEC 29147 §7.4)

CRITICAL: DO NOT open a public GitHub Issue for security vulnerabilities before coordination.

4.1 Reporting Channels (in order of preference)

Primary: GitHub Private Vulnerability Reporting

Secondary: Encrypted Email

4.2 What to Include in Your Report (ISO/IEC 29147 §7.4.3)

A complete vulnerability report should include:

Required:

  • Vulnerability type (e.g., SQL injection, XSS, authentication bypass, RCE, information disclosure)
  • Affected component(s) (e.g., server.js, auto-update mechanism, Docker configuration)
  • Affected version(s) (commit hash or version tag)
  • Description of the vulnerability and how it manifests
  • Steps to reproduce or proof-of-concept (minimal example preferred)
  • Impact assessment (what can an attacker achieve?)

Optional but helpful:

  • Severity assessment (your opinion: Critical/High/Medium/Low)
  • Suggested remediation or mitigation approach
  • Disclosure preferences (embargo duration, credit preferences)
  • CVE ID if you've already requested one

4.3 Sensitive Data Handling

To protect operator privacy, please avoid including:

  • Real amateur radio callsigns (use K0XXX or W1ABC as placeholders)
  • Actual grid locators (use AA00aa as placeholder)
  • Production IP addresses (use RFC5737 documentation addresses: 192.0.2.0/24)
  • API keys, tokens, session cookies, or contents of .env files
  • Personal information of operators (names, addresses, email addresses)

If sensitive data is absolutely necessary for reproduction:

  • Redact or pseudonymize it
  • Clearly explain what was redacted and why it's needed
  • Offer to provide actual data over a secure side-channel if essential

4.4 Language

Reports may be submitted in English (preferred) or other languages. We will make reasonable efforts to work with non-English reporters but may experience delays in processing.


5. Vulnerability Handling Process (ISO/IEC 30111:2019 §7)

5.1 Vulnerability Case Lifecycle

Each reported vulnerability is assigned a unique case identifier (format: OHC-YYYY-NNNN, e.g., OHC-2026-0001) and progresses through these states:

StateDescriptionTypical Duration
RECEIVEDReport received, awaiting initial review0-7 days
ASSIGNEDCase assigned to handler, analysis started1-14 days
CONFIRMEDVulnerability validated and reproduced-
REMEDIATIONFix in development and testing7-90 days
VENDOR-FIXFix ready, coordinating disclosure0-14 days
PUBLICVulnerability and fix publicly disclosedTerminal state
REJECTEDNot a vulnerability or out of scopeTerminal state

Status transitions will be communicated to the reporter via the reporting channel.

5.2 Response Timelines (ISO/IEC 29147 §7.4.4)

We commit to the following response targets:

  • Initial acknowledgment: Within 7 calendar days of receipt
  • Preliminary assessment: Within 14 calendar days of receipt
  • Regular updates: At least every 14 calendar days while case is active
  • Target remediation: Within 90 days for Critical/High severity issues

Note: Complex issues, multi-party coordination, or resource constraints may extend timelines. We will communicate delays proactively.

5.3 Severity Classification (CVSS v3.1)

We use CVSS v3.1 base scores to classify severity:

SeverityCVSS ScoreResponse PriorityTypical Fix Timeline
Critical9.0 - 10.0Immediate7-30 days
High7.0 - 8.9Urgent30-60 days
Medium4.0 - 6.9Normal60-90 days
Low0.1 - 3.9Best effortNext release cycle

Reporters are encouraged to provide their own CVSS assessment, but the PSIRT makes the final determination.

5.4 Remediation Development (ISO/IEC 30111 §7.5)

Remediation may take the form of:

  1. Code fix: Patch applied to the codebase
  2. Configuration change: Secure defaults or documentation update
  3. Workaround: Interim mitigation until a full fix is available
  4. No fix: Issue is accepted as a limitation (risk accepted, documented)

All fixes undergo internal testing before release. For Critical issues, we may request assistance from the reporter for verification.


6. Coordinated Disclosure (ISO/IEC 29147 §7.5)

6.1 Disclosure Timeline

By default, we follow a 90-day coordinated disclosure timeline from initial report:

  • Day 0: Vulnerability reported
  • Day 7: Initial acknowledgment and triage
  • Day 14-90: Remediation development, testing, and coordination
  • Day 90: Public disclosure (advisory + fix), unless extended by mutual agreement

6.2 Early Disclosure

We may disclose earlier than 90 days if:

  • Fix is ready and tested
  • No multi-party coordination is required
  • Reporter agrees to early disclosure
  • Active exploitation is detected in the wild (emergency disclosure)

6.3 Embargo Extensions

The 90-day timeline may be extended if:

  • Complexity requires additional development time (negotiated with reporter)
  • Multi-party coordination is in progress (see §7)
  • Affected component is in a third-party dependency awaiting upstream fix

Maximum embargo: Typically 180 days from initial report, except in exceptional circumstances.

6.4 Emergency Disclosure

If we become aware of active exploitation or imminent public disclosure, we may:

  1. Immediately publish a security advisory with available mitigations
  2. Notify affected parties via established channels
  3. Release a patch or workaround, even if incomplete

We will make reasonable efforts to notify the reporter before emergency disclosure.

6.5 Public Disclosure Content (ISO/IEC 29147 §7.5.3)

Our security advisories include:

  • Vulnerability description (non-technical summary + technical details)
  • Affected versions and components
  • CVE identifier (if assigned)
  • CVSS score and severity rating
  • Impact and exploit conditions
  • Remediation steps (upgrade path, workarounds, configuration changes)
  • Credit to reporter (unless anonymity requested)
  • Timeline of disclosure

Disclosure channels:

  • GitHub Security Advisory (primary)
  • CHANGELOG.md and release notes
  • Project README / documentation
  • Mailing list or community forum (if established)

7. Multi-Party Coordination (ISO/IEC TR 5895:2022)

7.1 When Multi-Party Coordination is Needed

We initiate multi-party coordination when a vulnerability:

  • Affects upstream dependencies (e.g., Express, Node.js, npm packages)
  • Impacts downstream projects (forks, derivatives, or integrations)
  • Is present in multiple projects sharing similar code
  • Requires involvement of a neutral coordinator (e.g., CERT/CC, MITRE)

7.2 Coordination Process (ISO/IEC TR 5895 §6.3)

When multi-party coordination is required:

  1. Identify stakeholders: List all affected vendors/projects
  2. Establish communication: Create a private coordination channel (email thread, CERT/CC case, GitHub security group)
  3. Share information: Distribute vulnerability details under disclosure embargo
  4. Coordinate timelines: Agree on a common disclosure date
  5. Synchronize patches: Align release timing across parties
  6. Joint disclosure: Publish advisories simultaneously (or in coordinated sequence)

7.3 Coordinator Roles

We may request assistance from:

  • CERT/CC (cert.org) for high-impact vulnerabilities affecting multiple vendors
  • MITRE (cve.org) for CVE assignment and management
  • GitHub Security Lab for coordination within the GitHub ecosystem
  • NIST NVD for CVE publication and enrichment

7.4 Information Sharing Restrictions

When participating in multi-party coordination:

  • All parties operate under confidentiality until the agreed disclosure date
  • Information may be shared with:
    • Directly affected vendors/projects (on need-to-know basis)
    • Neutral coordinators (CERT/CC, MITRE)
    • Security response organizations (e.g., OS/distro security teams)
  • Information must not be shared with:
    • General public
    • Media or press (except coordinated embargoed briefings)
    • Unaffected third parties

7.5 Disclosure Date Negotiation

Target disclosure date is determined by:

  • Complexity of remediation across all parties
  • Criticality and exploit likelihood
  • Default 90-day window (may be shorter or longer by agreement)
  • Active exploitation status

If consensus cannot be reached, we follow the earliest responsible disclosure date that allows for remediation.


8. Reporter Credit and Recognition (ISO/IEC 29147 §7.4.5)

8.1 Credit Policy

We recognize and credit security researchers who responsibly disclose vulnerabilities:

  • Default: Credit by name/handle in security advisories and release notes
  • Anonymous: Opt-in anonymity respected ("Anonymous researcher")
  • No credit: If reporter requests no attribution

8.2 Hall of Fame

We may maintain a Security Researchers Hall of Fame in this repository recognizing:

  • Researchers who have reported valid vulnerabilities
  • Year of report and severity classification
  • Link to public advisory (if applicable)

This section will be created when the first qualifying report is received.

8.3 Bug Bounty Program

Current status: We do not operate a paid bug bounty program at this time.

Reporters contribute out of goodwill to protect the amateur radio community. We are deeply grateful for their efforts.


9. Safe Harbor and Legal Considerations

9.1 Good-Faith Security Research

We welcome and support good-faith security research conducted in accordance with this policy. We will not pursue legal action against researchers who:

  • Act in good faith to identify and report vulnerabilities
  • Make a reasonable effort to avoid privacy violations, data destruction, and service disruption
  • Do not exploit vulnerabilities beyond what is necessary to demonstrate the issue
  • Do not access, modify, or exfiltrate data beyond minimal proof-of-concept
  • Report findings promptly and privately
  • Wait for our coordinated disclosure before public discussion

9.2 Testing Guidelines

When testing for vulnerabilities:

  • Use your own infrastructure: Test against your own deployment of OpenHamClock
  • Do not test production systems operated by others without explicit written permission
  • Avoid service degradation: No DoS attacks, no resource exhaustion, no brute-forcing
  • Respect privacy: Do not access operator data, callsigns, locations, or logs of other users
  • No automated scanning of public instances without prior approval

9.3 Responsible Disclosure Commitment

If you follow this policy, we commit to:

  • Not pursue legal action related to your research
  • Work with you to understand and validate the issue
  • Acknowledge your contribution publicly (unless you prefer anonymity)
  • Keep you informed throughout the remediation and disclosure process

10. Security Updates and Notifications

10.1 How to Stay Informed

Users and operators can stay informed of security updates via:

10.2 Applying Security Updates

When a security update is released:

  1. Review the advisory: Understand the impact and affected versions

  2. Check your version: git log -1 --pretty=format:"%H" or grep version package.json

  3. Update immediately for Critical/High severity:

    git pull
    npm install
    npm audit fix
    docker-compose up -d --build # if using Docker
  4. Verify the fix: Check that your version includes the patch commit

  5. Monitor for anomalies: Review logs for signs of prior exploitation


11. Best Practices for Operators (Self-Hosting)

To reduce your vulnerability surface:

  1. Do not expose to the public internet
    Do not port-forward OpenHamClock directly to the internet unless it is protected behind a reverse proxy with TLS, authentication, and rate limiting.

  2. Protect your .env and secrets
    Treat .env, API keys, and configuration as secrets. Never commit them to public repositories. Use restrictive file permissions (chmod 600 .env).

  3. Update regularly
    Subscribe to security advisories and apply updates promptly:

    git pull
    npm install
    npm audit
    npm audit fix # review changes before applying
  4. Run with least privilege
    Use a dedicated non-root user for the application. If using Docker, ensure the container runs as non-root.

  5. Enable security features

    • Set NODE_ENV=production
    • Configure AUTO_UPDATE_ENABLED=false if you prefer manual updates
    • Use HTTPS (TLS) for all connections
    • Enable rate limiting and authentication on admin endpoints
  6. Monitor for anomalies
    Review application logs regularly for suspicious activity (failed auth attempts, unusual API requests, etc.).

  7. Backup configuration
    Maintain backups of your configuration before applying updates.


12. Policy Review and Updates

This policy will be reviewed and updated:

  • Annually (or more frequently as needed)
  • When processes change materially
  • After significant security incidents
  • To align with evolving ISO/IEC standards

History:

  • v1.1 (2026-02-12): Enhanced ISO/IEC compliance, added multi-party coordination, severity classification, case lifecycle
  • v1.0 (Initial): Basic vulnerability disclosure policy

13. Contact and Questions

For questions about this policy (not vulnerability reports):

  • General security questions: Open a public Discussion on GitHub
  • Policy clarifications: Email chris@cjhlighting.com (non-confidential)

For vulnerability reports, see §4 Reporting a Vulnerability.


14. Acknowledgments

Thank you to the security research community for helping make OpenHamClock safer for the amateur radio community worldwide. Your responsible disclosures protect operators, preserve trust, and strengthen open-source security practices.

Metadata

This policy aligns with international standards for vulnerability disclosure and handling:

  • ISO/IEC 29147:2018 - Vulnerability disclosure
  • ISO/IEC 30111:2019 - Vulnerability handling processes
  • ISO/IEC TR 5895:2022 - Multi-party coordinated vulnerability disclosure and handling

Document version: 1.1
Last updated: 2026-02-12
Next review: 2026-08-12

There aren't any published security advisories

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Security: accius/openhamclock

SECURITY.md

Security Policy

The OpenHamClock community takes security seriously. We appreciate responsible disclosure and will work to resolve security issues promptly to protect the amateur radio community.


1. Supported Versions

As a rapidly evolving open-source project, we primarily support the latest version of the codebase. Please reproduce issues on the latest main before reporting (when feasible).

VersionSupportedNotesEnd of Support
MainThe latest commit on the main branchN/A (rolling)
OlderPlease upgrade to the latest versionImmediate

2. Scope

2.1 In Scope

The following are within the scope of this vulnerability disclosure policy:

  • OpenHamClock application code (frontend and backend)
  • Configuration defaults and deployment artifacts in this repository
  • Build, packaging, and update mechanisms owned by this repository
  • Docker images and container configurations published by this project
  • Installation and update scripts (setup-*.sh, update.sh)

2.2 Out of Scope

The following are generally not in scope but may be considered on a case-by-case basis:

  • Third-party services and APIs consumed by OpenHamClock (report to the respective vendor)
  • Vulnerabilities in upstream dependencies that do not materially affect this project's usage
  • Issues requiring physical access to the user's device (unless remote access was enabled in an unsafe manner by default configuration)
  • Social engineering attacks against individual operators
  • Issues in end-of-life or unsupported versions

2.3 Scope Questions

If you're unsure whether something is in scope, please report it anyway and clearly mark it as a "scope question" in your submission. We will provide guidance.


3. Security Contact

For vulnerability reports, please use one of the private channels below. The maintainer acts as the primary security contact and may engage additional community members under NDA for remediation when necessary.


4. Reporting a Vulnerability (ISO/IEC 29147 §7.4)

CRITICAL: DO NOT open a public GitHub Issue for security vulnerabilities before coordination.

4.1 Reporting Channels (in order of preference)

Primary: GitHub Private Vulnerability Reporting

Secondary: Encrypted Email

4.2 What to Include in Your Report (ISO/IEC 29147 §7.4.3)

A complete vulnerability report should include:

Required:

  • Vulnerability type (e.g., SQL injection, XSS, authentication bypass, RCE, information disclosure)
  • Affected component(s) (e.g., server.js, auto-update mechanism, Docker configuration)
  • Affected version(s) (commit hash or version tag)
  • Description of the vulnerability and how it manifests
  • Steps to reproduce or proof-of-concept (minimal example preferred)
  • Impact assessment (what can an attacker achieve?)

Optional but helpful:

  • Severity assessment (your opinion: Critical/High/Medium/Low)
  • Suggested remediation or mitigation approach
  • Disclosure preferences (embargo duration, credit preferences)
  • CVE ID if you've already requested one

4.3 Sensitive Data Handling

To protect operator privacy, please avoid including:

  • Real amateur radio callsigns (use K0XXX or W1ABC as placeholders)
  • Actual grid locators (use AA00aa as placeholder)
  • Production IP addresses (use RFC5737 documentation addresses: 192.0.2.0/24)
  • API keys, tokens, session cookies, or contents of .env files
  • Personal information of operators (names, addresses, email addresses)

If sensitive data is absolutely necessary for reproduction:

  • Redact or pseudonymize it
  • Clearly explain what was redacted and why it's needed
  • Offer to provide actual data over a secure side-channel if essential

4.4 Language

Reports may be submitted in English (preferred) or other languages. We will make reasonable efforts to work with non-English reporters but may experience delays in processing.


5. Vulnerability Handling Process (ISO/IEC 30111:2019 §7)

5.1 Vulnerability Case Lifecycle

Each reported vulnerability is assigned a unique case identifier (format: OHC-YYYY-NNNN, e.g., OHC-2026-0001) and progresses through these states:

StateDescriptionTypical Duration
RECEIVEDReport received, awaiting initial review0-7 days
ASSIGNEDCase assigned to handler, analysis started1-14 days
CONFIRMEDVulnerability validated and reproduced-
REMEDIATIONFix in development and testing7-90 days
VENDOR-FIXFix ready, coordinating disclosure0-14 days
PUBLICVulnerability and fix publicly disclosedTerminal state
REJECTEDNot a vulnerability or out of scopeTerminal state

Status transitions will be communicated to the reporter via the reporting channel.

5.2 Response Timelines (ISO/IEC 29147 §7.4.4)

We commit to the following response targets:

  • Initial acknowledgment: Within 7 calendar days of receipt
  • Preliminary assessment: Within 14 calendar days of receipt
  • Regular updates: At least every 14 calendar days while case is active
  • Target remediation: Within 90 days for Critical/High severity issues

Note: Complex issues, multi-party coordination, or resource constraints may extend timelines. We will communicate delays proactively.

5.3 Severity Classification (CVSS v3.1)

We use CVSS v3.1 base scores to classify severity:

SeverityCVSS ScoreResponse PriorityTypical Fix Timeline
Critical9.0 - 10.0Immediate7-30 days
High7.0 - 8.9Urgent30-60 days
Medium4.0 - 6.9Normal60-90 days
Low0.1 - 3.9Best effortNext release cycle

Reporters are encouraged to provide their own CVSS assessment, but the PSIRT makes the final determination.

5.4 Remediation Development (ISO/IEC 30111 §7.5)

Remediation may take the form of:

  1. Code fix: Patch applied to the codebase
  2. Configuration change: Secure defaults or documentation update
  3. Workaround: Interim mitigation until a full fix is available
  4. No fix: Issue is accepted as a limitation (risk accepted, documented)

All fixes undergo internal testing before release. For Critical issues, we may request assistance from the reporter for verification.


6. Coordinated Disclosure (ISO/IEC 29147 §7.5)

6.1 Disclosure Timeline

By default, we follow a 90-day coordinated disclosure timeline from initial report:

  • Day 0: Vulnerability reported
  • Day 7: Initial acknowledgment and triage
  • Day 14-90: Remediation development, testing, and coordination
  • Day 90: Public disclosure (advisory + fix), unless extended by mutual agreement

6.2 Early Disclosure

We may disclose earlier than 90 days if:

  • Fix is ready and tested
  • No multi-party coordination is required
  • Reporter agrees to early disclosure
  • Active exploitation is detected in the wild (emergency disclosure)

6.3 Embargo Extensions

The 90-day timeline may be extended if:

  • Complexity requires additional development time (negotiated with reporter)
  • Multi-party coordination is in progress (see §7)
  • Affected component is in a third-party dependency awaiting upstream fix

Maximum embargo: Typically 180 days from initial report, except in exceptional circumstances.

6.4 Emergency Disclosure

If we become aware of active exploitation or imminent public disclosure, we may:

  1. Immediately publish a security advisory with available mitigations
  2. Notify affected parties via established channels
  3. Release a patch or workaround, even if incomplete

We will make reasonable efforts to notify the reporter before emergency disclosure.

6.5 Public Disclosure Content (ISO/IEC 29147 §7.5.3)

Our security advisories include:

  • Vulnerability description (non-technical summary + technical details)
  • Affected versions and components
  • CVE identifier (if assigned)
  • CVSS score and severity rating
  • Impact and exploit conditions
  • Remediation steps (upgrade path, workarounds, configuration changes)
  • Credit to reporter (unless anonymity requested)
  • Timeline of disclosure

Disclosure channels:

  • GitHub Security Advisory (primary)
  • CHANGELOG.md and release notes
  • Project README / documentation
  • Mailing list or community forum (if established)

7. Multi-Party Coordination (ISO/IEC TR 5895:2022)

7.1 When Multi-Party Coordination is Needed

We initiate multi-party coordination when a vulnerability:

  • Affects upstream dependencies (e.g., Express, Node.js, npm packages)
  • Impacts downstream projects (forks, derivatives, or integrations)
  • Is present in multiple projects sharing similar code
  • Requires involvement of a neutral coordinator (e.g., CERT/CC, MITRE)

7.2 Coordination Process (ISO/IEC TR 5895 §6.3)

When multi-party coordination is required:

  1. Identify stakeholders: List all affected vendors/projects
  2. Establish communication: Create a private coordination channel (email thread, CERT/CC case, GitHub security group)
  3. Share information: Distribute vulnerability details under disclosure embargo
  4. Coordinate timelines: Agree on a common disclosure date
  5. Synchronize patches: Align release timing across parties
  6. Joint disclosure: Publish advisories simultaneously (or in coordinated sequence)

7.3 Coordinator Roles

We may request assistance from:

  • CERT/CC (cert.org) for high-impact vulnerabilities affecting multiple vendors
  • MITRE (cve.org) for CVE assignment and management
  • GitHub Security Lab for coordination within the GitHub ecosystem
  • NIST NVD for CVE publication and enrichment

7.4 Information Sharing Restrictions

When participating in multi-party coordination:

  • All parties operate under confidentiality until the agreed disclosure date
  • Information may be shared with:
    • Directly affected vendors/projects (on need-to-know basis)
    • Neutral coordinators (CERT/CC, MITRE)
    • Security response organizations (e.g., OS/distro security teams)
  • Information must not be shared with:
    • General public
    • Media or press (except coordinated embargoed briefings)
    • Unaffected third parties

7.5 Disclosure Date Negotiation

Target disclosure date is determined by:

  • Complexity of remediation across all parties
  • Criticality and exploit likelihood
  • Default 90-day window (may be shorter or longer by agreement)
  • Active exploitation status

If consensus cannot be reached, we follow the earliest responsible disclosure date that allows for remediation.


8. Reporter Credit and Recognition (ISO/IEC 29147 §7.4.5)

8.1 Credit Policy

We recognize and credit security researchers who responsibly disclose vulnerabilities:

  • Default: Credit by name/handle in security advisories and release notes
  • Anonymous: Opt-in anonymity respected ("Anonymous researcher")
  • No credit: If reporter requests no attribution

8.2 Hall of Fame

We may maintain a Security Researchers Hall of Fame in this repository recognizing:

  • Researchers who have reported valid vulnerabilities
  • Year of report and severity classification
  • Link to public advisory (if applicable)

This section will be created when the first qualifying report is received.

8.3 Bug Bounty Program

Current status: We do not operate a paid bug bounty program at this time.

Reporters contribute out of goodwill to protect the amateur radio community. We are deeply grateful for their efforts.


9. Safe Harbor and Legal Considerations

9.1 Good-Faith Security Research

We welcome and support good-faith security research conducted in accordance with this policy. We will not pursue legal action against researchers who:

  • Act in good faith to identify and report vulnerabilities
  • Make a reasonable effort to avoid privacy violations, data destruction, and service disruption
  • Do not exploit vulnerabilities beyond what is necessary to demonstrate the issue
  • Do not access, modify, or exfiltrate data beyond minimal proof-of-concept
  • Report findings promptly and privately
  • Wait for our coordinated disclosure before public discussion

9.2 Testing Guidelines

When testing for vulnerabilities:

  • Use your own infrastructure: Test against your own deployment of OpenHamClock
  • Do not test production systems operated by others without explicit written permission
  • Avoid service degradation: No DoS attacks, no resource exhaustion, no brute-forcing
  • Respect privacy: Do not access operator data, callsigns, locations, or logs of other users
  • No automated scanning of public instances without prior approval

9.3 Responsible Disclosure Commitment

If you follow this policy, we commit to:

  • Not pursue legal action related to your research
  • Work with you to understand and validate the issue
  • Acknowledge your contribution publicly (unless you prefer anonymity)
  • Keep you informed throughout the remediation and disclosure process

10. Security Updates and Notifications

10.1 How to Stay Informed

Users and operators can stay informed of security updates via:

10.2 Applying Security Updates

When a security update is released:

  1. Review the advisory: Understand the impact and affected versions

  2. Check your version: git log -1 --pretty=format:"%H" or grep version package.json

  3. Update immediately for Critical/High severity:

    git pull
    npm install
    npm audit fix
    docker-compose up -d --build # if using Docker
  4. Verify the fix: Check that your version includes the patch commit

  5. Monitor for anomalies: Review logs for signs of prior exploitation


11. Best Practices for Operators (Self-Hosting)

To reduce your vulnerability surface:

  1. Do not expose to the public internet
    Do not port-forward OpenHamClock directly to the internet unless it is protected behind a reverse proxy with TLS, authentication, and rate limiting.

  2. Protect your .env and secrets
    Treat .env, API keys, and configuration as secrets. Never commit them to public repositories. Use restrictive file permissions (chmod 600 .env).

  3. Update regularly
    Subscribe to security advisories and apply updates promptly:

    git pull
    npm install
    npm audit
    npm audit fix # review changes before applying
  4. Run with least privilege
    Use a dedicated non-root user for the application. If using Docker, ensure the container runs as non-root.

  5. Enable security features

    • Set NODE_ENV=production
    • Configure AUTO_UPDATE_ENABLED=false if you prefer manual updates
    • Use HTTPS (TLS) for all connections
    • Enable rate limiting and authentication on admin endpoints
  6. Monitor for anomalies
    Review application logs regularly for suspicious activity (failed auth attempts, unusual API requests, etc.).

  7. Backup configuration
    Maintain backups of your configuration before applying updates.


12. Policy Review and Updates

This policy will be reviewed and updated:

  • Annually (or more frequently as needed)
  • When processes change materially
  • After significant security incidents
  • To align with evolving ISO/IEC standards

History:

  • v1.1 (2026-02-12): Enhanced ISO/IEC compliance, added multi-party coordination, severity classification, case lifecycle
  • v1.0 (Initial): Basic vulnerability disclosure policy

13. Contact and Questions

For questions about this policy (not vulnerability reports):

  • General security questions: Open a public Discussion on GitHub
  • Policy clarifications: Email chris@cjhlighting.com (non-confidential)

For vulnerability reports, see §4 Reporting a Vulnerability.


14. Acknowledgments

Thank you to the security research community for helping make OpenHamClock safer for the amateur radio community worldwide. Your responsible disclosures protect operators, preserve trust, and strengthen open-source security practices.

Metadata

This policy aligns with international standards for vulnerability disclosure and handling:

  • ISO/IEC 29147:2018 - Vulnerability disclosure
  • ISO/IEC 30111:2019 - Vulnerability handling processes
  • ISO/IEC TR 5895:2022 - Multi-party coordinated vulnerability disclosure and handling

Document version: 1.1
Last updated: 2026-02-12
Next review: 2026-08-12

There aren't any published security advisories