Наземная станция до 0.6.0 в пути конфигурации орбитального источника содержит уязвимость подделки слепых запросов на стороне сервера без аутентификации, которая позволяет любому неаутентифицированному клиенту Socket.IO заставить процесс наземной станции выдавать исходящие HTTP-запросы в пункты назначения, выбранные злоумышленником. Злоумышленники могут подключиться к серверу Socket.IO через порт 7000 без учетных данных из-за отключенной принудительной аутентификации и политики CORS с подстановочными знаками, затем отправить событие data_submission с действием submit-orbital-sources, чтобы сохранить URL-адрес, предоставленный злоумышленником, в базе данных, а затем запустить орбитальную синхронизацию через столь же неаутентифицированное событие background_task:start. URL-адрес сохраняется без списка разрешенных схем, без проверки хоста и без отклонения адресов обратной связи, RFC1918 или локальных адресов (метаданные облачного экземпляра по адресу 169.254.169.254) и передается непосредственно в запросы.get в _fetch_http_3le и _fetch_http_omm в backend/tlesync/source_adapters.py.
Коды состояния HTTP и сообщения об ошибках из исходящего запроса передаются в событии Orbital_sync_state Socket.IO всем подключенным клиентам, обеспечивая работоспособный оракул для интерпретации ответов внутренних служб и облачных метаданных, даже если необработанное тело ответа не передается напрямую. Поскольку вредоносный источник сохраняется в базе данных при перезапусках и повторных срабатываниях каждые 24 часа в запланированном цикле синхронизации, примитив обеспечивает надежный долгосрочный SSRF без необходимости оставаться на связи злоумышленнику.
Показать оригинальное описание (EN)
Ground Station prior to 0.6.0 contains an unauthenticated blind server-side request forgery vulnerability in the orbital-source configuration path that allows any unauthenticated Socket.IO client to cause the ground-station process to issue outbound HTTP requests to attacker-chosen destinations. Attackers can connect to the Socket.IO server on port 7000 without credentials due to disabled authentication enforcement and a wildcard CORS policy, then submit a data_submission event with submit-orbital-sources action to persist an attacker-supplied URL in the database, then trigger an orbital sync via the equally unauthenticated background_task:start event. The URL is stored with no scheme allowlist, no host validation, and no rejection of loopback, RFC1918, or link-local (cloud instance metadata at 169.254.169.254) addresses, and is passed directly to requests.get in _fetch_http_3le and _fetch_http_omm in backend/tlesync/source_adapters.py. HTTP status codes and error messages from the outbound request are emitted in the orbital_sync_state Socket.IO event to all connected clients, providing a serviceable oracle for interpreting internal-service and cloud-metadata responses even though the raw response body is not directly leaked. Because the malicious source persists in the database across restarts and re-fires every 24 hours on the scheduled sync cycle, the primitive gives durable long-term SSRF without the attacker needing to remain connected.
Характеристики атаки
Последствия
Строка CVSS v4.0