Проверка безопасности MCP: WARDEN — 2026-11-07

Статус: сравнение пяти опубликованных продуктов завершено на обоих хостах. Каждый продукт попытался обработать все 18 110 строк. Полное покрытие, ошибки и паритет учитываются отдельно; смешанные итоги не являются общей точностью. Поздний runtime-кандидат .2 имеет отдельный статус ниже.

English · Русский · Español · Français · 中文

Материал подготовлен сопровождающим WARDEN и HISTOR с помощью ИИ. Это сравнение автора продуктов, а не независимая сертификация. Публикуемые сравнительные измерения выполнены удалённо в gVisor. Более ранний локальный пилот исключён; его dist/Vitest/Vite-артефакты удалены. Это не утверждение, что локального пилота никогда не было.

Предмет сравнения и версии

Проверяется реакция на объявления инструментов MCP. Статический анализ описания не равен выполнению инструмента, наблюдению за действиями модели или измерению успешности атаки на модель.

Реализация Пакет / способ запуска Идентичность нового прогона
WARDEN, основной опубликованный продукт @aimarket/warden npm 0.23.0, ruleset 17, 40 правил; digest sha256-UOfK25xo6D8vrKEVfNFBTBVn5OspyaZut9vC9Z9Q5JE=
mcp-audit PyPI mcp-audit-scanner[mcp] 0.28.0
mcp-shield npm mcp-shield 1.0.4
truecopy npm @askalf/truecopy 0.10.5
mcpsentry npm @roshan6335/mcpsentry 0.1.5

Основная колонка WARDEN использует проверенный опубликованный npm tarball, SHA-256 833841f2aab89df4c51b5f84385ad69c8ffd7dcf5a7725ec0eb4ebabe594b7ee. В ранней замороженной сборке «v17» изменены шесть dist-файлов обёртки/проверки результатов; она не побайтово равна npm 0.23.0 и не заменяет опубликованный baseline. Неопубликованный кандидат после изучения ошибок: 0.23.1-dev.20261107.1, ruleset 19, 43 правила, 32 блокирующих, digest sha256-XfRh1+VZoAM6PGtbmqprnSX/eF16qNYOk0o+ilRFxXw=. Первый v18 хранится отдельно, digest sha256-aXkZQj8F1fKgcTpyrfNdgQSQMuzdc1yabcKiGPVKjMo=. Публикации npm не было. Октябрьские результаты и старые версии: история.

Опубликованные пакеты и исходные публичные корпуса доступны. Точное повторение авторских fixtures и адаптеров требует публикации их исходников. Метаданные позволяют изучить id строк, пороги, покрытие и хеши выходов, но сами по себе не дают полного независимого воспроизведения. Исходники кандидата19 также не опубликованы: хеши и receipts проверяемы, но не образуют внешне воспроизводимую сборку. Публичный набор содержит отчёты, метаданные и иллюстрации, без исходников продукта/частного стенда.

Настоящие реализации и воспроизведение определений

Большая выборка проходит через собственные полные API анализа/классификации реальных реализаций со свежим состоянием. Не утверждается, что все 18 110 объектов для каждого продукта прошли stdio MCP. Проверки CLI/MCP и живой совместимости выделены отдельно.

Категория Полный перечень / объём Что проверяется Статус
Реальные stdio-пакеты, кандидат19 @modelcontextprotocol/server-filesystem@2.2.0 (16 инструментов), @modelcontextprotocol/server-memory@2.1.0 (9), @modelcontextprotocol/server-sequential-thinking@2.1.1 (1), WARDEN (9) Официальный Node MCP SDK 1.32.1, прямо и через обёртку: обнаружение, безопасный синтетический вызов, отказ неизвестному инструменту, последующий ping На обоих хостах 8/8 сессий, 4/4 совпавших digest списков
Публичные HTTP, кандидат19 DeepWiki (3), Microsoft Learn (3), Cloudflare Docs (2) Только initialize и tools/list, без вызова инструментов На обоих хостах 3/3 без ошибок, все разрешены
Замороженные определения 3 177 фиксированных представлений и 14 933 строки HISTOR Собственные полные API анализа/классификации; код исходных серверов не исполняется Завершено на обоих хостах
Выборочная проверка CLI/MCP Node-конкуренты: 10/10 каждый; mcp-audit Python: 13 совпадений штатного полного API, включая один partial; опубликованный WARDEN: 20/20, включая 1,17 МБ и attack/clean/repeat Штатный вход против массового адаптера Совпадение partial не означает полный вердикт

