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

CVE-2026-21489

Published: 2026-01-06 14:15:49
Last Modified: 2026-01-14 18:46:34

Description

iccDEV provides a set of libraries and tools for working with ICC color management profiles. Versions 2.3.1.1 and below have Out-of-bounds Read and Integer Underflow (Wrap or Wraparound) vulnerabilities in its CIccCalculatorFunc::SequenceNeedTempReset function. This issue is fixed in version 2.3.1.2.

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.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
// CVE-2026-21489 PoC - Malicious ICC Profile Triggering OOB Read // This PoC demonstrates the vulnerability in CIccCalculatorFunc::SequenceNeedTempReset #include <stdio.h> #include <stdlib.h> #include <string.h> // Simulated ICC profile structure typedef struct { unsigned int size; unsigned char* data; unsigned int calc_param; } ICCProfile; // Vulnerable function simulation int SequenceNeedTempReset_Simulated(ICCProfile* profile) { unsigned int temp_reset = 0; // Integer underflow vulnerability // When calc_param is 0, subtracting 1 causes underflow if (profile->calc_param > 0) { temp_reset = profile->calc_param - 1; } else { temp_reset = profile->calc_param - 1; // Underflow here } // Out-of-bounds read vulnerability // Using underflowed value as offset without validation unsigned char* read_ptr = profile->data + temp_reset; // This read may access memory outside profile->data bounds if (*read_ptr > 0xFF) { return -1; } return 0; } // Create malicious ICC profile to trigger vulnerability ICCProfile* create_malicious_profile() { ICCProfile* profile = (ICCProfile*)malloc(sizeof(ICCProfile)); profile->size = 100; profile->data = (unsigned char*)malloc(profile->size); memset(profile->data, 0x41, profile->size); // Set calc_param to 0 to trigger integer underflow profile->calc_param = 0; return profile; } int main() { printf("CVE-2026-21489 PoC\n"); printf("Testing integer underflow in SequenceNeedTempReset\n"); ICCProfile* malicious_profile = create_malicious_profile(); // Trigger the vulnerability int result = SequenceNeedTempReset_Simulated(malicious_profile); printf("Result: %d\n", result); printf("Integer underflow occurred, calc_param-1 = %u\n", malicious_profile->calc_param - 1); free(malicious_profile->data); free(malicious_profile); return 0; } /* Usage: 1. Compile: gcc -o poc poc.c 2. Run: ./poc 3. The PoC demonstrates how calc_param=0 leads to integer underflow causing subsequent out-of-bounds memory access Real-world exploitation: - Attacker creates malicious .icc file with specific parameters - Victim opens file in vulnerable application (photoshop, etc.) - Application parses ICC profile, triggers SequenceNeedTempReset - Integer underflow causes OOB read, leaking sensitive memory */

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-21489", "sourceIdentifier": "[email protected]", "published": "2026-01-06T14:15:48.590", "lastModified": "2026-01-14T18:46:33.683", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "iccDEV provides a set of libraries and tools for working with ICC color management profiles. Versions 2.3.1.1 and below have Out-of-bounds Read and Integer Underflow (Wrap or Wraparound) vulnerabilities in its CIccCalculatorFunc::SequenceNeedTempReset function. This issue is fixed in version 2.3.1.2."}, {"lang": "es", "value": "iccDEV proporciona un conjunto de bibliotecas y herramientas para trabajar con perfiles de gestión de color ICC. Las versiones 2.3.1.1 e inferiores tienen vulnerabilidades de lectura fuera de límites y desbordamiento negativo de enteros (ajuste o envoltura) en su función CIccCalculatorFunc::SequenceNeedTempReset. Este problema se ha corregido en la versión 2.3.1.2."}], "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-125"}, {"lang": "en", "value": "CWE-191"}]}], "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/cfabfe52c9c7eb0481b62c8aad56580bb11efdad", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/InternationalColorConsortium/iccDEV/security/advisories/GHSA-ph89-6q5h-wfw5", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}