Security

Responsible disclosure. For both products.

CipherM ships an offline desktop binary and runs a hosted registry at cipherm.io. They have different attack surfaces and almost nothing in common, so scope and architecture below are given separately. Reports on either are welcome.

Report privately before posting. You will get an acknowledgement, a fix, credit if you want it, and no legal action for good-faith research that respects this policy.

How to report

Email founder@cipherm.io. That is the single address, and it reaches the founder directly.

Include, as far as you have it:

  • Which product. CipherM Desktop or the hosted registry; they are fixed by different processes and one of them requires a signed release.
  • For Desktop: the output of cipherm version, which names the build, the engine, the rule bundle and its signing key.
  • For the registry: the URL, the account state, and the approximate time.
  • Reproduction steps, and your own assessment of impact. A working proof of concept is welcome; destructive testing against the hosted site is not.

Scope

CipherM Desktop
  • The CipherM Desktop binary itself, on any published platform, including the frozen build's offline enforcement.
  • Ed25519 rule-bundle signature verification, and anything that lets an unsigned or tampered bundle be treated as evidence-grade.
  • Offline licence verification, and anything that lets a forged licence file remove the unlicensed watermark from output.
  • The evidence pack renderer — injection into the HTML or PDF, or any construct that would let a pack reach the network when opened.
  • The loopback dashboard behind `cipherm scan --serve`: token handling, the Host-header check, the CSP, or any route that returns scan data without a token.
  • The release supply chain: SHA256SUMS, its detached Ed25519 signature, and the CycloneDX SBOM published at /download, along with the key-id derivation a reviewer uses to pin the signing key.
  • The detection ruleset. A false negative on real-world cryptography is a security defect in an evidence product, not a feature request, and it is wanted here.
CipherM Registry
  • The web application and API at cipherm.io, including authentication, session handling, and the account and organisation surfaces.
  • The CBOM upload, storage and visibility model — anything that exposes an unlisted or private CBOM to someone who should not read it.
  • The CycloneDX validator and the free live-TLS scan endpoint, including SSRF through the host you are allowed to name.
  • The AI-backed features, including prompt injection that would exfiltrate another tenant's CBOM content.
  • API keys, webhooks, and custom rules stored against an account.

Out of scope, both products

  • Volumetric denial of service. The scanner is free and offline — do heavy testing locally, not against the hosted site.
  • Automated scanner output with no demonstrated impact, and best-practice findings (missing headers on static pages, TLS configuration of third-party hosts) without an exploit path.
  • Social engineering of the founder, or of any hosting or identity provider.
  • Vulnerabilities in third-party services CipherM depends on. Report them there; copy CipherM in if CipherM users are affected.
  • That seat counts are not technically enforced, and that an unlicensed build scans at full strength. Both are deliberate and documented — enforcing either would require a licence server, which would require the network calls this product exists to avoid.

Our commitments

One person keeps these, so they are deliberately short of what a funded programme would promise. They are what can be met without inventing capacity that does not exist.

  • Acknowledge your report within 72 hours.
  • Give you an initial triage and a severity call within 7 days.
  • Ship a fix within 30 days for critical issues and 90 days for everything else. For the registry that is a deploy. For Desktop it is a new signed release and a new checksum manifest, which is a manual signing ceremony — you will be told which of the two your report triggers.
  • Tell you if the answer is that it will not be fixed, and why, rather than letting the clock run out quietly.
  • Credit you in the changelog and the security advisory, or keep you anonymous if you prefer.
  • Not pursue legal action for good-faith research that respects this policy, and not ask you to sign anything to receive a fix.

There is no bug bounty

This page previously offered a free Pro tier for life. No Pro tier exists, none is on a roadmap with a date, and offering payment in a product that does not exist is worse than offering nothing. So: there is no cash bounty and no swag programme, because there is no budget for either.

What a valid report actually gets you:

  • A fast fix from the person who wrote the code, and the reasoning behind it.
  • Public credit in the changelog and the security advisory, in the name you choose.
  • A written attestation of the finding you can cite, if that is useful to you.

If you find something that would have been worth real money at a company with a bounty budget, report it anyway and say so. You will get a straight answer about what CipherM can do rather than a vague promise to make it right.

Architecture notes for a reviewer

What each product actually does, so you can decide where to spend your time — and so a buyer following the link from /procurement is reading the threat model of the thing they are buying.

CipherM Desktop

The scan path has no network code, and that is tested, not asserted.

One test detonates socket.socket, create_connection, getaddrinfo and gethostbyname before verifying a licence. Others read the source directly: the licence and rule-bundle modules have their ASTs walked for network-capable imports, and every file in the desktop package is scanned for references to urllib.request, http.client, socket.create_connection, requests, ssl.wrap_socket, ftplib, smtplib and telnetlib. `cipherm scan` refuses a git URL rather than fetching it. The frozen build additionally wraps socket connect, connect_ex, sendto and create_connection for the offline verbs — defence in depth and a self-check, not a sandbox, and it does not cover a C extension or a subprocess.

Two verbs connect on purpose, only to hosts the operator names.

`cipherm tls <host>` and `cipherm certs --endpoint <host>` open outbound TLS to the target you typed, because a handshake cannot be measured without one. Neither contacts CipherM, and neither transmits the result anywhere. The full breakdown is on the procurement page.

The dashboard is loopback-only and still treats loopback as hostile.

It binds 127.0.0.1 and refuses any other address rather than trusting its caller. Every route returning scan data requires a per-run token compared in constant time, because another local process, a browser extension, or another user on a shared workstation can all reach 127.0.0.1. The Host header must name a loopback address, closing DNS rebinding through the assessor's own browser. Responses carry a strict CSP with no external origins, plus no-store, nosniff, no-referrer and frame-ancestors none; the page is a single self-contained file with no subresources, so it renders identically air-gapped.

Evidence packs cannot phone home when opened.

The generated HTML is asserted to contain no script, iframe, object, embed, link, form, src=, href=, @import, fetch( or XMLHttpRequest. A pack opened in a browser on a connected machine transmits nothing about the code it describes.

Entitlement is signed data, not a service.

Licence and rule-bundle verification are Ed25519 against keys compiled into the binary. There is no revocation channel and no remote kill switch, and CipherM has built no mechanism capable of disabling an installed copy. The trade is stated in the licence rather than hidden: no remote enforcement, no remote failure mode.

CipherM Registry

Artifacts are content-addressed and stored private.

CBOMs are keyed by SHA-256, so identical uploads dedupe. The blob store is private and artifacts are served through the application, so the visibility check lives in one place rather than depending on an unguessable URL — which is not an access control.

No source code is uploaded, but a CBOM is not nothing.

The registry receives the CipherM-emitted CBOM, which carries file paths, line numbers and short snippets — not full source. Treat those snippets as disclosed. Public CBOMs are publicly readable by design: do not upload anything you would not commit to a public repository.

Private is an access check, not encryption.

There is no application-layer encryption and no customer-held key. Anyone with production access to the infrastructure can read a private CBOM, and so can anyone who compels CipherM to. If that is unacceptable for a codebase, that codebase belongs on CipherM Desktop.

AI features send CBOM content to a third party, on an explicit action.

Pressing the AI migration button sends the rule id, file path, line number and up to 3,000 characters of the snippet already in your CBOM to Anthropic. Nothing does this on its own. The full subprocessor list is on the procurement page.

What CipherM does not have

Listed here so you do not have to find it.

No PGP key.

None is published, and the promise of one that this page used to carry has been removed rather than deferred again. Report over email; if the finding is too sensitive for plaintext, say so in a one-line message with no detail and a channel will be agreed before anything technical is sent.

No security@ rota, and no ticketing system.

founder@cipherm.io is a mailbox read by one person. There is no alias standing in front of a team, because there is no team. That is also why the response commitments below are modest enough to actually keep.

No third-party penetration test, and no SOC 2.

Neither exists and neither has been commissioned. This page will say so until one does. What stands in their place is documented on the procurement page, along with the key-person risk that comes with a one-person company.

No bug bounty budget.

Stated in full below rather than dressed up as an alternative rewards programme.

The full picture — compliance status, subprocessors, and the key-person risk of a one-person company selling an annual evidence licence — is on the procurement page. Nothing there is described as in flight.