Report privately to vecna@hermescenter.org, or open a GitHub private security advisory. Please do not open a public issue for an unpatched vulnerability.
Expect an acknowledgement within 5 working days and an assessment within 15. We will tell you when a fix ships and credit you unless you ask us not to.
Ghostmaxxing is a static site with no backend. Everything runs client-side and no face data is transmitted. That shapes what a vulnerability looks like here.
In scope
- Any path by which biometric data (camera frames, descriptors, embeddings, saved faces, thumbnails) leaves the browser or persists where a user does not expect it.
- XSS or injection in any page, particularly
report.html— a person reading that page may be at risk, and a compromise there is a safety problem, not only a security one. - Escape from the Ghostyle plugin sandbox into a scope that could exfiltrate data or persist across sessions.
- Weaknesses in the reporting channel described on
report.html, including anything that could deanonymise a submitter or leak submission metadata. - Supply-chain issues in vendored assets under
lab-js/vendor/orstyles/vendor/.
Out of scope
- The recognition pipeline failing to match, or a Ghostyle failing to defeat a match. This is the subject of the project, not a defect. See the disclaimer in the README.
- Anything related to the whistleblowing submission platform, hosted at https://raccontaci.nina.watch, should be reported at https://globaleaks.org
- Reports generated by automated scanners with no demonstrated impact.
- Missing hardening headers with no exploitable consequence on a static site.
Ghostyles are arbitrary JavaScript that runs in the user's browser, and the project treats them that way deliberately — review is a maintainer reading the whole file. A malicious Ghostyle is therefore not in itself a vulnerability report. A way for a Ghostyle to reach beyond its documented surface is.
/.well-known/security.txt (RFC 9116) points here.