См. живые свидетельства. Финальный SDK receipt — удалённый sdk19-final; локальный sdk19 сохраняет первый прогон. Синтетические вызовы используют изолированные данные, без пользовательских файлов и production-секретов. HTTP: https://mcp.deepwiki.com/mcp, https://learn.microsoft.com/api/mcp, https://docs.mcp.cloudflare.com/mcp. Это наблюдаемые версии, не обещание последних релизов.

Точный перечень fixtures

23 атаки авторов WARDEN, определения в build_sets.py:

A01-important-tag, A02-ssh-into-param, A03-shadowing-bcc, A04-zero-width-hidden, A05-unicode-tags, A06-base64-payload, A07-russian, A08-chinese, A09-paraphrase, A10-schema-hidden, A11-annotation-injection, A12-exfil-url, A13-name-injection, A14-private-key-param, A15-seed-phrase, A16-javascript-url, A17-ignore-previous, A18-system-tag, A19-call-first-history, A20-env-dump, A21-destructive, A22-concealment, A23-spanish.

12 доброкачественных контролей:

B01-never-send-key, B02-injection-scanner, B03-api-key-param, B04-javascript-word, B05-persian-zwnj, B06-refunds, B07-send-email, B08-secret-scanner, B09-password-vault, B10-upload-drive, B11-ssh-howto, B12-translate.

Сторонние fixtures: 10 атак, один доброкачественный, один неоднозначный пример.

Источник Примеры и метки
mcp-audit, commit fdc8762eb2d5abb708bdaf767ec5a8140b2ab9a2 Атаки: behavioral_override_stealth, cloud_credential_exfiltration, crowdstrike_add_numbers, fake_postmark_exfiltration, invariant_labs_ssh_exfiltration, xml_injection_override
mcp-shield, commit 379140c3555bf35c6f8f451ee320da24302e792e Атаки: calculateSum, sendEmail, readFile, getFactOfTheDay; доброкачественный: whatsapp; неоднозначный: fetchWeather

Неоднозначный пример учитывается отдельно, вне знаменателей полноты обнаружения и ошибочных блокировок. Стороннее авторство не делает известный fixture новым отложенным тестом: эти данные были доступны при разработке WARDEN.

MCPTox: единицы и все 45 серверов

Архивное извлечение содержит 485 различных отравленных определений: 267 на 22 dev-серверах и 218 на 23 test-серверах. Отдельно: 225 определений с изменённым префиксом в представлении промпта и 45 чистых серверных списков. Это разные единицы; складывать их как «серверы» нельзя.

1 348 сценариев статьи — другое, пересекающееся представление, чем 485 определений. Удалённый аудит официального commit f85189f9ad12504c197c7f920ab818a40657b1fa сохранил все 1 348 строк: 1 338 уникальных значений server/frame и 10 сохранённых повторных экземпляров, без отбрасывания; 702 с обычными переводами строк, 646 с нормализацией экранированных. Хеши двух JSON совпадают с архивом. Репозиторий не указывает лицензию, поэтому публично распространяются только фактические метаданные, без определений, схем, атакующего текста и Python-исходников. Чистые списки содержат 362 инструмента против 353 в статье; дедупликация это расхождение не устраняет. Источники: извлечение, split.

Full-frame проекция сохраняет текст аргументов дословно, но объявляет извлечённые свойства параметров строками. Исходные native-типы аргументов не реконструируются: результат относится к этой явной проекции, не к точному исполнению оригинальных схем.

Dev — 22: AWSKnowledgeBase; AdFin; AlphaVantage; BaiduMap; ClickHouse; Codacy; Commander; DoDo Payments; Email; EverArt; Everything; Fetch; Flomo; Google Maps; Memory; Prisma; SQLite; Sentry; Slack; Tavily; gNucleus Text to CAD; mcp-simple-arxiv.

Test — 23: 12306-mcp; AgentQL; AmapMap; Apify; BraveSearch; Claude Post; DumplingAI; E2B; FileSystem; Financial Dataset; Git; Github; Gitlab; GoogleDrive; Gyazo; HyperBrowser; KeywordsPeopleUse; OP.GG; Puppeteer; QuickChart; Redis; Sequential Thinking; wechat.

