PII leak: 3 personal projects + 1 board flagged is_public=True #273
Labels
No labels
domain:backend
domain:devops
domain:frontend
status:approved
status:in-progress
status:needs-fix
status:qa
type:bug
type:devops
type:feature
No milestone
No project
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set.
Reference
ldraney/pal-e-api#273
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Bug
Lineage
Discovered while investigating pipeline #127 failures on pal-e-app PR #111. Four
e2e/public-readiness.spec.tstests flagged that anonymous visitors could see projects/boards that were supposed to be private.Repo
forgejo_admin/pal-e-apiWhat Broke
The DB had three personal-use projects flagged
is_public=Trueand one board withis_public=None:project/privateis_public=True→ contains private thoughts (feedback_private_thought_pattern.md)project/rememberis_public=True→ memory projectproject/journalis_public=True→ daily journal (project_journal.md)board/board-privateis_public=NoneThe API filter logic was correct — it correctly returns/withholds based on the flag — but the flag values were wrong, exposing private content via
https://pal-e-docs.tail5b443a.ts.net/projectsto anonymous callers.Repro Steps
curl -s https://pal-e-docs.tail5b443a.ts.net/projects | jq '.[] | select(.slug == "journal")'is_public:trueExpected Behavior
All three projects + the board are
is_public=False. Anonymous/projectsdoes NOT include them.Environment
pal-e-docshttps://pal-e-docs.tail5b443a.ts.netprojects.is_publicandboards.is_publiccolumnsAcceptance Criteria
project/private,project/remember,project/journalallis_public=Falseboard/board-privateis_public=False/projectscount drops by 3 (verified: 34 → 31)/boardscount drops by 3 (verified: 36 → 33)Action Taken (this session)
Wrote each via admin API with
X-API-Keyheader:PUT /projects/private -d '{"is_public": false}'→ 200PUT /projects/remember -d '{"is_public": false}'→ 200PUT /projects/journal -d '{"is_public": false}'→ 200PATCH /boards/board-private -d '{"is_public": false}'→ 200Per
feedback_never_write_prod_db.md, this is the sanctioned admin-API path (not raw SQL).Out of Scope (follow-ups)
is_public=Falseto schema so new projects fail closed (currently appears to default to True)/projectsanonymous and asserts nois_public=Falserows leakRelated
forgejo_admin/pal-e-app#111— PR whose CI surfaced thisfeedback_funnel_requires_auth.md— public-funnel services with private content require strict filteringfeedback_private_thought_pattern.md,project_journal.md— define these projects as private