Защитная памятка по mcp-searxng и GHSA-hjwh-xvfw-qrwj: область версий, runtime-инвентарь, обратимый тест, критерии решения, стоп-линия, канарейка, возврат и очищенный журнал без опасного payload.
Какой факт подтверждён
Сначала отделите подтверждённый факт advisory от предположения о своей установке и только затем планируйте стенд. Официальная запись GHSA-hjwh-xvfw-qrwj подтверждает для mcp-searxng: встроенные в URL credentials могли раскрыться локальному MCP-клиенту через диагностические каналы. Подтверждённая область — mcp-searxng до 1.12.0, где Basic Auth credentials внутри SEARXNG_URL могли попасть в MCP logs или JSON-RPC errors. Это описание класса дефекта и границы исправления, но не свидетельство того, что этот сервер, контейнер или рабочее место действительно использует затронутый контур. До любого правки отметьте статус как unknown, affected, not affected by reachability либо blocked и запишите основание; отсутствие жалоб и зелёный health сами по себе ничего не доказывают. Контрольная группа редакционного шаблона: 5. Проверяемая цепочка именно для mcp-searxng записывается отдельно: исходный факт — встроенные в URL credentials могли раскрыться локальному MCP-клиенту через диагностические каналы; практическое исправление — обновить mcp-searxng до 1.12.0 и редактировать userinfo во всех URL до журналирования и сериализации ошибки. Если хотя бы одно звено взято не из фактической поставки, применимость остаётся неизвестной, даже когда номер пакета выглядит новым.
Карта применимости
Для mcp-searxng соберите одну строку «sink stdio/stderr/error | URL form | username present | password sentinel present | protocol valid» из фактического runtime. Нужны версия реально загруженного компонента, digest артефакта, способ dependency resolution, включённая функция и владелец правки. Manifest, lockfile и container tag полезны как указатели, но могут расходиться с работающим процессом. Не переносите в отчёт hostname, IP, usernames, tokens, cookies, полные environment, пользовательские документы или содержимое базы. Если runtime identity либо достижимость функции не подтверждены, не повышайте уверенность: честный итог — blocked до безопасного inventory. Уникальные поля этой инвентаризации — «sink stdio/stderr/error | URL form | username present | password sentinel present | protocol valid». Их заполняют одной строкой на runtime, не смешивая несколько реплик в среднее значение. Граница версии сформулирована так: mcp-searxng до 1.12.0, где Basic Auth credentials внутри SEARXNG_URL могли попасть в MCP logs или JSON-RPC errors. Это позволяет отличить неподтверждённую установку от доказанно недостижимой функции.
Контроль до обновления
Перед remediation сохраните восстановимый snapshot конфигурации и тестовых данных, прежний SHA-256 или image digest, resource ceiling и критерий остановки. безопасный regression-контроль: поместить фальшивые sentinel credentials во временный SEARXNG_URL, запустить stdio и вызвать безопасную validation error; MCP frames, stderr и JSON-RPC capture не должны содержать sentinel. Он проводится только на synthetic data и в отдельном namespace или процессе. Сначала запишите ожидаемое policy-ответ и baseline, затем одинаковым способом проверьте исправленную сборку. Нельзя подменять наблюдение догадкой: timeout может означать crash, неверный маршрут или потерю telemetry, а HTTP status не показывает, было ли уже выполнено опасное действие внутри. Контрольный объект для mcp-searxng не содержит пользовательского состояния. Его контроль: поместить фальшивые sentinel credentials во временный SEARXNG_URL, запустить stdio и вызвать безопасную validation error; MCP frames, stderr и JSON-RPC capture не должны содержать sentinel. Эксперимент не начинают, если уже на этапе подготовки верно условие остановки: используются настоящие credentials, рабочий search endpoint или сырые логи покидают локальный стенд. Такая проверка ценнее рискованной демонстрации, потому что её можно повторить после отката.
Два безопасных сценария
Положительный контроль обязан сохранить штатную функцию: URL показывается без userinfo или с redacted-маркером, протокол остаётся валидным, sentinel отсутствует во всех sinks. Отрицательный контроль отличается ровно одним измерением, указанным в матрице, и должен завершиться ранним ограниченным отказом. Не расширяйте вход после первого понятного решения и не добивайтесь аварии ради наглядности. Для пары опытов заранее задайте лимит времени, памяти, числа объектов или сетевых событий и один cleanup. Если положительный контроль не проходит, отрицательный итог нельзя объявлять защитой: стенд может быть просто сломан или обращаться не к тому runtime. Контраст двух сценариев имеет один ожидаемый рабочий исход: URL показывается без userinfo или с redacted-маркером, протокол остаётся валидным, sentinel отсутствует во всех sinks. Отрицательная ветвь отвечает только на подтверждённую проблему — встроенные в URL credentials могли раскрыться локальному MCP-клиенту через диагностические каналы. Остальные параметры, включая артефакт, конфигурацию, лимит и набор synthetic data, сохраняют одинаковыми, чтобы не спутать защитное policy-ответ с изменением стенда.
Как читать результат
Passed означает одновременно: фактическая версия входит в исправленную область, положительный контроль работает, отрицательный получает ожидаемое раннее policy-ответ, status остаётся целым, а следующий рабочий запрос успешен. Failed — нарушение хотя бы одного из этих условий. Blocked — отсутствует наблюдаемость, identity runtime или безопасный стенд. Для этой темы специальная развилка такова: проверка идёт по нескольким каналам, потому что очистка application log не закрывает JSON-RPC error data или stderr процесса. Сохраните observed decision независимо от ожидания; фраза «похоже исправлено» не годится как итог. Для чтения результата используйте специфическую развилку: проверка идёт по нескольким каналам, потому что очистка application log не закрывает JSON-RPC error data или stderr процесса. Её сопоставляют со строкой «sink stdio/stderr/error | URL form | username present | password sentinel present | protocol valid», а не с общим впечатлением оператора. Если наблюдение нельзя выразить этими полями, материала пока недостаточно для passed или not affected.
Изменение и путь назад
Remediation для этой записи: обновить mcp-searxng до 1.12.0 и редактировать userinfo во всех URL до журналирования и сериализации ошибки. Делайте правка одной канарейкой, повторите обе верификации тем же harness и сравните digest, loaded version, restart counter, resource budget и первый релевантный error-class. Backup считается пригодным только вместе с проверенной командой восстановления и пониманием совместимости состояния. Возврат бинарника не всегда возвращает формат данных, поэтому state rollback и code rollback отмечают отдельно. Если после обновления изменяется штатное поведение или наблюдаемость, остановите распространение, верните канарейку и не публикуйте общий зелёный вердикт. Канарейка mcp-searxng считается завершённой лишь после шага «обновить mcp-searxng до 1.12.0 и редактировать userinfo во всех URL до журналирования и сериализации ошибки» и повторного подтверждения: URL показывается без userinfo или с redacted-маркером, протокол остаётся валидным, sentinel отсутствует во всех sinks. Рядом сохраняют прежний digest и совместимый snapshot. Любое расхождение штатного контроля превращает rollout в paused независимо от того, исчез ли исходный симптом.
Красные флаги опыта
Жёсткий стоп-критерий: используются настоящие credentials, рабочий search endpoint или сырые логи покидают локальный стенд. Также остановитесь при появлении настоящих secrets, персональных данных, внешнего неподконтрольного адреса, широких прав, необратимой миграции, растущего resource budget или необходимости раскрыть активную последовательность. Не используйте публичный форум как доказательство причины, затронутости или массовости; он лишь напомнил проверить backup и rollback. Один успешный запрос, отсутствие публичного кода атаки, статус service active и тишина журнала остаются ложнозелёными сигналами без специфической матрицы. Для данного компонента аварийная граница сформулирована буквально: используются настоящие credentials, рабочий search endpoint или сырые логи покидают локальный стенд. Не заменяйте её более широким опытом. Допустимый контроль остаётся узким: поместить фальшивые sentinel credentials во временный SEARXNG_URL, запустить stdio и вызвать безопасную validation error; MCP frames, stderr и JSON-RPC capture не должны содержать sentinel. При первом превышении лимита фиксируют очищенный error-class и возвращают стенд в исходное status.
Очищенный журнал решения
Минимальный пакет владельцу: GHSA-hjwh-xvfw-qrwj, фактическая версия до и после, URL двух первичных источников, digest артефакта, timestamp Europe/Moscow, expected/observed decision и очищенная строка «sink stdio/stderr/error | URL form | username present | password sentinel present | protocol valid». Добавьте продолжительность малого окна, статус snapshot/rollback и один обезличенный error-class. Удалите абсолютные домашние пути, адреса, идентификаторы аккаунтов, session values, содержимое объектов и сырой payload. Advisory подтверждает технический факт и исправленную версию, но не итог вашего опыта; поэтому не выдумывайте тест, которого не проводили, и не обещайте индексацию или позиции статьи. Строка завершения для GHSA-hjwh-xvfw-qrwj обязана связать «sink stdio/stderr/error | URL form | username present | password sentinel present | protocol valid» с ожидаемым штатным признаком: URL показывается без userinfo или с redacted-маркером, протокол остаётся валидным, sentinel отсутствует во всех sinks. Так другой инженер сможет проверить policy-ответ без доступа к секретам и сырому входу. Если ссылка, версия или digest позднее меняются, запись переводят в needs re-verification, а не молча считают актуальной.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, версии и ссылки перепроверены. Реальные пользовательские данные, активные опасные payload и вымышленные результаты тестов не использовались.
Источники и проверка
- GitHub Advisory Database: GHSA-hjwh-xvfw-qrwj проверено 2026-08-30
- npm registry: mcp-searxng 1.12.0 проверено 2026-08-30
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.