Gotenberg — это API без сохранения состояния для файлов PDF на базе Docker. С версий 8.10.0 до 8.33.0 функция newContext в pkg/modules/api/context.go запускает одну горутину errgroup.Go для каждой составной записи downloadFrom и позволяет этим горутинам одновременно записывать в общие карты и фрагменты ctx.files, ctx.diskToOriginal и ctx.filesByField. Карты и фрагменты Go небезопасны для одновременной мутации, поэтому созданный многочастный запрос, содержащий множество записей downloadFrom, может вызвать гонку данных и завершить процесс с фатальной параллельной ошибкой выполнения записи карты.
Конфигурация по умолчанию включает downloadFrom и отключает аутентификацию, позволяя неаутентифицированному удаленному злоумышленнику аварийно завершить работу открытой службы преобразования и вызвать отказ в обслуживании. Эта проблема исправлена в версии 8.33.0.
Показать оригинальное описание (EN)
Gotenberg is a Docker-powered stateless API for PDF files. From 8.10.0 until 8.33.0, the newContext function in pkg/modules/api/context.go starts one errgroup.Go goroutine for each multipart downloadFrom entry and allows those goroutines to concurrently write to the shared ctx.files, ctx.diskToOriginal, and ctx.filesByField maps and slices. Go maps and slices are not safe for concurrent mutation, so a crafted multipart request containing many downloadFrom entries can trigger a data race and terminate the process with a fatal concurrent map writes runtime error. The default configuration enables downloadFrom and disables authentication, allowing an unauthenticated remote attacker to crash an exposed conversion service and cause a denial of service. This issue is fixed in version 8.33.0.
Характеристики атаки
Последствия
Строка CVSS v3.1