Журнал дій зловмисника налічував понад 17 тисяч подій. Розібрати його вручну означало витратити дні, яких не було. Команда Hugging Face завантажила логи в комерційну модель — і отримала відмову.
Guardrails спрацювали рівно так, як задумано. Запит містив реальні команди атаки, експлойт-навантаження й артефакти командного центру, і провайдер побачив у ньому те саме, що побачив би в запиті нападника. Модель не має способу відрізнити того, хто відбиває атаку, від того, хто її веде.
Про guardrails зазвичай сперечаються як про етику: що моделі мають право робити, де межа відповідальності лабораторії. Але бізнес зустрічається з ними в іншому місці й в іншому вигляді. Не як з питанням цінностей, а як із зупинкою процесу о третій ночі, без помилки в коді, без винних і без рядка в моніторингу.
Що насправді сталося в Hugging Face
Компанія опублікувала розбір інциденту 16 липня 2026 року. Історія варта переказу точно, бо її вже встигли переказати неточно.
Точкою входу став шкідливий датасет. Він використав два шляхи виконання коду в конвеєрі обробки даних — завантажувач датасетів із віддаленим кодом і впровадження шаблону в конфігурацію — і запустив код на робочому вузлі. Далі стандартна ескалація: доступ рівня вузла, збір хмарних і кластерних облікових даних, бічний рух між внутрішніми кластерами. Все це — за вихідні.
Кампанію вів автономний агентський фреймворк: тисячі окремих дій через рій короткоживучих пісочниць, командний центр мігрував сам по публічних сервісах. Hugging Face підтвердила несанкціонований доступ до обмеженого набору внутрішніх датасетів і кількох службових облікових даних. Слідів втручання в публічні моделі, датасети та Spaces не знайшли, ланцюг постачання ПЗ перевірили як чистий.
Атаку виявив не черговий інженер, а власний конвеєр аномалій компанії, який використовує LLM для сортування телеметрії безпеки. AI виявив AI, а далі AI на захисті вперся в guardrails, тоді як AI на атаці не впирався ні в що. Hugging Face називає це асиметрією: нападник не був зв'язаний жодною політикою використання, а робота захисників блокувалася політиками моделей, до яких вони звернулися першими.
Форензику доробили на open-weight моделі GLM 5.2, розгорнутій на власній інфраструктурі. Компанія окремо відзначає другу перевагу цього рішення, і вона не про guardrails: жодні дані атакувального боку й жодні згадані в них облікові дані не вийшли за межі периметра.
Одне уточнення, бо його часто плутають. У власному розборі Hugging Face не називає ні модель нападника, ні його особу — там прямо сказано, що використана LLM невідома. Атрибуція до тестового прогону OpenAI з'явилася окремо, з розкриття самої OpenAI, і саме на нього посилається Ендрю Ин. Якщо ви переказуєте цю історію всередині компанії, розділяйте два джерела — інакше отримаєте суперечку про деталі замість розмови про висновок.
Відмова рідко виглядає як «ні»
Через тиждень, у листі від 31 липня, Ин описав випадок власної команди — і для бізнесу він цінніший, бо там не було жодної атаки.
Його команда робила security review відкритого проєкту OpenWorker — свого власного коду, у своєму власному репозиторії. Claude Code на Fable 5 і Codex на GPT-5.6 Sol відмовилися. Ин формулює безжально просто: він не бачить безпекової користі в тому, щоб не дати команді знайти вразливості у власному коді, адже краще знайти їх раніше за нападника.
Жодного разу відмова не була кнопкою «ні».
Один із двох інструментів просто зупинив роботу раніше, ніж мав. Другий захотів перейти на менш здібну модель. Ин не уточнює, який саме що зробив, але про Codex додає окремо: той устиг цілком пристойно розмітити можливі вектори атаки за відомими процедурами MITRE, а тоді відмовився йти далі певної точки.
Подивіться на будь-який із цих сценаріїв очима свого моніторингу: код відповіді 200, агент відповів, задача закрилася, витрата токенів у межах норми. Дашборд зелений. Робота зроблена наполовину, і ніхто про це не дізнається, поки хтось не перечитає результат руками.
Ми свого часу розбирали, де ламаються мультиагентні системи, і головним висновком там було те саме: найдорожчі збої — не ті, де щось падає, а ті, де все відпрацювало успішно, а результату немає. Відмова моделі належить рівно до цього класу: не помилка, а тиха деградація.
Тому перше практичне питання звучить не «що робити, якщо модель відмовить», а «як ми взагалі про це дізнаємось».
Це операційний ризик, а не етичне питання
Для директора з операцій формулювання має бути таким: у вашому процесі є крок, право на виконання якого належить зовнішній компанії, і вона може переглянути це право без попередження й без вашої участі.
Це не гіпотеза про майбутнє. Ин пише, що до нього напряму зверталися керівники служб безпеки, роздратовані тим, що передові закриті моделі відмовляються їм допомагати. Цілий клас професійної роботи вже впирається в інструмент, який зупиняється саме тоді, коли потрібен найбільше.
Важливо не з'їхати в протилежну крайність. Hugging Face у своєму ж розборі пише прямо, що це не аргумент проти захисних механізмів у хостованих моделях, і що вони передали фідбек провайдерам. Ин теж не закликає скасувати guardrails — він каже, що на детальні інструкції нашкодити собі чи іншим і на явно злочинні запити модель має відповідати відмовою.
Претензія вужча й тому серйозніша: класифікатор не бачить контексту вашого процесу. Він не знає, що запит іде від інцидент-респондера, а не від нападника; від юриста, який аналізує шахрайську схему, а не будує її; від медичного адміністратора, а не від допитливого підлітка. І чим ближче ваш бізнес до чутливої предметної області, тим частіше легітимна робота виглядатиме підозріло.
Ми будуємо власні рівні стримування для агентів — prompt rules, модель-наглядач і людина в контурі. Це рівно протилежна задача: там ми свідомо звужуємо агента під свій процес. Тут — хтось інший звужує його під свою політику, і ви дізнаєтеся про межу постфактум, на живому запиті.
Vendor lock-in — це не про ціну
У більшості обговорень залежність від постачальника зводиться до тарифів і лімітів. Відмови показують, що це вужчий погляд, ніж потрібно.
Є щонайменше чотири події, які змінюють поведінку вашої системи без жодної зміни у вашому коді. Постачальник оновлює модель — той самий промпт, та сама температура, інша поведінка; звичайна регресія, тільки без вашого релізу. Постачальник інакше трактує власні політики — запит, який учора проходив, сьогодні класифікується як небезпечний. Версія, під яку ви налаштовували підказки й оцінки якості, отримує дату відключення. І, нарешті, ринкові чи регуляторні рішення можуть прибрати модель з-під вас швидше, ніж ви встигнете переписати інтеграцію.
Ми пережили свій варіант цього 13 серпня. Флот із двадцяти трьох фонових задач нашої інфраструктурної автоматизації ліг приблизно на двадцять одну годину. Усі задачі повертали однакову помилку простроченого токена — включно з тими, що перевіряли зовсім різні сервіси й не мали між собою нічого спільного.
Саме ця однаковість і була підказкою, яку ми прочитали не одразу. Помилка приходила не від сервісів, які перевірялися, а від OAuth-підписки на модель, спільної для всього флоту. Довершило картину те, що одночасно справді помер ще й токен одного зовнішнього сервісу — дві незалежні поломки збіглися в часі, і полагодивши другу, ми не воскресили флот.
Запасний варіант у нас був: у пулі лежав живий ключ іншого постачальника, і перемикання коштувало правки одного конфігураційного файла. Ціна теж була конкретна — біллінг переїжджає з підписки на оплату за токени. Двадцять одна година простою сталася не тому, що не було куди перемкнутися, а тому, що ми не одразу зрозуміли, куди дивитися.
Для невеликої компанії lock-in зрештою виглядає саме так: не «нас не випустять», а «ми не помітимо вчасно, а потім витратимо півдня на діагностику».
Архітектурна відповідь тут нудна: бізнес-логіка, інструменти, пам'ять і власні правила безпеки мають жити окремо від конкретної LLM. Модель — змінна конфігурації, а не фундамент. Це те саме питання, яке варто ставити при виборі платформи: що саме залишиться вашим, якщо постачальник зміниться.
Запасний маршрут не дорівнює обходу захисту
Тут найлегше зробити помилку, яка потім дорого коштує на аудиті. «У нас є запасна модель без обмежень» — це не архітектурне рішення, це діра, оформлена як функція.
Різниця в чотирьох умовах.
Маршрут визначений заздалегідь. Запасний варіант вмикається для перелічених класів запитів, а не для будь-чого, що не пройшло. Список має бути коротким і нудним на вигляд: наприклад, «розбір логів інциденту безпеки» і більше нічого — не «складні запити» й не «випадки, коли основна модель не впоралася». Якщо агент сам вирішує, коли обійти відмову, ви побудували автоматичний jailbreak, і на першому ж аудиті це доведеться пояснювати.
Політика доступу та сама. Той, кому не можна бачити персональні дані на основному шляху, не бачить їх і на резервному.
Власні перевірки не вимикаються. Вимикається зовнішній класифікатор постачальника, а не ваш контроль: правила, звірка фактів і узгодження людиною діють однаково на обох маршрутах.
Перемикання лишає слід. Кожен випадок відмови й переходу пишеться в журнал: який запит, який клас, який маршрут відпрацював. Це найнудніша з чотирьох умов і єдина, яка щось скаже вам через півроку. Без журналу ви не побачите ні тренду відмов, ні того тихого моменту, коли запасний маршрут став основним і ніхто цього не помітив.
Формулювання Hugging Face варте того, щоб винести його на слайд без змін: мати перевірену модель, яку можна запустити на власній інфраструктурі, готовою до інциденту — і щоб уникнути блокування, і щоб дані не покидали периметр.
Друге слово в цій фразі — «перевірену». Модель, яку ви ніколи не запускали на своїх задачах, не є запасним маршрутом. Це намір.
Ціна самостійності
Про це треба сказати прямо, бо ентузіазм навколо відкритих ваг легко перетворюється на недооцінку рахунку.
Своя модель на своїх серверах знімає залежність від чужої політики й лишає дані всередині периметра. Натомість ви берете на себе інфраструктуру, оновлення, безпеку самого розгортання й оцінювання якості — тобто те, що раніше було чужою роботою, включеною у вартість підписки. Це обмін, а не безкоштовна перевага, і рахунок ми вже розбирали в матеріалі про справжню вартість володіння.
Для більшості компаній розміром 10–200 людей розумна позиція знаходиться посередині. Основний маршрут — хостована модель, бо це дешевше і швидше. Запасний — відкрита модель, розгорнута й перевірена заздалегідь, для вузького переліку сценаріїв, де відмова або витік критичні. Не «мігруймо на open source», а «майте другий ключ від дверей, якими ходите щодня».
Окремо варто оцінити той самий сценарій, у який потрапила Hugging Face. Якщо ваш чутливий матеріал — це логи інциденту, документи в суперечці, дані клієнтів під NDA чи медична інформація, то аргумент «дані не виходять за периметр» працює сам по собі, навіть якби жодних відмов не існувало.
Куди дівається запит, якщо не спрацював жоден маршрут
Правильна відповідь — у чергу з позначкою «потрібна людина», з відповідальним і строком. Неправильні відповіді дві: тихо загубити або спробувати виконати дію в обхід.
У нашій власній редакційній системі це виглядає буденно. Коли агент-публікатор не може викласти матеріал, бо для платформи немає доступів, він не вигадує обхідний шлях і не звітує про успіх. Задача переходить у стан «заблоковано», в ній лишається перелік платформ, які відвалилися, і матеріал чекає людину.
Найгірший сценарій ми теж бачили. Одного разу порожній результат ми списали на відомий блокер із доступами, а насправді агент узагалі не запускався через поламаний рушій — ознакою було те, що в задачі не було жодного коментаря. Хибний діагноз протримався двадцять три дні. Коли стан «не спрацювало» не розрізняє причин, ви лікуєте не ту хворобу — і залишаєтесь при цьому спокійні, бо формально ситуація відома й пояснена.
Що зробити цього тижня
Мінімальна програма, яка не потребує ні бюджету, ні міграції:
- Випишіть кроки, де рішення ухвалює зовнішня модель. Не системи — саме кроки процесу. Зазвичай їх менше, ніж здається, і серед них один-два справді критичні.
- Позначте серед них чутливі за змістом. Безпека, юридичні спори, фінансові розслідування, скарги, медичні дані, модерація. Це кандидати на відмову.
- Перевірте, чи розрізняє ваш моніторинг відмову й тиху деградацію. Якщо єдиний сигнал — це помилка виклику, ви не побачите ні раннього зупину, ні переходу на слабшу модель.
- Проженіть один реальний робочий запит на відкритій моделі. Не для міграції — щоб дізнатися, скільки насправді коштує вмикання запасного маршруту, поки ніщо не горить.
- Опишіть, куди йде запит, якщо не спрацював жоден маршрут. Черга, відповідальний, строк.
Жоден із цих пунктів не є проєктом на квартал. Разом вони перетворюють «а що, як модель відмовить» із теми для дискусії на рядок в операційному регламенті.
Guardrails нікуди не зникнуть, і добре, що не зникнуть. Але писалися вони під чужий процес, і одного дня спрацюють у незручний для вас момент — питання лише в тому, чи побачите ви це в той самий день.
Якщо хочете пройти цим списком по власному контуру — почніть із безкоштовного AI-аудиту. Ми так само прямо скажемо, якщо запасний маршрут вам не потрібен. Питання не на аудит — пишіть напряму.