При тестировании форм Orbeon для уязвимостей типа Scripting Reflected Cross Site (https://en.wikipedia.org/wiki/Cross-site_scripting#Reflected_.28non-persistent.29) мы заметили, что можно передавать параметры запроса с помощью тегов сценариев в них, которые затем могут выводиться с использованием xf: output.Почему формы Orbeon не подтверждают параметры запроса?
Не следует ли проверять (или, по крайней мере, дезинфицировать) параметры запроса при их получении с помощью xxf: get-request-parameter() или когда они выводятся с использованием вывода xf: output, чтобы предотвратить такую уязвимость безопасности?
Я проверил это с использованием последней версии Orbeon (orbeon-2016.3.201612302139-CE) и контейнера Jetty. Обратите внимание, что вы не можете использовать Tomcat, так как он выполняет свою собственную проверку по параметрам запроса, и вы не можете использовать Chrome, потому что он санирует выход для вас (удаление содержимого скрипта).
Небольшой образец формы, который демонстрирует это:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xh="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms"
xmlns:xxf="http://orbeon.org/oxf/xml/xforms">
<head>
<title>Reflected XSS</title>
<xf:model>
<xf:instance id="default">
<root xmlns="">
</root>
</xf:instance>
<xf:var name="testvar" value="xxf:get-request-parameter('test')"/>
</xf:model>
</head>
<body>
<p>This is an example to show that Orbeon is vulnerable to Reflected Cross Site Scripting attacks.</p>
<p>Access this form and pass a request parameter with some javascript like: /?test=bla%00rje1w<script>alert(1)<%2fscript></p>
<p><xf:output value="$testvar"/></p>
</body>
</html>
Это звучит как ошибка. Выход должен избегать разметки, если вы не используете 'mediatype =" text/html "'. Однако я не думаю, что проблема заключается в дезинфекции параметров запроса: каждый раз, когда вы берете ненадежный ввод и выводите его как разметку на своей странице, у вас будут проблемы. – ebruchez
Для справки я ввел [выпуск] (https://github.com/orbeon/orbeon-forms/issues/3115). – ebruchez
Я беру часть этого назад. Существует проблема санитарии, которая заключается в том, что символ '% 00' переключает поведение Saxon serializer. Более подробная информация приведена выше. – ebruchez