Faktory — это сервер фоновых заданий, не зависящий от языка. В версиях до 1.10.0 сервер уязвим для отказа в обслуживании без аутентификации, при котором одна неверная команда приводит к сбою всего процесса. Его проводной протокол основан на строках, и некоторые обработчики команд разрезают или индексируют полученную строку по фиксированному смещению, например cmd[5:] для PUSH или qs[0] для QUEUE, без проверки наличия полезной нагрузки.
Отправка голого глагола без полезной нагрузки, например PUSH, ACK, FAIL, BEAT, PUSHB или QUEUE, вызывает панику среза Go или индекса за пределами диапазона. Поскольку в кодовой базе нет функции восстановления() нигде на пути отправки команд, невосстановленная паника в горутине-обработчике завершает весь процесс Go, а не только это соединение, мгновенно отключая всех остальных клиентов, рабочих и выполняемые задания. Атака требует только подключения к командному порту и завершения тривиального рукопожатия без учетных данных, если пароль не настроен, и может повторяться, чтобы отключить службу на неопределенный срок.
Эта проблема исправлена в версии 1.10.0.
Показать оригинальное описание (EN)
Faktory is a language-agnostic background job server. In versions prior to 1.10.0, the server is vulnerable to an unauthenticated denial of service in which a single malformed command crashes the entire process. Its wire protocol is line-based, and several command handlers slice or index the received line at a fixed offset, such as cmd[5:] for PUSH or qs[0] for QUEUE, without checking that a payload is present. Sending a bare verb with no payload, for example PUSH, ACK, FAIL, BEAT, PUSHB, or QUEUE, triggers a Go slice or index out-of-range panic. Because the codebase has no recover() anywhere in the command-dispatch path, an unrecovered panic in a handler goroutine terminates the whole Go process rather than just that connection, instantly disconnecting every other client, worker, and in-flight job. The attack requires only a connection to the command port and completion of the trivial handshake, with no credentials when no password is configured, and can be repeated to keep the service down indefinitely. This issue is fixed in version 1.10.0.
Характеристики атаки
Последствия
Строка CVSS v4.0