Component: repository (process, not code)
Severity (assessment): LOW
actor-ts is published to npm with provenance and has a security label, a
[Security] issue template and a substantial history of security work — but there is
no SECURITY.md and no documented private reporting channel anywhere in the repo.
Exploit walkthrough
Not an exploit; a disclosure-process gap with a concrete failure mode. Someone who finds
a genuine, unfixed, remotely-exploitable defect in a published package has no private
route to report it. Their options are:
- Open a public issue — which discloses a live vulnerability to everyone, including
anyone running the affected version, before a fix exists.
- Say nothing.
The repo's own security issue template already anticipates this and points at a file
that does not exist:
.github/ISSUE_TEMPLATE/security_report.yml:12-14
> ⚠️ **For pre-disclosure handling**, please first check
> the project's security policy in `SECURITY.md` (or, if
> absent, contact the maintainer privately).
"Contact the maintainer privately" is not actionable without a stated channel. GitHub
also surfaces a "Report a vulnerability" button only when private vulnerability
reporting is enabled, and links SECURITY.md from the repository's Security tab — both
are currently absent, so the discoverable path leads back to the public tracker.
Evidence
$ ls SECURITY.md .github/SECURITY.md docs/SECURITY.md
ls: cannot access 'SECURITY.md': No such file or directory
ls: cannot access '.github/SECURITY.md': No such file or directory
ls: cannot access 'docs/SECURITY.md': No such file or directory
.github/ contains ISSUE_TEMPLATE/, dependabot.yml and workflows/ — no security
policy.
Suggested fix
Add a SECURITY.md at the repository root covering the usual four points:
- Supported versions — pre-1.0, so realistically "latest minor only"; worth stating
explicitly since 0.x users may assume older minors get backports.
- How to report privately — enable GitHub private vulnerability reporting
(Settings → Code security) and/or name a contact address.
- What to expect — acknowledgement window and a disclosure timeline.
- Scope — worth being explicit that the cluster transport defaults to plaintext,
unauthenticated TCP by design (documented in
docs/src/content/docs/operations/security/cluster-security.mdx), so reports about
that default are out of scope, while reports about the documented mitigations failing
are very much in scope.
That last point is not boilerplate for this project: several audit findings are precisely
"the documented mitigation does not work", and drawing the line in SECURITY.md saves
triage effort on both sides.
Once the file exists, drop the "(or, if absent, …)" hedge from
.github/ISSUE_TEMPLATE/security_report.yml:13.
Verification status
Found during the 2026-08-01 whole-framework security audit, by direct inspection of the
repository rather than by the code-audit sweep. Verified: no SECURITY.md at the root,
in .github/, or under docs/.
Component: repository (process, not code)
Severity (assessment): LOW
actor-tsis published to npm with provenance and has asecuritylabel, a[Security]issue template and a substantial history of security work — but there isno
SECURITY.mdand no documented private reporting channel anywhere in the repo.Exploit walkthrough
Not an exploit; a disclosure-process gap with a concrete failure mode. Someone who finds
a genuine, unfixed, remotely-exploitable defect in a published package has no private
route to report it. Their options are:
anyone running the affected version, before a fix exists.
The repo's own security issue template already anticipates this and points at a file
that does not exist:
"Contact the maintainer privately" is not actionable without a stated channel. GitHub
also surfaces a "Report a vulnerability" button only when private vulnerability
reporting is enabled, and links
SECURITY.mdfrom the repository's Security tab — bothare currently absent, so the discoverable path leads back to the public tracker.
Evidence
.github/containsISSUE_TEMPLATE/,dependabot.ymlandworkflows/— no securitypolicy.
Suggested fix
Add a
SECURITY.mdat the repository root covering the usual four points:explicitly since
0.xusers may assume older minors get backports.(Settings → Code security) and/or name a contact address.
unauthenticated TCP by design (documented in
docs/src/content/docs/operations/security/cluster-security.mdx), so reports aboutthat default are out of scope, while reports about the documented mitigations failing
are very much in scope.
That last point is not boilerplate for this project: several audit findings are precisely
"the documented mitigation does not work", and drawing the line in
SECURITY.mdsavestriage effort on both sides.
Once the file exists, drop the "(or, if absent, …)" hedge from
.github/ISSUE_TEMPLATE/security_report.yml:13.Verification status
Found during the 2026-08-01 whole-framework security audit, by direct inspection of the
repository rather than by the code-audit sweep. Verified: no
SECURITY.mdat the root,in
.github/, or underdocs/.