Веб-фреймворк Apache Struts — один из самых популярных инструментов для создания сайтов и приложений (в том числе корпоративных, например банк-клиентов). 2 марта 2014 года появилась информация об обнаружении критической уязвимости в Struts 2 (S2-020), которая позволяет добиться выполнения произвольного кода. Проблема затрагивает версии Struts вплоть до 2.3.16.
Причина возникновения ошибки безопасности кроется в неправильной обработке входящего параметра class, для которого устанавливается автоматическое соответствие с методом getClass(). Благодаря уязвимости атакующий имеет возможность назначать собственные значения для свойств внутренних объектов веб-приложения, что и позволяет выполнять произвольный код.
Первоначальное решение производителя для устранения уязвимости — добавить в конфигурацию приложения регулярное выражение для блокировки уязвимого параметра. Однако обойти этот фикс оказалось просто: представление имени параметра с помощью точек (class.classLoader) можно заменить квадратными скобками (class[classLoader]), на что регулярное выражение не было рассчитано. Кроме того, обход можно реализовать и с помощью смены регистра (Class.classLoader).
Данная ситуация хорошо иллюстрирует тот факт, что даже исправления от производителей ПО не всегда могут обеспечить должный уровень защиты. Поэтому для повышения уровня защищенности сайтов и приложений необходимо использовать и дополнительные средства.
На текущий момент способов защиты приложений, созданных на фреймворке Struts, не так много. Один из них — использование Positive Technologies Application Firewall. Благодаря эвристическим алгоритмам обнаружения аномальных запросов PT Application Firewall может справиться с уязвимостью, блокируя нетипичные параметры без создания так называемых виртуальных патчей, которые обычно призваны защитить веб-приложение до исправления уязвимости.