Ad

CVE-2026-48702

HIGH CVSS 3.1: 7,5
Обновлено 13 августа 2026
Payload
Параметр Значение
CVSS 7,5 (HIGH)
Уязвимые версии до 1.5.2
Тип уязвимости CWE-770 (Выделение ресурсов без ограничений)
Поставщик Payload
Публичный эксплойт Нет

Rekor — это журнал прозрачности цепочки поставок программного обеспечения. Начиная с версии 0.3.0 и до версии 1.5.2, функция Package.Unmarshal() в pkg/types/alpine/apk.go распаковывает сигнатурные и управляющие элементы gzip файла APK в буферы в памяти, не ограничивая общий размер распакованного файла. Существующая проверка `max_apk_metadata_size` (по умолчанию 1 МБ) применяется только к отдельным размерам заголовков записей tar после завершения распаковки, поэтому она не предотвращает потребление неограниченной кучи декомпрессионной бомбой.

Злоумышленник может создать поток gzip, который сжимается с соотношением ~ 1000:1 (например, 2 МБ сжатых нулей → 2 ГБ распакованных). При отправке в виде spec.package.content в Alpine «ProposeEntry» сервер распаковывает всю полезную нагрузку в память во время обработки запроса, вызывая фатальную ошибку нехватки памяти во время выполнения Go или OS OOM-kill, которую не удается отловить промежуточным программным обеспечением восстановления() сервера. Это доступно через две неаутентифицированные конечные точки: POST/api/v1/log/entries (createLogEntry) и POST /api/v1/log/entries/retrive (searchLogQuery)`.

Оба вызывают `V001Entry.Canonicalize()` → `fetchExternalEntities()` → `apk.Unmarshal(packageData)`, который выполняет неограниченную декомпрессию. Версия 1.5.2 исправляет проблему. Эффективного решения проблемы не существует.

Установка `max_request_body_size` уменьшает, но не устраняет уязвимость из-за степени сжатия ~ 1000: 1 (ограничение тела в 1 МБ по-прежнему позволяет выделить в куче ~ 1 ГБ). Установка max_apk_metadata_size не влияет на эту уязвимость, поскольку проверка применяется после распаковки.

Показать оригинальное описание (EN)

Rekor is a software supply chain transparency log. Starting in version 0.3.0 and prior to version 1.5.2, the `Package.Unmarshal()` function in `pkg/types/alpine/apk.go` decompresses the signature and control gzip members of an APK file into in-memory buffers without bounding the total decompressed size. The existing `max_apk_metadata_size` check (default 1MB) is only applied to individual tar entry header sizes after decompression completes, so it does not prevent a decompression bomb from consuming unbounded heap memory. An attacker can craft a gzip stream that compresses at a ~1000:1 ratio (e.g., 2MB compressed zeros → 2GB decompressed). When submitted as spec.package.content in an Alpine `ProposedEntry`, the server decompresses the full payload into memory during request processing, triggering a fatal Go runtime out-of-memory error or OS OOM-kill that cannot be caught by the server's recover() middleware. This is reachable via two unauthenticated endpoints, `POST /api/v1/log/entries (createLogEntry)` and `POST /api/v1/log/entries/retrieve (searchLogQuery)`. Both invoke `V001Entry.Canonicalize()` → `fetchExternalEntities()` → `apk.Unmarshal(packageData)`, which performs the unbounded decompression. Version 1.5.2 patches the issue. There is no effective workaround. Setting `max_request_body_size` reduces but does not eliminate exposure due to the ~1000:1 compression ratio (a 1MB body limit still allows ~1GB heap allocation). Setting `max_apk_metadata_size` has no effect on this vulnerability since the check is applied after decompression.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Нет
Нет утечки данных
Целостность
Нет
Нет модификации данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1