Атаки HTML5: что нужно знать

9f50bd97e9d7bd5c78aecb79ac461436.pngВсе последние версии браузеров поддерживают HTML5, следовательно, индустрия находится на пике готовности принять технологию и адаптироваться к ней. Сама технология создана такой, чтобы сделать простым процесс включения и обработки графического и мультимедиа-контента в вебе, без использования третьих плагинов или API. Эта статья расскажет о новых типах атак, которые HTML5 «подарил» миру.

Атаки на CORS (Cross origin resourse sharing) — получение реверсивного шелл-кода Чтобы отвечать растущим потребностям разработчиков делать высококачественные сайты, HTML5 ослабил внимание к некоторым ограничениям, которые ранее провозглашались концепцией SOP (same origin policy). Концепция имеет простые правила: скрипты, запускаемые на сайте, имеют доступ к методам и свойствам этого сайта, но не имеют такового к страницам другого сайта (SOP как таковое есть обширная отдельная тема, рекомендуем ознакомиться перед дальнейшим чтением).Теперь HTML5 нарушает эти ограничения.

Например, AJAX-запросы могут выполняться между разными доменами. SOP ограничивает доступ JavaScript к контенту веб-страниц, предписывая обязательное условие: JavaScript и сам контент находятся на одном домене. Без такого ограничения, вредоносный веб-сайт может запускать яваскрипт, который подгружает персональную информацию с других сайтов, используя сохраненные аутентификационные данные пользователей, и возвращает информацию атакующему. Итак, HTML5 сделал возможным получение данных с других доменов с помощью JavaScript.

Так, в то время, как xyz.com разрешает получать данные, abc.com может сделать аякс-запрос к xyz.com и прочитать ответ. Эта особенность используется для туннелирования HTTP-трафика кросс-доменным вызовом.

AJAX вызывает и создает браузерный эквивалент реверсивного шелла с помощью простого инструмента «Shell of of the future». Инструмент основан на концепции, что если атакующий в состоянии найти утечку кросс-доменного запроса, он может использовать начинку JavaScript (убедив пользователя нажать на ссылку) и его скрипт уйдет выполняться на сервер атакующего через кросс-доменный запрос. Используя эту брешь в будущем, атакующий может просматривать сессии жертвы с помощью туннелирования его запросов через браузер жертвы.

Важный вопрос: как сессия жертвы отображается для атакующего?

Это возможно, потому что скрипт, запускаемый браузером пользователя, начинает обращаться к сайту атакующего через Cross Origin Resource (без HTML5 это было бы невозможно). Таким образом атакующий просто туннелирует свой запрос через браузер жертвы.Кража CSRF-токенов С HTML5 стало возможным красть CSRF-токены — если токен идет через URL (например, GET-запрос), пользуясь ранее названными правилами CORS. Атакующий может произвести инъекцию в CSRF-начинку на странице, использующей кросс-доменные запросы, после чего создается запрос на целевой сайт, без оповещения об этом пользователя. Обратите внимание, что для CORS должен быть добавлен дополнительный HTTP-заголовок, называемый origin. Смена значения атрибута withCredentials на true позволит угнать куки вместе с запросом. Заголовок сервера в таком случае должен быть Access-Control-Allow-Origin: *. Вместо звездочки можно указать адрес конкретного домена или доменов, которым разрешено получить ответ. Если оставить звездочку — разрешение будет распространяться на все домены.Пользователь и подозревать не будет, что происходит в фоновом режиме. Таким образом, HTML5 позволяет красть CSRF-токены и выполнять операции без ведома пользователя.

Доступ к внутренним серверам Многие коммерческие организации имеют внутренние сайты, которые используются для внутренних нужд бизнеса. Фактически это интранет-приложения, недоступные через интернет. Так как таких приложений существует множество, они должны как-то взаимодействовать друг с другом. И, в спешке, большинство разработчиков просто добавляют уже известный нам заголовок Access-Control-Allow-Origin: * и включают CORS. Это может быть использовано атакующим, который может использовать социальную инженерию, чтобы заставить работника компании кликнуть на ссылку, после чего атакующий очень легко получает доступ к контенту.Своеобразная «пошаговая инструкция»:

Сотрудник компании логинится на сайте, который не доступен через интернет. Интранет-сервер возвращает запрос с заголовком Access-Control-Allow-Origin: * (Почему? Он хочет позволить другим сайтам в интранете получить доступ к данным сервера). Сотрудник получает ссылку от злоумышленника в почтовом письме и кликает на нее. Сайт выглядит совершенно нормально, сотрудник не замечает ничего подозрительного. Но сайт содержит JavaScript-код, который выполняется в браузере сотрудника. Скрипт в фоновом режиме посылает запрос XMLHttpRequest и он также получает запрос (Почему? Потому что заголовок сервера содержит Access-Control-Allow-Origin: *. Яваскрипт парсит запрос и отправляет его на сервер атакующего (легко делается через XMLHttpRequest). Атакующий перехватывает данные, хранящиеся на внутреннем сайте компании. Новые XSS HTML5 векторы Разработчики всегда любят делать собственные кастомные фильтры для того, чтобы блокировать XSS-атаки. Большинство из них заносят в черный список такие символы, как