Баг в jQuery Mobile может обернуться XSS-уязвимостью

Инженер компании Google Эдуардо Вила (Eduardo Vela) обнаружил неприятную проблему во фреймворке jQuery Mobile. Согласно статистике BuiltWith, в настоящий момент более 150 000 активных сайтов полагаются в своей работе на jQuery Mobile.

В своем блоге Вила объясняет, что любой сайт, использующий jQuery Mobile и Open Redirect, уязвим для XSS-атак, причем исправления для этой проблемы нет и не предвидится.

Исследователь пишет, что баг сопряжен с location.hash. Так, jQuery Mobile проверяет, есть ли что-то в location.hash. Если ваш location.hash похож на URL, будет предпринята попытка задействовать метод history.pushState, а затем добавить объект XMLHttpRequest. Ответом на это станет innerHTML. И хотя использование history.pushState должно предотвращать XSS-атаки, они все равно возможны, если сайт применяет Open Redirect. В блоге Вила приводит следующий пример:

http:// jquery-mobile-xss. appspot. com/#/redirect?url= http:// sirdarckcat. github. io/xss/img-src.html

В теории перед такими атаками уязвимо множество сайтов. Open Redirect’ы можно найти даже на сайтах Google, YouTube, Facebook, Baidu и Yahoo. Но когда Вила связался с разработчиками jQuery Mobile, ему ответили, что они рассматривают Open Redirect как уязвимость, и исправить проблему в ближайшее время вряд ли получится. Ведь это потребует внесения слишком серьезных изменений и может спровоцировать неработоспособность уже существующих приложений.

«Есть интересная возможность для дальнейших исследований: если у вас достаточно времени, можете попытаться заставить баг работать без Open Redirect. Я пытался, но у меня не вышло, — пишет Вила. — Основываясь на своем опыте, [могу сказать], что Open Redirect’ы широко распространены и часто являются источником багов. Возможно, нам стоит начать фиксить Open Redirect’ы. А может, нам стоит быть более последовательными и перестать относиться к ним, как к уязвимостям. В любом случае, пока у индустрии существуют разногласия по этим вопросам, мы можем наслаждаться разными XSS-багами».