Веб-приложения и серверы, работающие с JavaScript, уязвимы перед атаками ReDoS

Исследователи предупреждают, что веб-приложения и серверы, работающие с JavaScript, по-прежнему уязвимы перед атаками ReDoS. Такие атаки работают за счет отказа в обслуживании при парсинге текста уязвимым регулярным выражением. Аббревиатура происходит отсюда же: regular expression (regex) и denial of service (DoS) суммарно дают ReDoS.

Впервые ReDoS уязвимости и атаки, связанные с JavaScript, были описаны еще в 2012 году, однако тогда JavaScript и Node.js не были распространены так массово, как сегодня. В результате проблема фактически игнорировалась на протяжении многих лет, и ситуация лишь ухудшилась. Так, в 2017 году было проведено исследование, результаты которого показали: 5% всех уязвимостей в библиотеках и приложениях Node.js — это ReDoS.

Теперь новый доклад, посвященный старой проблеме, представили специалисты Дармштадтского технического университета. Они предупреждают, что проблема ReDoS по-прежнему является очень опасной: были обнаружены 25 ранее неизвестных уязвимостей в популярных модулях Node.js. То есть злоумышленники могут атаковать уязвимые сайты, эксплуатируя баги в любом из этих решений.

Эксплуатация проблем приводит к тому, что сайт «подвиснет» на несколько секунд или минут, пока сервер пытается определить, что делать с массивом текста из эксплоита. Подобным образом работают многие regex-фильтры, установленные на областях ввода, так как это часть фильтров против XSS. В итоге, если атакующий продолжит направлять ресурсу эксплоиты, «зависание» может продлиться весьма продолжительное время.

Специалисты пишут, что разработчики в основном сосредотачивают свои усилия на точности, но почти не уделяют внимания производительности, оставляя злоумышленникам широкое поле деятельности для ReDoS-атак.

Придя к этим неутешительным выводам, эксперты Дармштадтского технического университета решили проверить, много ли «живых» сайтов уязвимы перед ReDoS. Просканировав 2846 популярных ресурсов, работающих на Node.js, они обнаружили 339 сайтов, уязвимых хотя бы перед одной из выявленных проблем. Таким образом, если экстраполировать эту выборку, перед ReDoS уязвимы порядка 12% от общего числа таких сайтов.

Исследователи уже уведомили о найденных уязвимостях разработчиков модулей, и некоторые из них уже подготовили патчи. Также на GitHub был опубликован proof-of-concept эксплоит для тестирования потенциально уязвимых библиотек. В этом же репозитории можно найти ссылки на соответствующие «заплатки», если таковые доступны.