Files
vuln-cve/data/2023/52xxx/CVE-2023-52478.json
T

356 lines
21 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"cveMetadata": {
"cveId": "CVE-2023-52478",
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"state": "PUBLISHED",
"assignerShortName": "Linux",
"dateReserved": "2024-02-20T12:30:33.298Z",
"datePublished": "2024-02-29T05:43:10.698Z",
"dateUpdated": "2026-08-05T09:10:08.517Z"
},
"containers": {
"cna": {
"providerMetadata": {
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux",
"dateUpdated": "2026-08-05T09:10:08.517Z"
},
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nHID: logitech-hidpp: Fix kernel crash on receiver USB disconnect\n\nhidpp_connect_event() has *four* time-of-check vs time-of-use (TOCTOU)\nraces when it races with itself.\n\nhidpp_connect_event() primarily runs from a workqueue but it also runs\non probe() and if a \"device-connected\" packet is received by the hw\nwhen the thread running hidpp_connect_event() from probe() is waiting on\nthe hw, then a second thread running hidpp_connect_event() will be\nstarted from the workqueue.\n\nThis opens the following races (note the below code is simplified):\n\n1. Retrieving + printing the protocol (harmless race):\n\n\tif (!hidpp->protocol_major) {\n\t\thidpp_root_get_protocol_version()\n\t\thidpp->protocol_major = response.rap.params[0];\n\t}\n\nWe can actually see this race hit in the dmesg in the abrt output\nattached to rhbz#2227968:\n\n[ 3064.624215] logitech-hidpp-device 0003:046D:4071.0049: HID++ 4.5 device connected.\n[ 3064.658184] logitech-hidpp-device 0003:046D:4071.0049: HID++ 4.5 device connected.\n\nTesting with extra logging added has shown that after this the 2 threads\ntake turn grabbing the hw access mutex (send_mutex) so they ping-pong\nthrough all the other TOCTOU cases managing to hit all of them:\n\n2. Updating the name to the HIDPP name (harmless race):\n\n\tif (hidpp->name == hdev->name) {\n\t\t...\n\t\thidpp->name = new_name;\n\t}\n\n3. Initializing the power_supply class for the battery (problematic!):\n\nhidpp_initialize_battery()\n{\n if (hidpp->battery.ps)\n return 0;\n\n\tprobe_battery(); /* Blocks, threads take turns executing this */\n\n\thidpp->battery.desc.properties =\n\t\tdevm_kmemdup(dev, hidpp_battery_props, cnt, GFP_KERNEL);\n\n\thidpp->battery.ps =\n\t\tdevm_power_supply_register(&hidpp->hid_dev->dev,\n\t\t\t\t\t &hidpp->battery.desc, cfg);\n}\n\n4. Creating delayed input_device (potentially problematic):\n\n\tif (hidpp->delayed_input)\n\t\treturn;\n\n\thidpp->delayed_input = hidpp_allocate_input(hdev);\n\nThe really big problem here is 3. Hitting the race leads to the following\nsequence:\n\n\thidpp->battery.desc.properties =\n\t\tdevm_kmemdup(dev, hidpp_battery_props, cnt, GFP_KERNEL);\n\n\thidpp->battery.ps =\n\t\tdevm_power_supply_register(&hidpp->hid_dev->dev,\n\t\t\t\t\t &hidpp->battery.desc, cfg);\n\n\t...\n\n\thidpp->battery.desc.properties =\n\t\tdevm_kmemdup(dev, hidpp_battery_props, cnt, GFP_KERNEL);\n\n\thidpp->battery.ps =\n\t\tdevm_power_supply_register(&hidpp->hid_dev->dev,\n\t\t\t\t\t &hidpp->battery.desc, cfg);\n\nSo now we have registered 2 power supplies for the same battery,\nwhich looks a bit weird from userspace's pov but this is not even\nthe really big problem.\n\nNotice how:\n\n1. This is all devm-maganaged\n2. The hidpp->battery.desc struct is shared between the 2 power supplies\n3. hidpp->battery.desc.properties points to the result from the second\n devm_kmemdup()\n\nThis causes a use after free scenario on USB disconnect of the receiver:\n1. The last registered power supply class device gets unregistered\n2. The memory from the last devm_kmemdup() call gets freed,\n hidpp->battery.desc.properties now points to freed memory\n3. The first registered power supply class device gets unregistered,\n this involves sending a remove uevent to userspace which invokes\n power_supply_uevent() to fill the uevent data\n4. power_supply_uevent() uses hidpp->battery.desc.properties which\n now points to freed memory leading to backtraces like this one:\n\nSep 22 20:01:35 eric kernel: BUG: unable to handle page fault for address: ffffb2140e017f08\n...\nSep 22 20:01:35 eric kernel: Workqueue: usb_hub_wq hub_event\nSep 22 20:01:35 eric kernel: RIP: 0010:power_supply_uevent+0xee/0x1d0\n...\nSep 22 20:01:35 eric kernel: ? asm_exc_page_fault+0x26/0x30\nSep 22 20:01:35 eric kernel: ? power_supply_uevent+0xee/0x1d0\nSep 22 20:01:35 eric kernel: ? power_supply_uevent+0x10d/0x1d0\nSep 22 20:01:35 eric kernel: dev_uevent+0x10f/0x2d0\nSep 22 20:01:35 eric kernel: kobject_uevent_env+0x291/0x680\nSep 22 20:01:35 eric kernel: \n---truncated---"
}
],
"metrics": [
{
"cvssV3_1": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"baseScore": 8.8,
"baseSeverity": "HIGH"
},
"scenarios": [
{
"lang": "en",
"value": "AV:A - The logitech-hidpp driver binds Bluetooth HID++ devices and Unifying/DJ wireless children; an adjacent attacker with a malicious Logitech-compatible BT or Unifying RF device can cause probe (race) and destroy/unpair (UAF) without physical USB access.\nAC:L - A malicious HID++ device can send connect events while probe’s hidpp_connect_event() blocks on hardware I/O, creating both sides of the race; the race has also been hit repeatedly in the wild with real Logitech hardware.\nPR:N - Exploitation is via wireless HID/Unifying traffic to an already-present receiver or Bluetooth adapter and requires no OS account or capabilities.\nUI:N - Pairing/connect and unpair/disconnect can be driven by the attacker’s peripheral (or auto-reconnect paths) without requiring a separate victim action such as mounting a volume or confirming a prompt.\nS:U - Impact is confined to the host kernel’s HID/power_supply authority; this is not a VM escape, IOMMU bypass, or other cross-boundary scope change.\nC:H - The bug is a use-after-free of battery.desc.properties consumed by power_supply_uevent(); UAF of that array can disclose freed heap contents and, via OOB property indices, adjacent kernel data into uevents.\nI:H - UAF of the properties array enables heap-spray control of property enums used in set_bit() and power_supply_attrs lookups during uevent, yielding memory-corruption primitives suitable for integrity compromise/control-flow hijacking.\nA:H - The UAF reliably causes kernel oops/page faults during power_supply_unregister on disconnect, as shown in the documented crash traces."
}
]
}
],
"affected": [
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "unaffected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"drivers/hid/hid-logitech-hidpp.c"
],
"versions": [
{
"version": "c39e3d5fc9dd3e16c6f59dd94d827540040de66d",
"lessThan": "ca0c4cc1d215dc22ab0e738c9f017c650f3183f5",
"status": "affected",
"versionType": "git"
},
{
"version": "c39e3d5fc9dd3e16c6f59dd94d827540040de66d",
"lessThan": "44481b244fcaa2b895a53081d6204c574720c38c",
"status": "affected",
"versionType": "git"
},
{
"version": "c39e3d5fc9dd3e16c6f59dd94d827540040de66d",
"lessThan": "cd0e2bf7fb22fe9b989c59c42dca06367fd10e6b",
"status": "affected",
"versionType": "git"
},
{
"version": "c39e3d5fc9dd3e16c6f59dd94d827540040de66d",
"lessThan": "093af62c023537f097d2ebdfaa0bc7c1a6e874e1",
"status": "affected",
"versionType": "git"
},
{
"version": "c39e3d5fc9dd3e16c6f59dd94d827540040de66d",
"lessThan": "28ddc1e0b898291323b62d770b1b931de131a528",
"status": "affected",
"versionType": "git"
},
{
"version": "c39e3d5fc9dd3e16c6f59dd94d827540040de66d",
"lessThan": "fd72ac9556a473fc7daf54efb6ca8a97180d621d",
"status": "affected",
"versionType": "git"
},
{
"version": "c39e3d5fc9dd3e16c6f59dd94d827540040de66d",
"lessThan": "f7b2c7d9831af99369fe8ad9b2a68d78942f414e",
"status": "affected",
"versionType": "git"
},
{
"version": "c39e3d5fc9dd3e16c6f59dd94d827540040de66d",
"lessThan": "dac501397b9d81e4782232c39f94f4307b137452",
"status": "affected",
"versionType": "git"
}
]
},
{
"product": "Linux",
"vendor": "Linux",
"defaultStatus": "affected",
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"programFiles": [
"drivers/hid/hid-logitech-hidpp.c"
],
"versions": [
{
"version": "3.19",
"status": "affected"
},
{
"version": "0",
"lessThan": "3.19",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "4.14.328",
"lessThanOrEqual": "4.14.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "4.19.297",
"lessThanOrEqual": "4.19.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "5.4.259",
"lessThanOrEqual": "5.4.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "5.10.199",
"lessThanOrEqual": "5.10.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "5.15.136",
"lessThanOrEqual": "5.15.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.1.59",
"lessThanOrEqual": "6.1.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.5.8",
"lessThanOrEqual": "6.5.*",
"status": "unaffected",
"versionType": "semver"
},
{
"version": "6.6",
"lessThanOrEqual": "*",
"status": "unaffected",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"operator": "OR",
"negate": false,
"cpeMatch": [
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.19",
"versionEndExcluding": "4.14.328"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.19",
"versionEndExcluding": "4.19.297"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.19",
"versionEndExcluding": "5.4.259"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.19",
"versionEndExcluding": "5.10.199"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.19",
"versionEndExcluding": "5.15.136"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.19",
"versionEndExcluding": "6.1.59"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.19",
"versionEndExcluding": "6.5.8"
},
{
"vulnerable": true,
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionStartIncluding": "3.19",
"versionEndExcluding": "6.6"
}
]
}
]
}
],
"references": [
{
"url": "https://git.kernel.org/stable/c/ca0c4cc1d215dc22ab0e738c9f017c650f3183f5"
},
{
"url": "https://git.kernel.org/stable/c/44481b244fcaa2b895a53081d6204c574720c38c"
},
{
"url": "https://git.kernel.org/stable/c/cd0e2bf7fb22fe9b989c59c42dca06367fd10e6b"
},
{
"url": "https://git.kernel.org/stable/c/093af62c023537f097d2ebdfaa0bc7c1a6e874e1"
},
{
"url": "https://git.kernel.org/stable/c/28ddc1e0b898291323b62d770b1b931de131a528"
},
{
"url": "https://git.kernel.org/stable/c/fd72ac9556a473fc7daf54efb6ca8a97180d621d"
},
{
"url": "https://git.kernel.org/stable/c/f7b2c7d9831af99369fe8ad9b2a68d78942f414e"
},
{
"url": "https://git.kernel.org/stable/c/dac501397b9d81e4782232c39f94f4307b137452"
}
],
"title": "HID: logitech-hidpp: Fix kernel crash on receiver USB disconnect",
"x_generator": {
"engine": "bippy-1.2.0"
}
},
"adp": [
{
"providerMetadata": {
"orgId": "af854a3a-2127-422b-91ae-364da2661108",
"shortName": "CVE",
"dateUpdated": "2024-08-02T23:03:19.785Z"
},
"title": "CVE Program Container",
"references": [
{
"url": "https://git.kernel.org/stable/c/ca0c4cc1d215dc22ab0e738c9f017c650f3183f5",
"tags": [
"x_transferred"
]
},
{
"url": "https://git.kernel.org/stable/c/44481b244fcaa2b895a53081d6204c574720c38c",
"tags": [
"x_transferred"
]
},
{
"url": "https://git.kernel.org/stable/c/cd0e2bf7fb22fe9b989c59c42dca06367fd10e6b",
"tags": [
"x_transferred"
]
},
{
"url": "https://git.kernel.org/stable/c/093af62c023537f097d2ebdfaa0bc7c1a6e874e1",
"tags": [
"x_transferred"
]
},
{
"url": "https://git.kernel.org/stable/c/28ddc1e0b898291323b62d770b1b931de131a528",
"tags": [
"x_transferred"
]
},
{
"url": "https://git.kernel.org/stable/c/fd72ac9556a473fc7daf54efb6ca8a97180d621d",
"tags": [
"x_transferred"
]
},
{
"url": "https://git.kernel.org/stable/c/f7b2c7d9831af99369fe8ad9b2a68d78942f414e",
"tags": [
"x_transferred"
]
},
{
"url": "https://git.kernel.org/stable/c/dac501397b9d81e4782232c39f94f4307b137452",
"tags": [
"x_transferred"
]
}
]
},
{
"metrics": [
{
"other": {
"type": "ssvc",
"content": {
"timestamp": "2024-08-15T19:25:15.460942Z",
"id": "CVE-2023-52478",
"options": [
{
"Exploitation": "none"
},
{
"Automatable": "no"
},
{
"Technical Impact": "partial"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
}
],
"title": "CISA ADP Vulnrichment",
"providerMetadata": {
"orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"shortName": "CISA-ADP",
"dateUpdated": "2024-08-15T19:25:22.271Z"
}
}
]
}
}