anthropic
Обходы входа в четырёх реализациях SAML нашёл Opus
Claude News
anthropicАвтор блога Oblique собрал агентную обвязку поверх Claude Opus и за месяц работы в свободное время получил полные обходы аутентификации в четырёх реализациях SAML. Доступ к модели без обычных ограничений он получил через программу Anthropic Cyber Verification, код обвязки выложен в репозитории oblique-security/saml-research.
Коротко
- Обвязка разделена на две фазы: поиск «гаджетов», странного поведения XML-библиотек, и фазу подтверждения, где гаджеты комбинируются в сквозной эксплойт, а промежуточные результаты складываются в JSONL-файлы с отбраковкой находок вне области поиска.
- Помимо четырёх обходов входа, ещё в двенадцати проектах нашлись обходы подписи для редких сообщений: AuthnRequest, AttributeQuery и LogoutRequest, что даёт раскрытие данных и произвольный выход пользователя из сессии.
- Уязвимость в Authentik (CVE-2026-57580) параллельно прислали восемь независимых исследователей, а сопровождающие открытых проектов, по наблюдению автора разбора, получают растущий поток отчётов, среди которых встречаются сгенерированные машиной.
Ценность здесь не столько в отдельных CVE, сколько в самом методе: возможность прогнать однотипный анализ по всем публичным реализациям протокола превращает давний спор о качестве SAML в проверяемое утверждение. Судя по результатам, структурно протокол устоял, зато свежие самописные реализации повторяют ошибки библиотек десятилетней давности. Для команд, которые всё ещё встраивают SAML в продукт, это выглядит как аргумент в пользу OpenID Connect.
Полные обходы входа пришлись на Authentik, lightsaml, OneUptime и saml-client
В Authentik комментарий, внедрённый в поле NameID, обрезает адрес до чужой учётной записи и даёт вход под ней (CVE-2026-57580). В PHP-библиотеке litesaml/lightsaml (CVE-2026-63182), в OneUptime и в Java-проекте saml-client сработало заворачивание подписи в сообщении Response.
С 2020 года обход в крупной библиотеке SAML появляется примерно раз в квартал: только на GitHub Enterprise за 2024–2025 годы пришлись CVE-2024-4985, CVE-2024-6800, CVE-2024-9487 и CVE-2025-23369. Почти все такие ошибки возникают из-за того, что компоненты по-разному разбирают XML и принимают неподписанные данные за проверенные.
После публичного issue по OneUptime в тот же день был влит крупный патч, следующий найденный обход снова закрыли большим изменением, и только после третьего правки перестали ломаться; проект получил отчёты #2949, #2981 и #2988. Ещё одна компания потребовала видеозапись экрана как фильтр от сгенерированных отчётов, автор отказался, но уязвимость исправили и выдали CVE.
Гаджет в xml-crypto схлопывает инструкцию обработки до голого текста
В отличие от кодинга, где контекста на отдельную задачу нужно немного, взлом требует исчерпывающего перебора, поэтому обвязки такого рода строятся вокруг трёх примитивов: разделение работы между несколькими агентами, хранилище промежуточных результатов, задающее направление, и приоритизация со снятием дублей. Весь пайплайн автор гонял на тарифе Claude Max 20x.
Отдельно автор отмечает, что учить Claude Opus взлому не потребовалось. Корпус известных уязвимостей, поданный на вход, сводил работу модели к поиску копий тех же ошибок в других библиотеках, а лучший результат дало описание модели угроз с последующим свободным поиском самой моделью.
Пример гаджета из Node-библиотеки xml-crypto: инструкция обработки при канонизации схлопывается до голого текста, и <?php echo 1; ?> превращается в echo 1;. На фазе подтверждения это стало обходом с обрезанием адреса: NameID вида <?p not-an-?>[email protected] проходит проверку подписи, а приложение видит адрес администратора.
В Go отказ в обслуживании закрыт патчами, в Python и Node проблема открыта
SAML по устройству требует разбора произвольных XML-документов, приходящих POST-запросом из интернета, и почти каждая крупная библиотека оказалась подвержена исчерпанию памяти от неаутентифицированных запросов. Патчи приняты в Go-экосистеме: в xmldsig из-за пропущенной проверки при валидации подписи возникало квадратичное выделение памяти. Похожее поведение даёт xmldom в JavaScript, что задевает все библиотеки на Node, отчёт по нему пока закрыт.
Пакеты для Python не фильтруют набор трансформаций, которые передают в libxmlsec1, поэтому XSLT-шаблон способен заставить библиотеку сгенерировать документ произвольного размера. В примере из разбора шаблон рекурсивно раздваивается 27 раз. Исправлений для библиотек на Python и Node в разборе не приводится.
Почему поиск остановлен
Точка остановки выбрана произвольно: по словам автора, уязвимости не кончились. Счёт обходов подписи для вспомогательных сообщений он держит открытым, публично разобран пока случай TypeScript-проекта samlify. Тем, кто встраивает SAML в продукт, автор советует прогонять по своей реализации оценку с помощью языковой модели и предлагает поделиться типовыми шаблонами уязвимостей.
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
Из Google мы используем только имя и аватар. Почту не сохраняем.
