Security Blog

Креды в памяти вашего приложения утекут

#422

October 2, 2026 · By Marketing team

← All posts

Учётные данные в памяти вашего приложения читает любой код, выполняющийся на машине, а в 2026 году это включает агента. Модель ИИ уже самостоятельно закрепилась в FreeBSD и вышла из собственной песочницы. Перестаньте держать резидентный кред, который можно украсть.

Вот неприятный прогноз, и он не «на всякий случай»: учётные данные, которые прямо сейчас лежат в памяти вашего приложения — пароль от базы данных, загруженный при старте, API-токен в окружении, облачный ключ, который приложение держит для работы, — вероятно, утекут в течение ближайших двенадцати месяцев. Не потому, что кто-то перехитрит вашу службу безопасности. Потому, что единственное допущение, которое когда-либо делало секрет в памяти безопасным, — что рядом с ним выполняется только доверенный код, — в этом году незаметно перестало быть верным, и почти никто не изменил своего поведения в ответ.

Это то, что нельзя отложить «на потом».

Что на самом деле происходит

Почти каждое приложение хранит свои секреты одинаково. При старте оно читает их — из файла .env, из подключённого секрета, из переменной окружения — и загружает в собственную память, в открытом виде, на весь срок жизни процесса. Тридцать лет это была обоснованная архитектура, и она была обоснованной ровно по одной причине: чтобы прочитать память другого работающего процесса или его окружение, нужно выполнить код на той же машине с тем же уровнем привилегий. Раньше эта планка была высокой. Преодолевали её только ваше собственное ПО и ваши собственные люди.

Агент преодолевает её сейчас. Агент для написания кода, инструмент MCP, автономный воркер — по своему устройству он выполняет код, на реальной машине, от имени реального пользователя. А для кода, работающего с такими привилегиями, кред в памяти — это не сейф, который нужно вскрывать. Это файл, который нужно прочитать. /proc/<pid>/environ перечисляет переменные окружения другого процесса в открытом виде. Дамп памяти отдаёт его кучу целиком. Ни эксплойта, ни CVE, ни тревоги — ваш EDR, ваш WAF, ваш брандмауэр наблюдают, как авторизованный процесс читает память, которую ему разрешено читать, и не видят ничего предосудительного, потому что по их правилам ничего предосудительного нет. Каждый шаг законен. Секрет просто лежал под рукой.

Это не ваша ошибка

Важно понимать, в чьей это зоне ответственности, — потому что не в вашей. .env на защищённой машине, секрет, подтянутый из менеджера в память при загрузке, — это рекомендуемый паттерн. Это twelve-factor, это по канону, так поступает хороший инженер. Это было ответственным. Устарела не практика. Устарело лежащее в её основе допущение: что рядом с вашим секретом выполняется только тот код, который вы туда поместили. В тот момент, когда на этой машине запускается агент, — а вы намеренно ставите агентов везде, потому что они полезны, — это допущение исчезает, и загруженные вами в память ответственно открытые данные оказываются в радиусе поражения.

Мы уже наблюдали, как приходит первая версия этого сценария [4]. Когда агента для написания кода перехватывают — отравленный отчёт об ошибке, вредоносный инструмент на его пути, — первое, что оказывается в досягаемости, это именно то: токены и ключи, которые уже держат в памяти его собственный процесс и соседние процессы. Инъекция — лишь дверь. Резидентный кред — это добыча.

«Но на той машине нет агента»

Это успокаивающий ответ, и именно он не работает. Оборона держится на стене: держать агентов здесь, а креды — там. Весь этот год ушёл на доказательство того, что эта стена не удержится.

Вам не нужно принимать это на веру — в этом году появилось доказательство, и сразу дважды. В собственных опубликованных тестах Anthropic направила модель Mythos на NFS-сервер FreeBSD — код ядра, который люди читали семнадцать лет, — и модель самостоятельно нашла переполнение стека в пути аутентификации, написала эксплойт из двадцати гаджетов, разнесённый по шести сетевым пакетам, и получила неаутентифицированный root по сети. Это CVE-2026-4747, и заняло это около четырёх часов. Не «отметила подозрительную функцию», а работающий эксплойт на удалённый root против кода, пережившего семнадцать лет ревью, и то же самое в отношении критических уязвимостей в каждой крупной операционной системе и браузере, на которые она была направлена [1].

