{"id":"CVE-2026-61726","kind":"vulnerability","aliases":["CVE-2026-61726"],"related":[],"title":"Tandoor Recipes: Step API lets same-Space members read and edit private recipes","description":"Tandoor Recipes is an application for managing recipes, planning meals, and building shopping lists. Prior to 2.6.12, StepViewSet and IngredientViewSet filter only by active Space and use role-level CustomIsUser checks instead of the private-recipe owner or sharing predicate when an authenticated user with read and write API scope in the victim's Space supplies a private recipe or step identifier to the Step API. Request processing uses StepViewSet, IngredientViewSet, api/step/, api/step/{step_id}/, CustomIsUser, CustomRecipePermission. The attack works because the sub-resource querysets return and update private-recipe steps for non-owners because Space membership is accepted without recipe-level authorization. This can read and silently modify another same-Space member's private recipe instructions, while cross-Space access remains out of scope. This issue is fixed in version 2.6.12.","summary":"Tandoor Recipes' step and ingredient API endpoints check only Space membership, not recipe ownership or sharing, before returning or updating a recipe's steps. An authenticated member of a Space can read and silently modify another member's private recipe instructions.","severity":"high","cvss":8.1,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["django","package","python","self-hosted","tandoor-recipes"],"not_affected_if":["single-user-space","version-2.6.12-or-later"],"how_to_check":"- Check the installed Tandoor version (for example `docker exec <container> python -c \"import recipes; print(recipes.__version__)\"` or the image tag), and compare it to `2.6.12`\n- unknown for any other check, as the sources do not give one","fix":"- Upgrade Tandoor Recipes to `2.6.12` or later\n- Until upgraded, restrict API tokens with read and write scope to trusted users (unknown whether this fully mitigates)","status":"open","published_at":"2026-10-16T20:17:23+00:00","first_seen_at":"2026-10-23T21:57:14+00:00","triaged_at":"2026-10-25T03:06:42+00:00","updated_at":"2026-10-25T03:06:42+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-25T03:06:42Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade Tandoor Recipes to `2.6.12` or later\n- Until upgraded, restrict API tokens with read and write scope to trusted users (unknown whether this fully mitigates)","reach":"network","title":"Tandoor Recipes: Step API lets same-Space members read and edit private recipes","impact":"medium","summary":"Tandoor Recipes' step and ingredient API endpoints check only Space membership, not recipe ownership or sharing, before returning or updating a recipe's steps. An authenticated member of a Space can read and silently modify another member's private recipe instructions.","category":"package","nicknames":[],"who_cares":["self-hosted","tandoor-recipes","python","django"],"confidence":0.7,"needs_auth":"yes","worst_case":"Same-Space member reads and silently changes another member's private recipe steps","analyst_note":"","how_to_check":"- Check the installed Tandoor version (for example `docker exec <container> python -c \"import recipes; print(recipes.__version__)\"` or the image tag), and compare it to `2.6.12`\n- unknown for any other check, as the sources do not give one","needs_analyst":false,"not_affected_if":["single-user-space","version-2.6.12-or-later"],"who_is_affected":"Teams running self-hosted Tandoor Recipes below 2.6.12 where several users share a Space and some recipes are marked private. Instances with only one user per Space, or where all members are fully trusted, face little added risk. Cross-Space access is out of scope for this issue.","user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000631,"input_tokens":3504,"output_tokens":562,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':16A,19A '-61726':17A,20A '2.6.12':87C,210C 'accept':174C 'access':199C 'activ':94C 'anoth':65B,186C 'api':4A,35B,121C,138C 'api/step':144C,145C 'applic':75C 'attack':151C 'authent':55B,115C 'author':179C 'build':82C 'check':37B,102C 'cross':197C 'cross-spac':196C 'customisus':101C,148C 'customrecipepermiss':149C 'cve':15A,18A 'django':21B 'edit':12A 'endpoint':36B 'filter':91C 'fix':207C 'host':26B 'id':147C 'identifi':134C 'ingredi':34B 'ingredientviewset':90C,143C 'instead':103C 'instruct':70B,194C 'issu':205C 'let':5A 'level':100C,178C 'list':84C 'manag':77C 'meal':80C 'member':9A,56B,66B,190C 'membership':40B,172C 'modifi':64B,185C 'non':168C 'non-own':167C 'owner':109C,169C 'ownership':43B 'packag':22B 'plan':79C 'predic':112C 'prior':85C 'privat':13A,68B,107C,130C,163C,192C 'private-recip':106C,162C 'process':140C 'python':23B 'queryset':158C 'read':10A,61B,118C,182C 'recip':2A,14A,29B,31B,42B,51B,69B,72C,78C,108C,131C,164C,177C,193C 'recipe-level':176C 'remain':200C 'request':139C 'resourc':157C 'return':47B,159C 'role':99C 'role-level':98C 'same-spac':6A,187C 'scope':122C,203C 'self':25B 'self-host':24B 'share':45B,111C 'shop':83C 'silent':63B,184C 'space':8A,39B,59B,95C,127C,171C,189C,198C 'step':3A,32B,53B,133C,137C,146C,165C 'stepviewset':88C,142C 'sub':156C 'sub-resourc':155C 'suppli':128C 'tandoor':1A,28B,30B,71C 'tandoor-recip':27B 'updat':49B,161C 'use':97C,141C 'user':116C 'version':209C 'victim':125C 'without':175C 'work':152C 'write':120C","nicknames":[],"mitigations":[],"who_affected":"Teams running self-hosted Tandoor Recipes below 2.6.12 where several users share a Space and some recipes are marked private. Instances with only one user per Space, or where all members are fully trusted, face little added risk. Cross-Space access is out of scope for this issue.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-16T20:17:23+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-61726","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-61726","severity":null,"published_at":"2026-10-16T20:17:23+00:00","modified_at":"2026-10-19T20:52:47+00:00","first_seen_at":"2026-10-23T21:57:14+00:00","fetched_at":"2026-10-23T22:28:55+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}