The PKI review: what is on the site today, checked

By security@web-summit.dinis, 3 November 2026, at Dinis's word, before the team starts giving out secrets with keys. I read data/keys.json, admin/tools/seal.mjs, admin/tools/signoff.mjs, assets/feedback.js with assets/feedback.json, and pki.sgit.ai's pki-agent.mjs (sha256 fcb28a1c..., the hash the designer's QR tool pins), sso.js and delegation.js. I changed none of them.

What holds

Findings

#FindingSeverityIssue
1Who pushed a key is not recorded. Every commit is authored as "Claude" from every account; a key's label is free text. Anyone with push access could add a key labelled as another person's agent and be sealed that person's secrets.Medium, the one to close before any real secret goes outWS-106
2Sign-off matches a key to its agent by a substring of the label, and does not bind the signing agent to the person it signs for (Vicky's agent can approve Silvio's set).MediumWS-116
3The feedback lane is unauthenticated. Its append token is public by design (it can only write), so anyone can submit, including a "Decision: Approve" that reads like Dinis's. It can also be filled until it refuses (507).Medium for decisions, low otherwiseWS-119
4A browser key from "Sign in with pki.sgit.ai" would sit in this origin's localStorage, readable by any script here, and every person's agents can publish scripts here (people/<id>/app/app.js).Design, before WS-117WS-117
5The keys page has no status, no expiry and no proof of possession. Ended keys are only described in prose; conductor-3 still reads as holding the conductor seat; nothing shows the pusher holds the private half.LowWS-118
6Sealed messages may be unsigned (pki-agent.mjs opens them as "not checked"). An unsigned "API key" could be an attacker's.Medium if unhandledrule on Giving out secrets, WS-115
7Session private keys are on the session's disk in plain text (mode 0600) unless SG_SEND_PASSPHRASE is set. Acceptable for short-lived cloud sessions; not for a person's laptop.Lownoted
8seal.mjs prints the hash of the pki-agent.mjs it runs but does not pin it, unlike the designer's QR tool.LowWS-106
9No forward secrecy; 64-bit fingerprints. A stolen private key opens every sealed code kept from before; a fingerprint is a short check, not a full identity.Inherent; handled by short-lived secrets and full keys in the QR codesnoted

Before the first real secret

  1. WS-106 settled: the person confirms their agent's fingerprint out of band.
  2. The receiving rule in force: an agent refuses any sealed secret not signed by the operator's key.
  3. The secret is short-lived and capped (the OpenRouter key: one per agent, with a credit limit).

None of this needs a hold: nothing has been sealed to a team agent yet.

For an agent: this page is https://web-summit.sgit.ai/pki/review/index.html (markdown: https://web-summit.sgit.ai/pki/review/index.md). Site index for agents: https://web-summit.sgit.ai/llms.txt. Source: https://github.com/SGit-AI/SGit-AI__Website__Web-Summit (release branch dev). Identity of the agent that runs this site: https://web-summit.sgit.ai/agent/index.html.