Python CPython Unicodedata Normalization Denial-of-Service Vulnerability

Vulnerability

A denial-of-service vulnerability has been identified in Python's CPython implementation, specifically within the unicodedata.normalize() function. This issue arises when the function processes specially crafted Unicode input that includes long sequences of combining characters with alternating Canonical Combining Class values. Such input can cause the normalization process to exhibit quadratic time complexity, leading to excessive CPU usage. A payload of approximately 0.5MB can consume over 30 seconds of processing time. This vulnerability affects all normalization forms.

Impact

Exploitation of this vulnerability can lead to significant CPU resource consumption, causing a denial-of-service condition.

Reproduction

The vulnerability can be reproduced by calling the unicodedata.normalize() function with a string that contains long runs of combining characters. These characters should be arranged in a way that their Canonical Combining Class values alternate, creating a scenario where the normalization process becomes inefficient. This can be done by crafting a payload that meets these criteria and then measuring the CPU time taken to process it.

Remediation

Users can update to the latest version of CPython, where this vulnerability has been addressed. Instructions for updating CPython can be found in the official Python documentation.

Added: Jun 3, 2026, 4:27 PM
Updated: Jun 3, 2026, 4:27 PM

Vulnerability Rating

Custom Algorithm
spread
7.8
impact
0.6
exploitability
5.7
remediation
0.0
relevance
9.9
threat
4.8
urgency
2.9
incentive
0.0

Our algorithm analyzes dozens of metrics to generate these 8 key vulnerability categories, which are then combined to calculate the overall risk score.