Tandoor Recipes: ORM ORDER BY Injection via FK Traversal in Tandoor Recipes
Tandoor Recipes is an application for managing recipes, planning meals, and building shopping lists. Prior to 2.6.10, passes unvalidated sort_order and order_field strings into Django ORM order_by() calls when an authenticated user supplies foreign-key traversal paths in recipe search, RecipeBook, or stored CustomFilter ordering values. Request processing uses _finalize_ordering and order_by through 8080/api/recipe/ and 8080/api/recipe-book/. The attack works because Django interprets double-underscore ordering fields as related-table traversal, and observable result ordering leaks values from related User fields. This can infer password hashes, email addresses, administrator status, and other related database values. This issue is fixed in version 2.6.10.
- Products
- recipes
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-59962
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 1 Nov 2026, 21:57 UTC · Revision 2
Source evidence
Tandoor Recipes: ORM ORDER BY Injection via FK Traversal in Tandoor Recipes
core-cve · Original sourcePublished 16 Oct 2026, 16:52 UTC
Tandoor Recipes is an application for managing recipes, planning meals, and building shopping lists. Prior to 2.6.10, passes unvalidated sort_order and order_field strings into Django ORM order_by() calls when an authenticated user supplies foreign-key traversal paths in recipe search, RecipeBook, or stored CustomFilter ordering values. Request processing uses _finalize_ordering and order_by through 8080/api/recipe/ and 8080/api/recipe-book/. The attack works because Django interprets double-underscore ordering fields as related-table traversal, and observable result ordering leaks values from related User fields. This can infer password hashes, email addresses, administrator status, and other related database values. This issue is fixed in version 2.6.10.
cve:CVE-2026-59962
recipes
Fixed versions: Not specified
Complete source record
{
"id": "5fa9070490178d5d6cff9435125570710f9c1331869848d1023070a6e5364305",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-59962",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Tandoor Recipes: ORM ORDER BY Injection via FK Traversal in Tandoor Recipes",
"summary": "Tandoor Recipes is an application for managing recipes, planning meals, and building shopping lists. Prior to 2.6.10, passes unvalidated sort_order and order_field strings into Django ORM order_by() calls when an authenticated user supplies foreign-key traversal paths in recipe search, RecipeBook, or stored CustomFilter ordering values. Request processing uses _finalize_ordering and order_by through 8080/api/recipe/ and 8080/api/recipe-book/. The attack works because Django interprets double-underscore ordering fields as related-table traversal, and observable result ordering leaks values from related User fields. This can infer password hashes, email addresses, administrator status, and other related database values. This issue is fixed in version 2.6.10.",
"evidence": "cve:CVE-2026-59962",
"products": [
{
"name": {
"value": "recipes",
"evidence": "/containers/cna/affected/0/product"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
}
],
"severity": "medium",
"structured": {
"id": "CVE-2026-59962",
"aliases": [
"CVE-2026-59962"
],
"metrics": [
{
"cvssV3_1": {
"scope": "UNCHANGED",
"version": "3.1",
"baseScore": 6.5,
"attackVector": "NETWORK",
"baseSeverity": "MEDIUM",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N",
"integrityImpact": "NONE",
"userInteraction": "NONE",
"attackComplexity": "LOW",
"availabilityImpact": "NONE",
"privilegesRequired": "LOW",
"confidentialityImpact": "HIGH"
}
}
],
"affected": [
{
"vendor": "TandoorRecipes",
"product": "recipes",
"versions": [
{
"status": "affected",
"version": "< 2.6.10"
}
]
}
],
"modified": "2026-10-28T18:03:14.314Z",
"provider": "cve",
"references": [
"https://github.com/TandoorRecipes/recipes/security/advisories/GHSA-4x57-2q4q-xwpp",
"https://github.com/TandoorRecipes/recipes/commit/322696f618997e98f2d4c15ec64b9480735589f0",
"https://github.com/TandoorRecipes/recipes/commit/382a976cc79635edc30aef84cb2b2b72eb8afd3c",
"https://github.com/TandoorRecipes/recipes/commit/82fd4e00f1387a1c466489989f2e94487149f7f4",
"https://github.com/TandoorRecipes/recipes/releases/tag/2.6.10"
],
"provider_metadata": {
"adp": [
{
"title": "CISA ADP Vulnrichment",
"metrics": [
{
"other": {
"type": "ssvc",
"content": {
"id": "CVE-2026-59962",
"role": "CISA Coordinator",
"options": [
{
"Exploitation": "poc"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"version": "2.0.3",
"timestamp": "2026-10-28T18:03:06.140303Z"
}
}
}
],
"references": [
{
"url": "https://github.com/TandoorRecipes/recipes/security/advisories/GHSA-4x57-2q4q-xwpp",
"tags": [
"exploit"
]
}
],
"providerMetadata": {
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP",
"dateUpdated": "2026-10-28T18:03:14.314Z"
}
}
],
"cna": {
"orgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"shortName": "GitHub_M",
"dateUpdated": "2026-10-16T16:52:49.172Z"
}
}
},
"related_cves": [
{
"value": "CVE-2026-59962",
"evidence": "/cveMetadata/cveId"
}
],
"security_relevant": true,
"severity_evidence": "/containers/cna/metrics"
},
"source_id": "core-cve",
"document_id": 470551,
"published_at": "2026-10-16T16:52:49.172+00:00"
}