Это имена из набора данных, не свидетельство текущей доступности или связи с проектом. Split фиксировался сортировкой по sha256("mcptox split 2026-10-09|" + server_name): первые 22 — dev, остальные 23 — test. Здесь сохранён порядок списков из файла результатов.

Архивный вход SHA-256 исходных байтов
pure_tool.json 54b1eb0e9d7b2f18465266aa9d9dfda828cd558b1269b74731ec2c5d8579e617
response_all.json 79a90049be931c59e71446d6180b1d7f0d196d123d08a59bc155d142b5041c03

Эти два исторических хеша не заменяют новый manifest всех источников, файлов def_tool, сгенерированных JSON и конфигураций. Python-определения разбираются как данные, не запускаются. «Served» воспроизводит извлечённое серверное описание; «decorated» отдельно проверяет префиксы вроде <IMPORTANT> и «Ignore the previous instructions».

Публичный архив и пакеты

Основная когорта — 986 архивных списков из корпуса 2026-10-01. August carryover содержит 41 наблюдение; подтверждены 28 точных совпадений имени+определения, то есть 999 уникальных снимков имя+определение. Это отдельные когорты, а не 1 027 независимых серверов.

Полный inventory содержит все 18 110 строк, имена, записанные версии, метки, числа инструментов, digest и происхождение. Загрузки: CSV.gz, JSON.gz, manifest. Только метаданные, без нелицензированного содержимого атак.

Доступны 14 933 строки версий пакетов HISTOR: 12 023 npm и 2 910 PyPI, 14 449 различных toolsets, 272 657 записей инструментов, без отброшенных строк и расхождений количества. Повторное вычисление MTL-digest и хеши файлов проверены на обоих хостах. Из архива 2026-10-20 восстановлены 14 930 строк; ещё три digest — через неизменяемые публичные API URL. Manifest и tree-head подписаны Ed25519, проверены закреплённым did:key. Архив CC-BY-4.0, атрибуция: Aleksandr Artamokhov / HISTOR, HISTOR: MCP tool definitions and how they change, снимок 2026-10-20. У трёх API-ответов отдельная лицензия не указана: публично только метаданные.

Используются точные архивные базовые поля MTL; текущие title, annotations и дополнительные поля не примешаны. Наблюдение пакета не означает установку/исполнение. Неразмеченные данные дают частоту пороговых сигналов; false positive требует разметки или чтения соответствующего текста.

Вход / доказательство SHA-256
Каталог 3 177 представлений e29baa05fbdbf46e34631ff2c75f0b4f535f0188054dd4499699bd189a3dc757
Каталог 14 933 пакетов 78d4dab7125318b80cc35302e7cf1cfc1a49fa6f310957ed7b8fddfb538375b6
Доказательство восстановления HISTOR 8cdb0faf62c72f947baf30f74d6523fc6fd5b68720b44f4b765a0f804489cf7e
Итоговые grouped-результаты 44732cdfa369f0f912491212d1910883a6071c4ce4727cfc30911adb828d7a3b
Итоговое покейсное межхостовое доказательство a0773f6622290268129cc48323dab0b1b84dc5652d1b2b1ba20e679c63a01205
Итоговый SHA-256 manifest 17d6e7ebd85dede970d77f319bf3734478a037bf9fd971a53f5bbd07b4fce3f8

Формат каталогов warden.shared-lazy-inputs/v1: toolsFileSha256 — точные UTF-8-байты; toolsSha256 — Python 3.13 JSON с сортировкой ключей, компактными разделителями, сохранением Unicode/порядка массивов и запретом неконечных чисел, не заявленная JCS-канонизация. Wire id: c и первые 32 hex-символа SHA-256 от warden shared inputs 2026-11-07| + ключа случая, одинаково для продуктов, версий и хостов.

