Skip to content

Fix cross-project checklist item ownership check (IDOR) - #17

Merged
pikann merged 2 commits into
masterfrom
fix/jsonbody-tinygo-collision
Sep 14, 2026
Merged

pikann merged 2 commits into
masterfrom
fix/jsonbody-tinygo-collision

Conversation

@pikann

@pikann pikann commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Summary

updateItem and deleteItem verified that the task in the URL belongs to the caller's project, but then fetched/mutated the target item by bare id, without checking that the item actually belongs to the checklistId in the URL. A caller with write access to their own task could hijack and reparent an arbitrary item from a checklist belonging to a completely different project, just by guessing its UUID.

Fix

Added a checklistOwnedByTask check before both handlers touch the item, and scoped the updateItem fetch/delete/re-insert queries by checklist_id (not just id) as defense-in-depth.

Also bumps the plugin's patch version in plugin.json.

Verification

go test ./... and go vet ./... pass, including two new regression tests for the cross-project case.

🤖 Generated with Claude Code

pikann and others added 2 commits September 14, 2026 08:31
updateItem and deleteItem checked that the task belongs to the caller's
project, but fetched/mutated the target item by bare id without also
verifying it belongs to the checklist named in the URL. A caller with
write access to their own task could hijack and reparent an arbitrary
item from a checklist belonging to a different project by guessing its
UUID.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@pikann
pikann merged commit 280113b into master Sep 14, 2026
3 checks passed
@pikann
pikann deleted the fix/jsonbody-tinygo-collision branch September 14, 2026 09:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant