CVE-2026-31773 (GCVE-0-2026-31773)
Vulnerability from cvelistv5
Published
2026-05-01 14:15
Modified
2026-08-05 12:25
Summary
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: SMP: derive legacy responder STK authentication from MITM state The legacy responder path in smp_random() currently labels the stored STK as authenticated whenever pending_sec_level is BT_SECURITY_HIGH. That reflects what the local service requested, not what the pairing flow actually achieved. For Just Works/Confirm legacy pairing, SMP_FLAG_MITM_AUTH stays clear and the resulting STK should remain unauthenticated even if the local side requested HIGH security. Use the established MITM state when storing the responder STK so the key metadata matches the pairing result. This also keeps the legacy path aligned with the Secure Connections code, which already treats JUST_WORKS/JUST_CFM as unauthenticated.
Impacted products
Vendor Product Version
Linux Linux Version: fff3490f47810e2d34b91fb9e31103e923b11c2f
Version: fff3490f47810e2d34b91fb9e31103e923b11c2f
Version: fff3490f47810e2d34b91fb9e31103e923b11c2f
Version: fff3490f47810e2d34b91fb9e31103e923b11c2f
Version: fff3490f47810e2d34b91fb9e31103e923b11c2f
Version: fff3490f47810e2d34b91fb9e31103e923b11c2f
Version: fff3490f47810e2d34b91fb9e31103e923b11c2f
Version: fff3490f47810e2d34b91fb9e31103e923b11c2f
Version: 14ec593d6bb050cf40a4ade2f9ac9ca050e0412c
Version: 3.15.5   
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "net/bluetooth/smp.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "9a38659a3d06080715691bd3139f9c4b61f688e3",
              "status": "affected",
              "version": "fff3490f47810e2d34b91fb9e31103e923b11c2f",
              "versionType": "git"
            },
            {
              "lessThan": "667f44f1392df6482483756458c48670e579e9ff",
              "status": "affected",
              "version": "fff3490f47810e2d34b91fb9e31103e923b11c2f",
              "versionType": "git"
            },
            {
              "lessThan": "929db734d12db41ca5f95424db4612397f1bd4a7",
              "status": "affected",
              "version": "fff3490f47810e2d34b91fb9e31103e923b11c2f",
              "versionType": "git"
            },
            {
              "lessThan": "b1c6a8e554a39b222c0879a288ea98e338fc4d77",
              "status": "affected",
              "version": "fff3490f47810e2d34b91fb9e31103e923b11c2f",
              "versionType": "git"
            },
            {
              "lessThan": "0afc846bd80073ffcd2b8040f2b2fafaea3d9f72",
              "status": "affected",
              "version": "fff3490f47810e2d34b91fb9e31103e923b11c2f",
              "versionType": "git"
            },
            {
              "lessThan": "061ee71ac6b03c9f8432fe49538c3682bfcf4cf3",
              "status": "affected",
              "version": "fff3490f47810e2d34b91fb9e31103e923b11c2f",
              "versionType": "git"
            },
            {
              "lessThan": "9a6d0db176f082685e0b6149700c0baf3ce2aa8b",
              "status": "affected",
              "version": "fff3490f47810e2d34b91fb9e31103e923b11c2f",
              "versionType": "git"
            },
            {
              "lessThan": "20756fec2f0108cb88e815941f1ffff88dc286fe",
              "status": "affected",
              "version": "fff3490f47810e2d34b91fb9e31103e923b11c2f",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "14ec593d6bb050cf40a4ade2f9ac9ca050e0412c",
              "versionType": "git"
            },
            {
              "lessThan": "3.16",
              "status": "affected",
              "version": "3.15.5",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "net/bluetooth/smp.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "3.16"
            },
            {
              "lessThan": "3.16",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.10.*",
              "status": "unaffected",
              "version": "5.10.253",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "5.15.*",
              "status": "unaffected",
              "version": "5.15.203",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.1.*",
              "status": "unaffected",
              "version": "6.1.168",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.6.*",
              "status": "unaffected",
              "version": "6.6.134",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.12.*",
              "status": "unaffected",
              "version": "6.12.81",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.22",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.19.*",
              "status": "unaffected",
              "version": "6.19.12",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.0",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.10.253",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "5.15.203",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.1.168",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.6.134",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.12.81",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.22",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.19.12",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.0",
                  "versionStartIncluding": "3.16",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "3.15.5",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nBluetooth: SMP: derive legacy responder STK authentication from MITM state\n\nThe legacy responder path in smp_random() currently labels the stored\nSTK as authenticated whenever pending_sec_level is BT_SECURITY_HIGH.\nThat reflects what the local service requested, not what the pairing\nflow actually achieved.\n\nFor Just Works/Confirm legacy pairing, SMP_FLAG_MITM_AUTH stays clear\nand the resulting STK should remain unauthenticated even if the local\nside requested HIGH security. Use the established MITM state when\nstoring the responder STK so the key metadata matches the pairing result.\n\nThis also keeps the legacy path aligned with the Secure Connections code,\nwhich already treats JUST_WORKS/JUST_CFM as unauthenticated."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:A - The vulnerable SMP legacy pairing path is reached by Bluetooth LE Security Manager PDUs over the L2CAP SMP fixed channel, so the attacker must be within Bluetooth radio range.\nAC:L - A nearby attacker can drive the Pairing Request/Confirm/Random exchange and trigger the responder STK metadata error without winning a race or relying on memory layout.\nPR:N - The affected code runs during Bluetooth pairing before the remote peer has authenticated or obtained any prior privileges on the target.\nUI:N - Although some deployments may ask a user-space agent to confirm pairing, headless or auto-confirming BLE deployments can complete Just Works/Confirm pairing without human action, so the higher-severity reasonable case is no user interaction.\nS:U - The bug misclassifies Bluetooth link/key authentication inside the same host Bluetooth security authority and does not cross a VM, sandbox, or hardware isolation boundary.\nC:H - An unauthenticated adjacent peer can cause unauthenticated legacy pairing material to be treated as authenticated, allowing access to data exposed only to BT_SECURITY_HIGH peers in high-value BLE deployments.\nI:H - The same authentication bypass can let the peer perform writes or control operations guarded by authenticated Bluetooth security, including persistent trusted-key use after pairing.\nA:H - In severe but reasonable embedded or controller BLE deployments, unauthorized authenticated-level control access can disable, reset, or otherwise disrupt protected device functionality."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-05T12:25:05.705Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/9a38659a3d06080715691bd3139f9c4b61f688e3"
        },
        {
          "url": "https://git.kernel.org/stable/c/667f44f1392df6482483756458c48670e579e9ff"
        },
        {
          "url": "https://git.kernel.org/stable/c/929db734d12db41ca5f95424db4612397f1bd4a7"
        },
        {
          "url": "https://git.kernel.org/stable/c/b1c6a8e554a39b222c0879a288ea98e338fc4d77"
        },
        {
          "url": "https://git.kernel.org/stable/c/0afc846bd80073ffcd2b8040f2b2fafaea3d9f72"
        },
        {
          "url": "https://git.kernel.org/stable/c/061ee71ac6b03c9f8432fe49538c3682bfcf4cf3"
        },
        {
          "url": "https://git.kernel.org/stable/c/9a6d0db176f082685e0b6149700c0baf3ce2aa8b"
        },
        {
          "url": "https://git.kernel.org/stable/c/20756fec2f0108cb88e815941f1ffff88dc286fe"
        }
      ],
      "title": "Bluetooth: SMP: derive legacy responder STK authentication from MITM state",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-31773",
    "datePublished": "2026-05-01T14:15:01.277Z",
    "dateReserved": "2026-03-09T15:48:24.140Z",
    "dateUpdated": "2026-08-05T12:25:05.705Z",
    "state": "PUBLISHED"
  },
  "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…