2017-02-09 12 views
1

При тестировании форм 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>

+0

Это звучит как ошибка. Выход должен избегать разметки, если вы не используете 'mediatype =" text/html "'. Однако я не думаю, что проблема заключается в дезинфекции параметров запроса: каждый раз, когда вы берете ненадежный ввод и выводите его как разметку на своей странице, у вас будут проблемы. – ebruchez

+0

Для справки я ввел [выпуск] (https://github.com/orbeon/orbeon-forms/issues/3115). – ebruchez

+0

Я беру часть этого назад. Существует проблема санитарии, которая заключается в том, что символ '% 00' переключает поведение Saxon serializer. Более подробная информация приведена выше. – ebruchez

ответ

0

Это оказался ошибка, связанная с HTML сериализации. Сейчас проблема fixed.

Отдельно мы можем больше подумать о том, нужна ли санитария параметров запроса, включая отказ или удаление символа #00. Сами данные формы должны быть охвачены, поскольку они поступают из XML-запросов, а XML явно запрещает этот (и несколько других) символов.