Stella Ops Coordinated Vulnerability Disclosure (CVD) Policy

This policy implements Stella’s commitments under Cyber Resilience Act (Regulation (EU) 2024/2847) Annex I Part II §4-§6, and follows the ENISA Good Practice Guide on Vulnerability Disclosure as a process baseline.

Implementation status (verified against src/ on 2026-05-30). This is a human-readable process policy. The SLOs (§2), embargo handling (§3), disclosure timeline (§4), and CVE issuance (§5) are commitments enforced operationally by the product-security rotation — they are not encoded in any runtime-served JSON or runtime validator. What code actually serves is narrower: the Router Gateway (src/Router/StellaOps.Gateway.WebService/ProductMetadata/ProductMetadataDocumentProvider.cs) serves /.well-known/security.txt and /.well-known/stella-product-security.json, and its productSecurityContact block carries only intakeMailbox, policyUrl, and preferredLanguages — none of the SLO/embargo/CVE/escalation fields below appear in the served document. The structured intake schema product-cvd-policy-v1.mdthat mirrors these parameters is a documentation-only contract: no Stella service serializes, validates, or pins a productCvdPolicy@v1 document today. Treat anything described here as machine-checked or machine-served only where the cross-referenced contract docs say so.


1. Reporting a vulnerability

1.1 Primary intake

Use the subject line prefix [security] so the report is routed correctly.

1.2 What to include

A useful report contains, at minimum:

1.3 Out-of-band escalation

If a report concerns an actively exploited vulnerability and the primary intake is unresponsive, escalate to product-security-escalation@stella-ops.org (the generic Stella Product Security Escalation Owner contact, on 24x7 paging for confirmed exploitation events).

1.4 Retention and access defaults

Stella retains vulnerability reports, triage records, embargo notes, advisory drafts, and fix-disposition evidence for 7 years from closure unless a legal hold or coordinated-disclosure agreement requires a longer period. Access to the primary mailbox and triage record is limited to dedicated-product-security-primary, dedicated-product-security-secondary, and dedicated-product-security-fallback; access is reviewed quarterly. Website access logs follow the public privacy baseline: 7 days, then sha256(ip).

1.5 Safe-harbour for good-faith research

Stella will not pursue legal action or law-enforcement referral against researchers who:


2. Service-level objectives

Stella commits to the following response targets, measured from the time the report is received at the primary intake mailbox.

PhaseTargetNotes
Acknowledgementwithin 72 hoursAutomated receipt is not an acknowledgement; a human responds within 72 hours.
Triage decision (severity assignment, accept/reject, planned disposition)within 7 days for High and Critical reportsOther severities may take up to 14 days.
Workaround or fix availability for High and Criticalwithin 90 days targetWhere a fix cannot be shipped in 90 days, Stella publishes a documented mitigation and a fix ETA.
Public advisory and CSAF feed entrypublished with the fix or with the mitigation, whichever is earlierSee §4 disclosure timeline.

These targets follow the decisions log §CRA-Q1.

Severity is determined using CVSS v3.1 (or its successor when adopted by the wider ecosystem). Stella reserves the right to adjust the assigned severity based on real-world exploitability, deployment topology, and reachability evidence; any deviation from the reporter’s proposed score is explained in the advisory.


3. Embargo handling


4. Disclosure timeline policy

The default timeline for a confirmed High or Critical vulnerability is:

  1. Day 0: report received.
  2. Day 0-3: human acknowledgement issued; triage begins.
  3. Day 0-7: severity confirmed, fix author assigned, advisory draft started.
  4. Day 7-90: fix developed, tested, packaged, and queued for the next release train.
  5. Day 90 (or earlier): fix released, advisory published in the product CSAF feed, CVE record published (see §5).

For Medium and Low severity issues, Stella may align disclosure with the next scheduled release rather than commit to a 90-day window. The advisory is still published when the fix ships.


5. CVE issuance

Stella issues CVE records for vulnerabilities in its own software through the MITRE / CVE Numbering Authority pathway:

CVE records reference the Stella CSAF advisory by URL so downstream consumers can ingest both.


6. Publication channels

Once an advisory is published, Stella exposes it through:

The security.txt file at /.well-known/security.txt (RFC 9116) points to this policy and to the well-known JSON document. Reality note: the Router Gateway serves this file as unsigned plaintext — ProductMetadataDocumentProvider.GetSecurityTxt builds the RFC 9116 body (the Contact, Encryption, Policy, Canonical, and Expires lines) with no inline PGP signature, and ProductMetadataMiddleware exposes no /.well-known/security.txt.sig route. PGP-signing the served file and publishing a detached security.txt.sig is a forward-looking operator obligation documented in security-txt.md§2/§4.2, not current runtime behaviour. The well-known endpoints carry no OAuth scope gate (there is no entry in StellaOpsScopes for this surface); access control is the fail-closed publication gate described in §7, not a scope.


7. Operational inputs to fill before publish

The following operational values must be confirmed and committed before this policy is announced as live to external researchers. Until live preflight passes, this policy is published as a draft and the well-known endpoints (/.well-known/security.txt, /.well-known/stella-product-security.json) must fail closed. The fail-closed behaviour is implemented in ProductMetadataDocumentProvider.TryBuildDocuments: the endpoints return 503 with an empty body unless platform.product.publishMetadata, sealedConfig, and releaseManifestSignatureVerified are all set, all eight ProductMetadataPreflightOptions booleans pass (MailboxDeliveryVerified, MailboxAccessVerified, KeyFreshnessVerified, KeyFingerprintVerified, PlacementAnchorVerified, SupportLifecycleVerified, RotationVerified, EscalationVerified), the canonical base URL is HTTPS, and the signed release manifest is present, schema-matched to the running build, and free of any TBD- placeholder. Caveat: the served pgpKey.fingerprint is the hardcoded constant 1A045258307194881527D2FE095C5809C63DBA65 regardless of which key the operator verified; the preflight booleans gate publication but do not substitute a verified live fingerprint into the served bytes.

These inputs are tracked operationally; they are not open product decisions.


8. Cross-references


9. Revision policy

This document is reviewed at least annually and whenever any of the following triggers fire:

Revisions bump the policy contract version when any field semantics change. (Correction: the served /.well-known/stella-product-security.json document has no lastReviewed field; its only timestamp is lastModified, emitted verbatim from the sealed Platform:Product:GeneratedAtUtc configuration value — see ProductMetadataDocumentProvider.GetProductSecurityJson and stella-product-security-metadata-v1.md. The Last reviewed date lives in this policy’s header and in the productCvdPolicy@v1 intake schema’s lastReviewed field, neither of which is the served well-known JSON.)