CVE-2025-21923 (GCVE-0-2025-21923)
Vulnerability from cvelistv5
Published
2025-04-01 15:40
Modified
2026-08-05 11:55
Summary
In the Linux kernel, the following vulnerability has been resolved: HID: hid-steam: Fix use-after-free when detaching device When a hid-steam device is removed it must clean up the client_hdev used for intercepting hidraw access. This can lead to scheduling deferred work to reattach the input device. Though the cleanup cancels the deferred work, this was done before the client_hdev itself is cleaned up, so it gets rescheduled. This patch fixes the ordering to make sure the deferred work is properly canceled.
Impacted products
Vendor Product Version
Linux Linux Version: e1147961b2145fa61c3078a4a797d9576cde91ab
Version: 3e38cbbfa0a128a9d64773240a9eb3bc7bae3b1a
Version: 053fa3888d2a957f4db26c05e503f4c6b9570a30
Version: 79504249d7e27cad4a3eeb9afc6386e418728ce0
Create a notification for this product.
   Linux Linux Version: 6.6.79   
Version: 6.12.16   
Version: 6.13.4   
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "cvssV3_1": {
              "attackComplexity": "LOW",
              "attackVector": "LOCAL",
              "availabilityImpact": "HIGH",
              "baseScore": 7.8,
              "baseSeverity": "HIGH",
              "confidentialityImpact": "HIGH",
              "integrityImpact": "HIGH",
              "privilegesRequired": "LOW",
              "scope": "UNCHANGED",
              "userInteraction": "NONE",
              "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
              "version": "3.1"
            }
          },
          {
            "other": {
              "content": {
                "id": "CVE-2025-21923",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "total"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2025-04-16T13:15:09.842820Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "problemTypes": [
          {
            "descriptions": [
              {
                "cweId": "CWE-416",
                "description": "CWE-416 Use After Free",
                "lang": "en",
                "type": "CWE"
              }
            ]
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2025-04-16T13:19:53.000Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/hid/hid-steam.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "026714ec7546de741826324a6a1914c91024d06c",
              "status": "affected",
              "version": "e1147961b2145fa61c3078a4a797d9576cde91ab",
              "versionType": "git"
            },
            {
              "lessThan": "a899adf7063c6745aaff1ec869f3c7f6329ed0a1",
              "status": "affected",
              "version": "3e38cbbfa0a128a9d64773240a9eb3bc7bae3b1a",
              "versionType": "git"
            },
            {
              "lessThan": "ea3f18d2f02629653b7bfe42607737ccd1343e54",
              "status": "affected",
              "version": "053fa3888d2a957f4db26c05e503f4c6b9570a30",
              "versionType": "git"
            },
            {
              "lessThan": "e53fc232a65f7488ab75d03a5b95f06aaada7262",
              "status": "affected",
              "version": "79504249d7e27cad4a3eeb9afc6386e418728ce0",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "drivers/hid/hid-steam.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "6.6.83",
              "status": "affected",
              "version": "6.6.79",
              "versionType": "semver"
            },
            {
              "lessThan": "6.12.19",
              "status": "affected",
              "version": "6.12.16",
              "versionType": "semver"
            },
            {
              "lessThan": "6.13.7",
              "status": "affected",
              "version": "6.13.4",
              "versionType": "semver"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.83",
                  "versionStartIncluding": "6.6.79",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.19",
                  "versionStartIncluding": "6.12.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.13.7",
                  "versionStartIncluding": "6.13.4",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nHID: hid-steam: Fix use-after-free when detaching device\n\nWhen a hid-steam device is removed it must clean up the client_hdev used for\nintercepting hidraw access. This can lead to scheduling deferred work to\nreattach the input device. Though the cleanup cancels the deferred work, this\nwas done before the client_hdev itself is cleaned up, so it gets rescheduled.\nThis patch fixes the ordering to make sure the deferred work is properly\ncanceled."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 7.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The whole sequence is local char-device work \u2014 `UHID_CREATE2` on `/dev/uhid` forging a `BUS_USB 28de:1102` device, `open()` of the resulting client `/dev/hidrawN`, then `UHID_DESTROY` \u2014 and hid-steam has no `hid_is_usb()`/`hid_to_usb_dev()` guard while `uhid_dev_create2()` copies `bus`/`vendor`/`product` and the report descriptor verbatim from userspace. Physically attaching and unplugging a real or emulated Steam Controller is an alternative, strictly lower-severity vector.\nAC:L - The attacker performs both required steps himself and in order \u2014 hold the client hidraw node open, then tear the device down \u2014 and the re-queue of `unregister_work` from `hidraw_disconnect()` \u2192 `hid_hw_close()` \u2192 `steam_client_ll_close()` happens unconditionally after the cancel, so there is no race window to win and no state outside his control. Heap grooming before the worker runs is likewise attacker-driven, and creating further uhid steam devices reclaims the identical devm allocation size.\nPR:L - No capability check exists anywhere on the path \u2014 neither `uhid_dev_create2()` nor `steam_probe()` tests any `CAP_*` \u2014 so access is governed purely by DAC on `/dev/uhid` and `/dev/hidraw*`, which systemd/udev `uaccess`-tag for the logged-in seat user on desktop and Android-class systems and which are routinely exposed inside privileged containers. On real hardware the unprivileged Steam client is precisely the process holding the client hidraw open when the controller is detached.\nUI:N - The attacker\u0027s own process creates the device, opens the client hidraw node, and triggers the removal, and the deferred work then runs automatically on the system workqueue. No action by any other user \u2014 no mount, login, or file open \u2014 is required.\nS:U - The freed `struct steam_device`, the freed parent `struct hid_device`, and every corrupted structure live in kernel memory under the kernel\u0027s own security authority. No hypervisor, IOMMU, or sandbox boundary is crossed.\nC:H - This is a slab use-after-free of an object whose contents are read back after free \u2014 `steam_work_unregister_cb()` reads `steam-\u003eclient_opened`/`steam-\u003econnected`, and `steam_send_report()` reads `steam-\u003ehdev-\u003ereport_enum[HID_FEATURE_REPORT].report_id_hash[0]` plus `hid_report_len()` from the freed hid_device. Reallocating the slab with controlled data turns that chain into an attacker-directed arbitrary kernel read, and per UAF guidance confidentiality impact is High.\nI:H - Two independent write/control primitives exist: the workqueue stores into `work-\u003edata` inside the freed object and then performs an indirect call to `work-\u003efunc(work)` read from freed memory, and the callback additionally does `rcu_assign_pointer(steam-\u003einput/sensors, ...)` writes into the freed struct and dispatches `hid_hw_raw_request()` through the freed hdev\u0027s `ll_driver` function-pointer table. Heap-spray reallocation converts either into control-flow hijacking and arbitrary write.\nA:H - The defect is the slab-use-after-free reported by syzbot (syzbot+0154da2d403396b2bd59), which produces KASAN slab-use-after-free splats, workqueue corruption, and kernel oops/panic \u2014 a full panic under `panic_on_oops`. It is re-triggerable at will by repeating the create/open/destroy cycle."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T11:55:21.882Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/026714ec7546de741826324a6a1914c91024d06c"
        },
        {
          "url": "https://git.kernel.org/stable/c/a899adf7063c6745aaff1ec869f3c7f6329ed0a1"
        },
        {
          "url": "https://git.kernel.org/stable/c/ea3f18d2f02629653b7bfe42607737ccd1343e54"
        },
        {
          "url": "https://git.kernel.org/stable/c/e53fc232a65f7488ab75d03a5b95f06aaada7262"
        }
      ],
      "title": "HID: hid-steam: Fix use-after-free when detaching device",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2025-21923",
    "datePublished": "2025-04-01T15:40:56.229Z",
    "dateReserved": "2024-12-29T08:45:45.788Z",
    "dateUpdated": "2026-08-05T11:55:21.882Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "vulnrichment": {
      "containers": "{\"adp\": [{\"title\": \"CISA ADP Vulnrichment\", \"metrics\": [{\"cvssV3_1\": {\"scope\": \"UNCHANGED\", \"version\": \"3.1\", \"baseScore\": 7.8, \"attackVector\": \"LOCAL\", \"baseSeverity\": \"HIGH\", \"vectorString\": \"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\", \"integrityImpact\": \"HIGH\", \"userInteraction\": \"NONE\", \"attackComplexity\": \"LOW\", \"availabilityImpact\": \"HIGH\", \"privilegesRequired\": \"LOW\", \"confidentialityImpact\": \"HIGH\"}}, {\"other\": {\"type\": \"ssvc\", \"content\": {\"id\": \"CVE-2025-21923\", \"role\": \"CISA Coordinator\", \"options\": [{\"Exploitation\": \"none\"}, {\"Automatable\": \"no\"}, {\"Technical Impact\": \"total\"}], \"version\": \"2.0.3\", \"timestamp\": \"2025-04-16T13:15:09.842820Z\"}}}], \"problemTypes\": [{\"descriptions\": [{\"lang\": \"en\", \"type\": \"CWE\", \"cweId\": \"CWE-416\", \"description\": \"CWE-416 Use After Free\"}]}], \"providerMetadata\": {\"orgId\": \"134c704f-9b21-4f2e-91b3-4a467353bcc0\", \"shortName\": \"CISA-ADP\", \"dateUpdated\": \"2025-04-16T13:15:11.988Z\"}}], \"cna\": {\"title\": \"HID: hid-steam: Fix use-after-free when detaching device\", \"metrics\": [{\"cvssV3_1\": {\"version\": \"3.1\", \"baseScore\": 7.8, \"baseSeverity\": \"HIGH\", \"vectorString\": \"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H\"}, \"scenarios\": [{\"lang\": \"en\", \"value\": \"AV:L - The whole sequence is local char-device work \\u2014 `UHID_CREATE2` on `/dev/uhid` forging a `BUS_USB 28de:1102` device, `open()` of the resulting client `/dev/hidrawN`, then `UHID_DESTROY` \\u2014 and hid-steam has no `hid_is_usb()`/`hid_to_usb_dev()` guard while `uhid_dev_create2()` copies `bus`/`vendor`/`product` and the report descriptor verbatim from userspace. Physically attaching and unplugging a real or emulated Steam Controller is an alternative, strictly lower-severity vector.\\nAC:L - The attacker performs both required steps himself and in order \\u2014 hold the client hidraw node open, then tear the device down \\u2014 and the re-queue of `unregister_work` from `hidraw_disconnect()` \\u2192 `hid_hw_close()` \\u2192 `steam_client_ll_close()` happens unconditionally after the cancel, so there is no race window to win and no state outside his control. Heap grooming before the worker runs is likewise attacker-driven, and creating further uhid steam devices reclaims the identical devm allocation size.\\nPR:L - No capability check exists anywhere on the path \\u2014 neither `uhid_dev_create2()` nor `steam_probe()` tests any `CAP_*` \\u2014 so access is governed purely by DAC on `/dev/uhid` and `/dev/hidraw*`, which systemd/udev `uaccess`-tag for the logged-in seat user on desktop and Android-class systems and which are routinely exposed inside privileged containers. On real hardware the unprivileged Steam client is precisely the process holding the client hidraw open when the controller is detached.\\nUI:N - The attacker\u0027s own process creates the device, opens the client hidraw node, and triggers the removal, and the deferred work then runs automatically on the system workqueue. No action by any other user \\u2014 no mount, login, or file open \\u2014 is required.\\nS:U - The freed `struct steam_device`, the freed parent `struct hid_device`, and every corrupted structure live in kernel memory under the kernel\u0027s own security authority. No hypervisor, IOMMU, or sandbox boundary is crossed.\\nC:H - This is a slab use-after-free of an object whose contents are read back after free \\u2014 `steam_work_unregister_cb()` reads `steam-\u003eclient_opened`/`steam-\u003econnected`, and `steam_send_report()` reads `steam-\u003ehdev-\u003ereport_enum[HID_FEATURE_REPORT].report_id_hash[0]` plus `hid_report_len()` from the freed hid_device. Reallocating the slab with controlled data turns that chain into an attacker-directed arbitrary kernel read, and per UAF guidance confidentiality impact is High.\\nI:H - Two independent write/control primitives exist: the workqueue stores into `work-\u003edata` inside the freed object and then performs an indirect call to `work-\u003efunc(work)` read from freed memory, and the callback additionally does `rcu_assign_pointer(steam-\u003einput/sensors, ...)` writes into the freed struct and dispatches `hid_hw_raw_request()` through the freed hdev\u0027s `ll_driver` function-pointer table. Heap-spray reallocation converts either into control-flow hijacking and arbitrary write.\\nA:H - The defect is the slab-use-after-free reported by syzbot (syzbot+0154da2d403396b2bd59), which produces KASAN slab-use-after-free splats, workqueue corruption, and kernel oops/panic \\u2014 a full panic under `panic_on_oops`. It is re-triggerable at will by repeating the create/open/destroy cycle.\"}]}], \"affected\": [{\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"e1147961b2145fa61c3078a4a797d9576cde91ab\", \"lessThan\": \"026714ec7546de741826324a6a1914c91024d06c\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"3e38cbbfa0a128a9d64773240a9eb3bc7bae3b1a\", \"lessThan\": \"a899adf7063c6745aaff1ec869f3c7f6329ed0a1\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"053fa3888d2a957f4db26c05e503f4c6b9570a30\", \"lessThan\": \"ea3f18d2f02629653b7bfe42607737ccd1343e54\", \"versionType\": \"git\"}, {\"status\": \"affected\", \"version\": \"79504249d7e27cad4a3eeb9afc6386e418728ce0\", \"lessThan\": \"e53fc232a65f7488ab75d03a5b95f06aaada7262\", \"versionType\": \"git\"}], \"programFiles\": [\"drivers/hid/hid-steam.c\"], \"defaultStatus\": \"unaffected\"}, {\"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\", \"vendor\": \"Linux\", \"product\": \"Linux\", \"versions\": [{\"status\": \"affected\", \"version\": \"6.6.79\", \"lessThan\": \"6.6.83\", \"versionType\": \"semver\"}, {\"status\": \"affected\", \"version\": \"6.12.16\", \"lessThan\": \"6.12.19\", \"versionType\": \"semver\"}, {\"status\": \"affected\", \"version\": \"6.13.4\", \"lessThan\": \"6.13.7\", \"versionType\": \"semver\"}], \"programFiles\": [\"drivers/hid/hid-steam.c\"], \"defaultStatus\": \"unaffected\"}], \"references\": [{\"url\": \"https://git.kernel.org/stable/c/026714ec7546de741826324a6a1914c91024d06c\"}, {\"url\": \"https://git.kernel.org/stable/c/a899adf7063c6745aaff1ec869f3c7f6329ed0a1\"}, {\"url\": \"https://git.kernel.org/stable/c/ea3f18d2f02629653b7bfe42607737ccd1343e54\"}, {\"url\": \"https://git.kernel.org/stable/c/e53fc232a65f7488ab75d03a5b95f06aaada7262\"}], \"x_generator\": {\"engine\": \"bippy-1.2.0\"}, \"descriptions\": [{\"lang\": \"en\", \"value\": \"In the Linux kernel, the following vulnerability has been resolved:\\n\\nHID: hid-steam: Fix use-after-free when detaching device\\n\\nWhen a hid-steam device is removed it must clean up the client_hdev used for\\nintercepting hidraw access. This can lead to scheduling deferred work to\\nreattach the input device. Though the cleanup cancels the deferred work, this\\nwas done before the client_hdev itself is cleaned up, so it gets rescheduled.\\nThis patch fixes the ordering to make sure the deferred work is properly\\ncanceled.\"}], \"cpeApplicability\": [{\"nodes\": [{\"negate\": false, \"cpeMatch\": [{\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.6.83\", \"versionStartIncluding\": \"6.6.79\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.12.19\", \"versionStartIncluding\": \"6.12.16\"}, {\"criteria\": \"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*\", \"vulnerable\": true, \"versionEndExcluding\": \"6.13.7\", \"versionStartIncluding\": \"6.13.4\"}], \"operator\": \"OR\"}]}], \"providerMetadata\": {\"orgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"shortName\": \"Linux\", \"dateUpdated\": \"2026-08-05T11:55:21.882Z\"}}}",
      "cveMetadata": "{\"cveId\": \"CVE-2025-21923\", \"state\": \"PUBLISHED\", \"dateUpdated\": \"2026-08-05T11:55:21.882Z\", \"dateReserved\": \"2024-12-29T08:45:45.788Z\", \"assignerOrgId\": \"416baaa9-dc9f-4396-8d5f-8c081fb06d67\", \"datePublished\": \"2025-04-01T15:40:56.229Z\", \"assignerShortName\": \"Linux\"}",
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…