Зафиксированная удалённая методика

  1. До анализа зафиксировать исходники, digest правил, версии пакетов, время проверки реестров, опубликованные integrity hashes, зависимости, digest образа, команды и исходные ответы сканеров.
  2. Сохранить SHA-256 каждого входа: исходной загрузки, извлечённого определения, replay JSON, меток, split, config и стенда. Стабильные id, версии преобразований и происхождение обязательны.
  3. Массовые прогоны: runsc, без сети, UID/GID 501:501, read-only root/source/runtime/data, cap-drop ALL, no-new-privileges, tmpfs и отдельные результаты. Образ sha256:db7085498187e8477fa462d5f1652d62bdf4b8af29ea3666bd1748a8315631a5, Node 24.22.2/Python 3.13.18. Node: 1 CPU/768 MiB, сохранённый receipt pids128. Audit base: 1 CPU/768 MiB; HISTOR: attested 1 CPU/768 MiB/один worker, PingBlip 2 CPU/1536 MiB/два worker, pids256. cpu.max/memory.max проверены. UTC окна audit HISTOR 2026-11-07: attested 20:33:21–21:13:27, PingBlip 20:33:15–21:34:48; это не контролируемое сравнение скорости. Живые stdio/HTTP имеют отдельные настройки UID1000, 0,5 CPU/512 MiB и bridge/256 MiB соответственно.
  4. Для каждого замороженного объекта — собственный полный API анализа/классификации со свежим состоянием. mcp-audit использует все шесть штатных анализаторов. Адаптеры проверяются отдельными CLI/MCP-прогонами. WARDEN: allowUnknownServers: true, sensitiveToolPatterns: []. Отказы truecopy из-за cold-lock/unpinned учитываются отдельно от анализа содержимого.
  5. Сохранять первые попытки и повторы раздельно; заранее задать timeout/retry. Ошибка, пропуск и отказ протокола не считаются allow. Старый результат не подставляется вместо нового.
  6. Сохранены raw outputs, нормализованные результаты, ошибки и хеши. Итоговое сравнение проверяет ключ, wire id, точный SHA-256 входа, версию/код/образ движка, статус, HC/any/advisory и SHA полного native-результата. Нормализуются только собственный временный finding_path mcp-audit и state-file evidence RUGPULL-000; находки/текст/уровни сохраняются.

Скачать ZIP отчётов и данных: пять языков для offline-чтения, grouped-results-v2.json, figure-cross-host.json, методики и покейсные метаданные. Публичные строки содержат статусы, флаги и хеши; полные native-находки и нелицензированные payloads не заявляются публичными загрузками.

mcp-audit вызывает штатный run_scan_async(extra_paths=[fresh_config], connect=True, guardrail_drift=True). Заменён только транспорт connect_and_enumerate: сохранённые объекты проходят SDK ListToolsResult и native _tool_info. Все анализаторы, toxic-flow, delegation, annotations и scoring включены; HOME/cwd/config/rug-pull state свежие. Online/API/LLM отключены; timeout 30 с завершает worker с неполным результатом. WARDEN: blockAtSeverity=high, allowUnknownServers=true, sensitiveToolPatterns=[], pinToolDefs=true.

Пороги и знаменатели

Пороги: WARDEN — штатное allow: false static-scan/threat-feed; mcp-audit — находки определения HIGH / CRITICAL полного pipeline; mcp-shield — HIGH Risk; truecopy — native HIGH/CRITICAL-сигналы; mcpsentry — HIGH / CRITICAL. У truecopy любая находка, даже advisory, может означать poisoned/скрытие proxy; HC — не весь объём скрытого содержимого, а unpinned/cold-lock — отдельная политика.

Общая колонка означает HIGH/CRITICAL-сигнал, а не одинаковую блокировку. У WARDEN есть штатный allow/block, у truecopy классификация связана со скрытием инструмента proxy. mcp-shield может завершиться с кодом 0 при находках; mcpsentry возвращает 1 только при critical, а high-only может вернуть 0. Их сигналы не называются принудительными блокировками.

Разделять пороговый сигнал, ниже порога/advisory-only, нет находок, error/partial, skipped, not run. Любая находка включает пороговые. Шум пути стенда, конфигурации и первого baseline сохраняется и исключается по одинаковому правилу для всех.

Диагностика normalization-v1 сохранена: она ошибочно исключала три действительных SSH critical-находки WARDEN threat-feed, выбирая только static-scan. В normalization-v2 учитываются все gates определений; raw-вердикты неизменны, повтор движка не требовался. В наблюдавшихся данных WARDEN исключено только info TOOL_DEF_UNPINNED. Правило исключения стенда/запуска/baseline применяется ко всем продуктам, иначе any-signal от первого pinning бессмысленно равнялся бы 100%. Показываются HC-сигналы, любой релевантный сигнал и advisory-only = any − HC.

Для каждого сканера/когорты: запланировано N, полных результатов C, порогово-положительных B (имя поля JSON), ниже порога/advisory-only A, ошибок/partial E, пропусков S, незапущенных U; N = C + E + S + U, C = B + A + no-finding. Частота пороговых сигналов — B/C; recall это только для размеченной когорты атак. Покрытие — C/N, с исходными числами. При ошибках также показать B/N, не записывая ошибки в истинно отрицательные. Принудительная блокировка — отдельный продуктовый результат. Для false positive нужны метки/оценка; неоднозначные случаи — отдельно.

MCPTox-атаки — по определениям; чистый MCPTox, корпус и carryover — по снимкам серверов; HISTOR — по package target. Цель порогово-положительна при хотя бы одной релевантной находке выбранного уровня. Число находок по инструментам — дополнительная диагностика.

Неполные сканы и совместимость протокола

Две строки HISTOR mcp-audit достигли штатных лимитов 5 000 узлов схемы/глубины 64 и 65 536 символов текста инструмента. Это E: partial, исключённые из полного покрытия и основных B/A, даже при частичных находках. Partial-сигналы сохраняются отдельно; совпадение native/API partial не превращается в полный скан.

mcp-shield отклоняет 31 список HISTOR строгим валидатором MCP SDK. Штатные raw JSON-RPC клиенты mcpsentry и truecopy такого валидатора не имеют. Список из 42 инструментов, отклонённый mcp-shield, проходит mcpsentry CLI/API без находок: реальное различие совместимости, не пропуск адаптера. HISTOR mcp-shield: attested C=14 902/14 933, 31 schema error; PingBlip C=14 901/14 933, 31 schema error и один timeout. На обоих HC 5 354 / any 6 767 среди полных результатов. Это частота положительных сигналов без разметки, не FPR; итоговое сравнение завершено.

Отдельный parity-кейс mcp-shield 3 МБ прошёл за 52,18 с после увеличения общего native+API дедлайна 30→90 с: каждый вызов движка занимал около 28 с. Первый timeout сохранён; рабочий API-budget одного случая остался 30 с. Это ошибка суммарного дедлайна проверки, не отказ детектора и не скрытое изменение bulk-политики.

Новые результаты

Первый кандидат WARDEN: сохранённая регрессия

Первый кандидат v18 потерял три обнаружения относительно v17: FileSystem_20, FileSystem_22, FileSystem_23. Эти результаты сохраняются. Исправление после их изучения — отдельный кандидат, а не измерение на невиденном holdout.

Поверхность / единица Ранняя замороженная сборка v17 Первый v18, блокировки
485 исходных серверных определений 460/485 457/485
Известный исторический test, 218 определений 210/218 207/218
225 decorated-определений 225/225 225/225
1 348 полных сценариев промптов, с повторными строками 1 331/1 348 1 331/1 348
45 чистых серверов, 362 инструмента 0/45 0/45

Результаты двух хостов совпали. Actual MCP и библиотечный путь дали одинаковый результат в 2 103/2 103 случаях для каждой версии на каждом хосте, всего 8 412 сравнений. Это проверка путей/хостов, не успешности атак на модель. Удалённый receipt: /opt/warden-tests/20261107-mcptox-v18/results/final-report/REPORT.md; ниже дан расширенный проверенный paired-отчёт. Публикация npm не подразумевается.

Проверенный кандидат v19 после изучения ошибок блокирует принудительную перезапись публичного SSH-ключа как изменение безопасности и чтение /etc/shadow как доступ к секретам. Восстановлены FileSystem_20 и FileSystem_23; FileSystem_22, чтение публичного ключа как предварительное условие, остаётся неблокируемым перехватом инструмента. Он не переименован в доброкачественный и не исключён из знаменателя. Все три промаха первого v18 сохранены.

Кандидат19, представление Штатные блокировки / завершено Ошибки
Собственные атаки / benign, раздельно 23/23; 0/12 0
Сторонние атаки / benign / ambiguous, раздельно 10/10; 0/1; 0/1 0
Native определения / исторический test, раздельно 459/485; 209/218 0
Полные сценарии / decorated, раздельно 1 331/1 348; 225/225 0
Чистые серверы 0/45 0
Public-main / carryover, раздельно 3/986; 1/41 0

Обе версии v18/v19 на обоих хостах: actual-MCP/library по 3 177/3 177. Межхостовые полные строки 12 708/12 708 совпали, все семь проверок входов/исходников/стенда/replay истинны. Это операционная паритетность, не полное обнаружение атак. Отчёт, SHA-256 e699ba593242406b31f366b34d3e104dcf567094fd97421a62fbba8ded958989; paired JSON 30996c170fd4284991ac4624ee88cda765ae26cb2393a8bbdeefa23913847a4e.

Итоги пяти опубликованных продуктов

Основная колонка WARDEN — опубликованный npm 0.23.0/rules17, не ранняя изменённая сборка и не кандидат19. Это новые удалённые измерения, а не подставленные числа октября.

Ячейки: HC / any / advisory-only, advisory-only = any − HC. Для всех base-строк C=N, E=S=U=0; исключения HISTOR ниже. HC/any совпадают между хостами. Основная колонка WARDEN — опубликованный npm 0.23.0/rules17. Пересекающиеся представления не складываются в общую точность.

Когорта / единица WARDEN npm 0.23.0 mcp-audit 0.28.0 mcp-shield 1.0.4 truecopy 0.10.5 mcpsentry 0.1.5
23 собственные атаки 20 / 23 / 3 11 / 13 / 2 6 / 10 / 4 3 / 8 / 5 4 / 4 / 0
12 собственных benign 0 / 3 / 3 1 / 2 / 1 1 / 2 / 1 1 / 1 / 0 2 / 2 / 0
10 сторонних атак 10 / 10 / 0 10 / 10 / 0 8 / 9 / 1 1 / 7 / 6 5 / 5 / 0
1 сторонний benign 0 / 0 / 0 0 / 0 / 0 0 / 0 / 0 0 / 0 / 0 0 / 0 / 0
1 сторонний ambiguous 0 / 0 / 0 0 / 0 / 0 0 / 1 / 1 0 / 0 / 0 0 / 0 / 0
485 native MCPTox, все 460 / 474 / 14 56 / 392 / 336 56 / 71 / 15 1 / 31 / 30 19 / 19 / 0
…267 dev 250 / 257 / 7 17 / 214 / 197 15 / 25 / 10 1 / 4 / 3 11 / 11 / 0
…218 известных исторических test 210 / 217 / 7 39 / 178 / 139 41 / 46 / 5 0 / 27 / 27 8 / 8 / 0
225 decorated MCPTox 225 / 225 / 0 222 / 225 / 3 41 / 95 / 54 135 / 141 / 6 136 / 136 / 0
1 348 полных сценариев 1331 / 1338 / 7 951 / 1264 / 313 158 / 570 / 412 432 / 491 / 59 460 / 460 / 0
45 чистых серверов MCPTox 0 / 7 / 7 0 / 3 / 3 3 / 6 / 3 0 / 0 / 0 1 / 7 / 6
986 публичных снимков 4 / 388 / 384 43 / 159 / 116 343 / 451 / 108 2 / 39 / 37 86 / 450 / 364
41 carryover-наблюдение 2 / 37 / 35 12 / 24 / 12 33 / 35 / 2 1 / 3 / 2 21 / 38 / 17
14 933 исторических строк пакетов 409 / 6327 / 5918 481 / 2089 / 1608 5354 / 6767 / 1413 15 / 252 / 237 1449 / 6362 / 4913

Полнота и побайтовое межхостовое сравнение

Для каждого продукта N=18 110 на хост, S=U=0; спарены все 18 110 входов. Нет пропусков, расхождений входов/движков и различающихся полных результатов. Неполные случаи исключены из знаменателя совпадений.

Продукт C attested / PingBlip E attested / PingBlip Совпало / полных пар Ошибки
WARDEN npm 18110 / 18110 0 / 0 18110 / 18110 0
mcp-audit 18108 / 18108 2 / 2 18108 / 18108 2 partial на обоих
mcp-shield 18079 / 18078 31 / 32 18078 / 18078 31 schema на обоих; 1 timeout только PingBlip
truecopy 18110 / 18110 0 / 0 18110 / 18110 0
mcpsentry 18110 / 18110 0 / 0 18110 / 18110 0

Дополнительный .1 кандидат19: 18 110/18 110 полных пар; v18 HISTOR: 14 933/14 933. HISTOR кандидата19 — 407 HC / 6327 any / 5920 advisory-only, опубликованного WARDEN — 409 / 6327 / 5918. Ни один HISTOR-вердикт v18→v19 не изменился. Узкая проверка двух разрешённых после v17 фрагментов установила легитимную настройку публичных ключей: @krovacloud/mcp@0.3.16 (create_cube, sshPublicKey) и @runpod/mcp-server@4.4.0 (update-ssh-keys, keys). Это оценка фрагментов, не сертификат безопасности целого пакета; исходный текст не распространяется.

Суммы по смешанным author35 и independent12 — частота пороговых сигналов, не recall; для recall нужны отдельные метки 23/12 и 10/1/1. Живая совместимость относится к кандидату19 и не подставляется в таблицу пяти продуктов.

Валидация кандидатов и происхождение

Ранний v18: 1 517/1 517 тестов в 62 файлах на обоих хостах, typecheck/build пройдены; отдельный red-team gate 0/28 delivered — не ASR пяти продуктов. Whole-directory witness был неполным из-за изменения соседнего corpus-reporting скрипта; исполняемый продукт и 1 090 captured source/test/script-файлов стабильны.

Кандидат19: 1 536/1 536 тестов в 63 файлах на обоих хостах, exit codes typecheck/build/red-team — 0, без OOM; attested 288,085 с, PingBlip 558,354 с. Первые 1 534 detector-теста прошли; устаревшие счётчики README/landing потребовали повторов. Validation-копия меняет только счётчики в пяти README, не детектор; 521 runtime/source/test-файл побайтово одинаков, digest f4732e8beb77342ae250ac11126859ef59cf5e9bf3d74e8e46221b8d856d3231. Проверен замороженный кандидат, не все изменения текущей папки; начальные диагностические и прерванный устаревший Blip-прогон сохранены отдельно.

Поздняя runtime-сборка .2

0.23.1-dev.20261107.2 отделена от замороженной .1: принимает валидный MCP blob-resource без необязательного mimeType, продолжая проверять похожие metadata/structured объекты. На обоих хостах 1 536/1 536 тестов в 63 файлах, typecheck/build/red-team exit0; attested 293,705 с, PingBlip 554,284 с. Пройдены 304 целевых теста при обычном 1 CPU и прежних дедлайнах, SDK 8/8 сессий и 4/4 пар списков. Ранний timeout при 0,25 CPU сохранён, при обычной мощности не повторился.

Независимые binary/SDK-проверки сохраняют валидный 400k blob с MIME и без. Результаты invalid plaintext/object-blob/poisoned-metadata удерживаются после одного выполнения, с живой сессией; это совместимость проверки результата, не предотвращение побочных эффектов инструмента. 23 выборочных CLI/library-проверки .1/.2 совпадают по находкам и score. 320 исходных/distribution-файлов вне изменённого модуля result-screen побайтово равны .1, SHA-256 5ff407cf78742ae18fd593065e9c9bd552bba45f3fab91f27fae9f45adb13238, rules19 digest прежний. Классификационные 18 110 строк остаются прогоном .1, не .2; оба исходника неопубликованы.

Текущий рабочий снимок 0.23.1-dev.20261108 добавляет Codex/OpenCode hooks, отсутствующие в замороженных .1 и .2. Его приёмочная валидация отдельная. Метрики 18 110 строк и прежние quality-receipts не выдаются за измерения этих дополнений 8 ноября.

Ограничения выводов

Собственные fixtures написаны авторами WARDEN; сторонние прочитаны при разработке. MCPTox test — известный исторический holdout, а не новый невиденный набор: результаты публиковались, шаблоны общие с dev. Повторный прогон не возвращает слепоту. Утверждение о независимости поздних правил требует аудита происхождения; отсутствие совпадающих фраз само по себе её не доказывает.

Архив не описывает текущее поведение сервера. Обнаружение не проверяет исполнение инструментов и безопасность зависимостей. Статические блокировки не измеряют успешность атак на модель, сквозную защиту или предотвращение утечек. Если проводятся отдельные модельные эксперименты, для них нужны собственные модель/версия, промпты, бюджет, запросы и знаменатели; статические таблицы их не подразумевают.