Automattic / Automattic/studio
Redact site admin passwords from Studio list JSON
- Dominant language
- TypeScript
- Stars
- 517
- Forks
- 95
- Avg merge
- 1d 22h
- Merged PRs (30d)
- 162
Description
## Problem
`studio list --format=json` includes the plaintext `adminPassword` for every local site by default. A routine inventory command therefore exports all local WordPress administrator credentials into shell pipelines, agent transcripts, CI logs, caches, and diagnostic artifacts.
Fresh reproduction with 26 local sites:
```sh
studio list --format=json | node -e 'let s="";process.stdin.on("data",d=>s+=d);process.stdin.on("end",()=>{const rows=JSON.parse(s); console.log({count:rows.length,passwordCount:rows.filter(r=>r.adminPassword).length})})'
```
Result:
```text
{ count: 26, passwordCount: 26 }
```
The table output does not expose passwords, so JSON currently has a materially broader and surprising secret surface than the human view.
## Expected
Inventory is non-secret by default. Credentials require a separate explicit, auditable command or opt-in intended for one selected site.
## Acceptance criteria
- Remove `adminPassword` and any equivalent secret fields from default table and JSON list records.
- Keep site identity, path, status, runtime, version, and URL fields available for automation.
- Provide an explicit single-site credential retrieval flow if CLI consumers need it.
- Require an unmistakable opt-in for secret output and document that it must not be logged.
- Add contract coverage proving list JSON contains no credential values.
- Audit other list/status machine surfaces for the same accidental secret expansion.
## AI assistance disclosure
OpenAI gpt-5.6-sol via OpenCode inspected the live Studio CLI inventory contract, strict-parsed JSON output, counted exposed credential fields, searched existing issues, and drafted this report. Chris Huber directed the control-plane audit and remains responsible for the report.
Contributor guide
Assessment
This issue has not been assessed yet.