вторник, 19 мая 2009 г.

Добавляем защиту - добавляем "дыру"

Забавная новость:

Новая защита Wi-Fi-роутеров D-Link оказалась брешью в безопасности

Не успела компания D-Link анонсировать обновленное микропрограммное обеспечение для беспроводных роутеров с функцией защиты от автоматических регистраций (CAPTCHA), как сразу несколько энтузиастов обнаружили, что новая мера защиты делает владельца такого роутера еще более уязвимым для похищения паролей доступа.


http://www.securitylab.ru/news/379779.php

Детали тут:

http://www.sourcesec.com/2009/05/12/d-link-captcha-partially-broken/

На форуме SecurityLab уже успели отметится товарищи с заявлениями типа:

Я не понял, опять взлом метода ввода дефолтного пароля?

На самом деле, ситуация гораздо забавнее. Дело в том, что CAPTCHA была задействована D-link для защиты от Cross-Site Request Forgery (CSRF), которую (точнее метод её эксплуатации на роутере) Symantec громко назвал Drive-by Pharming. Но ошибка реализации, а именно прием запросов с "правильным" хэшем без значений CAPTCHA делает эту защиту уязвимостью.

В случае со стандартными паролями и так существовал трюк обхода Basic-аутентификации, используя Javscript (см. "Пробиваем периметр" http://www.securitylab.ru/analytics/292473.php ).

Но если пароль (или его производная, такая как хэш) передается в GET (в качестве дублирования Basic), то ситуация становится еще интересней - злоумышленник может использовать не только хэщ стандартного пароля, но реализовать на Javascript подбор пароля пользователя с использованием CSRF, от которой CAPTCHA была призвана защищать.

Т.е. эта уязвимость распространяется не только на стандартные пароли, но и может повысить эффективность подбора паролей пользователей с использованием CSRF, причем стандартные механизмы парольной защиты (таймауты, временная блокировка и т.д.) работать не будут, поскольку идет не собственно подбор, а попытки соединения с различными значениями "как бы" нормального хэша пароля, используемого вместо идентификатора сессии. Для этого достаточно написать элементарный скрипт, обращающийся по адресу

GET /post_login.xml?hash=

и проверяющий "успешность" входа. Главное - заставить человека зайти на нужную страницу :)

В общем, достаточно интересная ошибка проектирования механизма аутентификации Web-приложения.

Комментариев нет: