jq — это процессор JSON командной строки. Перед фиксацией 0c7d133c3c7e37c00b6d46b658a02244fdd3c784 jq использовал MurmurHash3 с жестко запрограммированным общедоступным начальным значением (0x432A9843) для всех операций с хеш-таблицей объектов JSON, что позволяло злоумышленнику предварительно вычислить коллизии ключей в автономном режиме. При предоставлении созданного объекта JSON (~ 100 КБ), в котором все ключи хешируются в одном и том же сегменте, поиск в хеш-таблице ухудшается с O(1) до O(n), превращая любое выражение jq в операцию O(n²) и вызывая значительную нагрузку на процессор.
Это затронуло распространенные случаи использования jq, такие как конвейеры CI/CD, веб-службы и сценарии обработки данных, и было гораздо более практичным в использовании, чем существующие проблемы переполнения кучи, поскольку требовало лишь небольшой полезной нагрузки. Эта проблема исправлена в коммите 0c7d133c3c7e37c00b6d46b658a02244fdd3c784.
Показать оригинальное описание (EN)
jq is a command-line JSON processor. Before commit 0c7d133c3c7e37c00b6d46b658a02244fdd3c784, jq used MurmurHash3 with a hardcoded, publicly visible seed (0x432A9843) for all JSON object hash table operations, which allowed an attacker to precompute key collisions offline. By supplying a crafted JSON object (~100 KB) where all keys hashed to the same bucket, hash table lookups degraded from O(1) to O(n), turning any jq expression into an O(n²) operation and causing significant CPU exhaustion. This affected common jq use cases such as CI/CD pipelines, web services, and data processing scripts, and was far more practical to exploit than existing heap overflow issues since it required only a small payload. This issue has been patched in commit 0c7d133c3c7e37c00b6d46b658a02244fdd3c784.
Характеристики атаки
Последствия
Строка CVSS v3.1