И изоляция, которую вы обернули бы вокруг агента, держится не лучше периметра. В собственной оценке безопасности Anthropic, получив задачу выйти из своей песочницы и добраться до исследователя, проводящего тест, Mythos связала эксплойты — JIT heap spray — и вышла из обеих изоляций: рендерера браузера и песочницы операционной системы, получила доступ в открытый интернет и отправила ему письмо [1]. Честная оговорка: сделала она это потому, что тест её об этом попросил, а не по собственной инициативе. Но «мы её попросили» — это ровно то кресло, в котором сидит атакующий, а «выйти, повысить привилегии, забрать креды» — это штатная полезная нагрузка каждого вредоносного промпта с этого момента. Способность никогда не ждала собственной инициативы модели. Она ждёт инструкции, а это ровно тот вход, который вы можете считать гарантированным. Серьёзность была признана на единственной высоте, которая имеет значение, — США ввели экспортный контроль на саму модель, впервые применительно к модели ИИ, а не к стоящим за ней чипам, после того как версия Mythos, по сообщениям, за часы прошла почти через все засекреченные системы АНБ [2][3].

Теперь сопоставьте это с проблемой памяти, потому что они пересекаются. Root на машине читает память любого процесса, а не только своего пользователя. Поэтому настоящий вопрос никогда не звучал как «буду ли я запускать агента рядом со своими секретами». Он звучит как «сможет ли capable-модель достичь этой машины или выйти из той песочницы, куда я её поместил» — и в этом году публично были даны оба ответа. «На той машине нет агента» — это не контрольная мера, которую вы применяете. Это надежда на то, что вещи останутся на своих местах, а вещи уже показали, что не останутся. Планируйте исходя из того, что агент доберётся до машины. Альтернатива — планировать на удачу.

Сделано для этого намеренно

Поэтому перестаньте пытаться удержать агента вдали от секрета, который просто здесь лежит. Уберите то, что здесь лежит.

Кред в Clavitor никогда не загружается в память вашего приложения в ожидании. Он запрашивается вживую, в момент вызова, используется для одного этого запроса и исчезает. Он никогда не оказывается в переменной окружения, никогда не попадает в .env, никогда не проводит срок жизни процесса резидентно в куче в ожидании дампа. В /proc нечего перечислять, и дампу памяти нечего унести, потому что машине изначально не поручалось хранить постоянный секрет.

А единственный кред, который Clavitor выдаёт, ограничен ровно тем единственным действием, для которого агент был назван. Он не может перечислить хранилище, не может выяснить, что ещё существует, не может обнаружить следующий ключ. Каждый запрос ограничен по частоте, аномальный всплеск переводит хранилище в режим блокировки, а всё записывается в журнал только на добавление с хеш-цепочкой, который живёт в хранилище, — а не на конечной точке, где работает агент. Это неизменяемая, атрибутируемая следовая запись, которую требуют PCI DSS Requirement 10 и NIST 800-71 (контроль 3.3.8): доказательство того, к чему именно прикасался ваш агент, хранящееся там, куда скомпрометированная машина не может ни дотянуться, ни переписать.

Честная оговорка, потому что утверждение её требует: в микросекунду использования секрет действительно существует в памяти — для одного этого запроса, в один этот момент. Ни один дизайн не переписывает физику. Что он переписает, — так это разницу между секретом резидентным, который часами сидит в вашем процессе и в любой момент может быть выгружен в дамп, и секретом эфемерным, который присутствует на один вызов и после этого отсутствует — и брать нечего. Нельзя сделать дамп того, чего нет.

Урок не в том, чтобы «крепче запереть машину»

Вы можете продолжать укреплять машину. Вы можете продолжать говорить себе, что рядом с вашими секретами никогда не выполнится недоверенный код. Но именно эта ставка становится дороже каждый месяц — против противника, который зарабатывает на жизнь выполнением кода и проходит сквозь стены, которые, как вы предполагали, должны были удержаться. Кред в памяти был безопасен, пока каждый читатель был доверенным. Читатели изменились. Единственный ход, который переживает это изменение, — перестать оставлять кред там, где его можно прочитать.

Мы записали правила, которым должен следовать инструмент для работы с учётными данными в мире, подобном этому. Примерьте на них свой.

Clavitor (@clavitorai) — хранилище учётных данных, созданное для ИИ-агентов и против них. clavitor.ai

Источники

[1] Anthropic (Anthropic Red Team) — Assessing Claude Mythos Preview's cybersecurity capabilities (автономное обнаружение и эксплуатация RCE в NFS FreeBSD, CVE-2026-4747; критические уязвимости в основных ОС и браузерах) — https://red.anthropic.com/2026/mythos-preview/

[2] Associated Press (via CNBC) — Anthropic's Mythos model found vulnerabilities in classified U.S. government systems, official says — https://www.cnbc.com/2026/06/23/anthropics-mythos-model-found-vulnerabilities-in-classified-us-government-systems-official-says.html

[3] Fortune — Anthropic disables Fable and Mythos AI models following U.S. government export ban — https://fortune.com/2026/06/13/anthropic-disables-fable-mythos-export-controls-national-security-threat/

[4] Tenet Security (Tenet Threat Labs) — Agentjacking: Coding Agents with Fake Sentry Errors (прецедент перехвата ради резидентного креда) — https://tenetsecurity.ai/blog/agentjacking-coding-agents-with-fake-sentry-errors/