Security advisory
Wheels 1.1 through 4.1.2 resolves nestedProperties() records by posted primary key without checking that they belong to the parent being saved. A user able to submit a nested form for their own parent can update and reassign another parent's hasMany or hasOne rows, or delete them when allowDelete=true. Nested belongsTo records can also be edited by posting another associated record's key. New child rows with composite primary keys not made up of foreign keys retain posted key values, allowing the request to choose their identity. This is fixed in 4.2.0.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-111447
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 8 Nov 2026, 02:36 UTC · Revision 1
Source evidence
Wheels 1.1 through 4.1.2 resolves nestedProperties() records by posted primary key without checking that they belong to the parent being saved. A user able to submit a nested form for their own parent can update and reassign another parent's hasMany or hasOne rows, or delete them when allowDelete=true. Nested belongsTo records can also be edited by posting another associated record's key. New child rows with composite primary keys not made up of foreign keys retain posted key values, allowing the request to choose their identity. This is fixed in 4.2.0.
osv:CVE-2026-111447
Complete source record
{
"id": "44645723e6ea6084b1a3dc0075ff4ad88f8af8628bd197cee19e257b684e568b",
"url": "https://osv.dev/vulnerability/CVE-2026-111447",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "CVE-2026-111447",
"summary": "Wheels 1.1 through 4.1.2 resolves nestedProperties() records by posted primary key without checking that they belong to the parent being saved. A user able to submit a nested form for their own parent can update and reassign another parent's hasMany or hasOne rows, or delete them when allowDelete=true. Nested belongsTo records can also be edited by posting another associated record's key. New child rows with composite primary keys not made up of foreign keys retain posted key values, allowing the request to choose their identity. This is fixed in 4.2.0.",
"evidence": "osv:CVE-2026-111447",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-111447",
"aliases": [
"CVE-2026-111447",
"GHSA-6979-65wv-7pxq"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/wheels-dev/wheels",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "0e589def0922a3f0643cfd17c4ea5fdd8c41b9a6"
}
],
"database_specific": {
"extracted_events": [
{
"range": [
{
"introduced": "1.1.0"
},
{
"fixed": "4.2.0"
}
],
"source": "AFFECTED_FIELD",
"strategy": "StandardRange"
}
]
}
}
],
"versions": [
"v4.1.2",
"v4.1.1",
"v4.1.0",
"v4.0.6",
"v4.0.5",
"v4.0.4",
"v4.0.3",
"v4.0.2",
"v2.5.1",
"v2.5.0",
"v2.4.0+1",
"v2.4.0",
"v2.3.0+2",
"v2.3.0+1",
"v2.3.0",
"2.3.0-rc.1+2",
"2.3.0-rc.1",
"v2.2.0",
"v2.1.0-beta",
"v2.0.1",
"v2.0.0",
"v2.0.0-rc.1",
"v2.0.0-beta.1",
"v1.4.3",
"v1.4.1",
"v1.4"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-111447.json"
}
}
],
"modified": "2026-10-28T02:30:52.893345257Z",
"provider": "osv",
"references": [
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/111xxx/CVE-2026-111447.json",
"https://github.com/wheels-dev/wheels/security/advisories/GHSA-6979-65wv-7pxq",
"https://nvd.nist.gov/vuln/detail/CVE-2026-111447",
"https://github.com/wheels-dev/wheels"
],
"provider_metadata": {
"cwe_ids": [
"CWE-472"
],
"cna_assigner": "mitre",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/111xxx/CVE-2026-111447.json"
}
},
"related_cves": [
{
"value": "CVE-2026-111447",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 521844,
"published_at": "2026-10-16T03:39:51.368+00:00"
}