
Apache Tomcat Уязвимость обхода безопасности Poc

Недавно Apache опубликовал бюллетень безопасности, в котором сообщается об уязвимости обхода безопасности в нескольких версиях Apache Tomcat 7, 8 и 9. Злоумышленник может использовать эту проблему для обхода определенных ограничений безопасности и выполнения несанкционированных действий, что может способствовать дальнейшим атакам.
Ограничения безопасности, определенные с помощью аннотаций сервлетов Apache Tomcat, применяются только один раз после загрузки сервлета. Поскольку ограничения безопасности, определенные таким образом, применяются к шаблонам URL и любым URL-адресам под этим путем, это, скорее всего, зависит от порядка загрузки сервлетов, что может раскрыть ресурсы пользователям, не имеющим авторизованного доступа к ним.
CVE-2018-1305
Apache Tomcat < 9.0.5
Apache Tomcat < 8.5.28
Apache Tomcat < 8.0.50
Apache Tomcat < 7.0.85
Средний
Java EE предоставляет аннотацию ServletSecurity, аналогичную проверке прав ACL, которая может использоваться для модификации сервлетов и их защиты. Если есть два сервлета: Servlet1 с путем доступа "/servlet1/" без аннотации ServletSecurity, то при первом обращении к servlet1/servlet2 аннотация ServletSecurity сервлета Servlet1 не сработает, и путь "/servlet1/servlet2" не будет защищен, что может привести к несанкционированному доступу.
Если перед обращением к "/servlet1/servlet2" уже был осуществлен доступ к "/servlet1", Tomcat загрузит ACL и активирует защиту для "/servlet1/servlet2", и уязвимость не сработает.

Перед Servlet1 добавлена аннотация ServletSecurity, а у Servlet2 такой аннотации нет.

Измените соответствующий url-pattern сервлета в файле web.xml, как показано на рисунке ниже.

Запустите проект. При первом обращении к URL сервлета servlet2 обнаружен несанкционированный доступ, ACL для servlet1 не сработал.

При втором обращении к URL сервлета servlet1 доступ запрещен, ACL сработал.

При повторном обращении к URL сервлета servlet2 обнаружен запрет доступа. Чтобы ACL сработал для servlet2, необходимо предварительное обращение к servlet1.


Таким образом, воспроизведение уязвимости возможно только после запуска Tomcat, если до обращения к "/servlet1/" был осуществлен доступ к странице "/servlet1/servlet2/". Если кто-либо ранее обращался к странице "/servlet1/*", уязвимость не сработает. Уязвимость представляет высокую степень опасности, но условия ее использования сложны, поэтому зона поражения невелика.