Authentication Bypass - обход аутентификации
Критическая уязвимость. Максимальный уровень угрозы.
Authentication Bypass (обход аутентификации) - доступ к закрытым разделам сайта в обход проверки подлинности пользователя.
Authentication Bypass является максимальной угрозой для любого сайта, веб-приложения, информационной системы.
Authentication Bypass (обход аутентификации) для сайтов и веб-приложений - это несанкционированный доступ к административному разделу или разделам сайта и скриптам обеспечивающим прямое взаимодействие с базой данных и файловой системой сервера.
Authentication Bypass может быть выполнен эксплуатируя уязвимости кода сайта, ошибки публикации ресурса, а так же из-за ошибок в настройках и уязвимостями программного обеспечения сервера.
Возможность обхода аунтификации (Authentication Bypass) на сайте всегда приводит к его взлому, так как:
Несколько примеров Authentication Bypass:
SQL injection Authentication Bypass
Обход аутентификации с помощью SQL инъекции

XPath injection Authentication Bypass
Обход аутентификации с помощью XPath инъекции
Аналогично SQL инъекции:
Часть кода XML базы данных пользователей сайта: base.xml
<?xml version='1.0' encoding='ISO-8859-1'?> <users>
<user>
<id>1</id>
<username>admin</username>
<password>adminpass</password>
</user>
<user> <id>2</id>
<username>user</username>
<password>userpass</password>
</user>
...
</users>
Код аутентификации пользователей / администраторов сайта
String username = req.getParameter("username');
String password = req.getParameter("password');
XPathFactory factory = XPathFactory.newInstance();
Xpath xpath = factory.newXPath();
File file = new File("/usr/webappdata/users.xml');
InputSource src = new InputSource(new FileInputStream(file));
XPathExpression expr = xpath.compile("//users[username/text()=' " + username + " ' and password/text()=' " + password + ' ']/id/text()');
String id = expr.evaluate(src);
Легальный XPath запрос на аутентификацию пользователя:
users[username/text()='admin' and password/text()='adminpass'] /id/text()XPath инъекция:
' or '1'='1'Измененный в результате эксплуатации XPath инъекции запрос:
users[username/text()='admin' and password/text()='' or '1'='1' ]/id/text()Результат:
Аутентификация атакующего на сайте
Запрос вернет ID для пользователя admin с пустым паролем при условии 1=1 является истиной.
Ошибки разграничения прав доступа к БД
Критические ошибки разработки сайта, при определенных условиях, могут приравнять обычных пользователей сайта к их администраторам или контент менеджерам.
В нашей практике случались обращения клиентов с взломанными сайтами из-за такого рода ошибок.
Такой взлом сайта реализуется крайне просто. Атакующий регистрируется на сайте (или форуме) как обычный пользователь, а затем, используя свою учетную запись проходит в административный раздел сайта.
Защита от Authentication Bypass
Ограничение доступа к административному разделу сайта по IP. Кроме этого, можно рассмотреть вариант с установкой дополнительной парольной пары на системные директории сайта. В случаях, когда нельзя использовать вышеописанные варианты защиты, следует исключить эксплуатацию любых уязвимостей, т.к. получение несанкционированного доступа к административному разделу это не только SQL и XPath инъекции но и сотни вариаций самых разнообразных атак, таких как XSS и им подобных.
Надо понимать, что защита административно раздела по IP никаким образом не гарантирует безопасность Вашего сайта.
Конечная цель взлома сайта - это размещение шеллов, бэкдоров или врезок в код сайта, позволяющий хакеру контролировать взломанный сайт.
Способов и методик получения шелла на атакуемом сайте множество, и доступ к административной панели чаще всего не нужен.
Получивший несанкционированный доступ к административной панели злоумышленник, в 90% случаев будет рассматривать его как промежуточный этап взлома для размещения своих шеллов на атакуемом сервере.
Сканер уязвимостей сайтов онлайн Проверьте, наколько устойчив к взлому Ваш сайт