Astro — это веб-фреймворк для веб-сайтов, ориентированных на контент. В версиях с 1.0.0 по 4.0.18 поля элементов source.title иclosure.type в packages/astro-rss/src/index.ts интерполируются непосредственно в строки шаблона XML без экранирования XML-символов перед анализом с помощью fast-xml-parser. Оба поля проверяются только как z.string(), без ограничений на использование специальных символов XML.
Злоумышленник, контролирующий эти значения, может внедрить произвольный XML-код в сгенерированный RSS-канал: значение, содержащее ", может выйти за пределы атрибута (как в случае с ignore.type), а значение, содержащее </source>, может досрочно закрыть элемент и внедрить дополнительные узлы (как в случае с source.title). Это повреждает структуру канала, вводит ложные метаданные (например, поддельный <link>, указывающий на вредоносный URL-адрес) и может привести к неправильному анализу или отображению контента, контролируемого злоумышленником. В режиме SSR (выходные данные: «сервер»), отравленный канал отправляется при каждом запросе всем подписчикам.
Эта проблема исправлена в версии 4.0.19.
Показать оригинальное описание (EN)
Astro is a web framework for content-driven websites. In versions 1.0.0 through 4.0.18, the source.title and enclosure.type item fields in packages/astro-rss/src/index.ts are interpolated directly into XML template strings without XML-character escaping before being parsed by fast-xml-parser. Both fields are validated only as z.string(), placing no restriction on XML special characters. An attacker who controls these values can inject arbitrary XML into the generated RSS feed: a value containing " can break out of an attribute (as with enclosure.type), and a value containing </source> can close an element early and inject additional nodes (as with source.title). This corrupts feed structure, injects false metadata (for example, a fake <link> pointing to a malicious URL), and can cause feed readers to misparse or display attacker-controlled content. In SSR mode (output: 'server'), the poisoned feed is served on every request to all subscribers. This issue has been fixed in version 4.0.19.
Характеристики атаки
Последствия
Строка CVSS v3.1