Уязвимость Ghost Cat — это новая уязвимость, которая набирает обороты. В этой статье я опишу уязвимость, влияние и то, что можно сделать, чтобы исправить уязвимость на серверах Tomcat.

Что такое призрачный кот?

Ghost Cat — это уязвимость, затрагивающая Apache Tomcat. В настоящее время он затрагивает версии до 9.0.31, до 8.5.51 и до 7.0.100. Это вызвано небезопасной конфигурацией протокола AJP в установке Tomcat по умолчанию, что приводит к тому, что злоумышленники могут вызвать раскрытие информации и потенциально удаленное выполнение кода.

Что такое AJP?

AJP означает протокол Apache Jserv и используется как оптимизированная версия протокола HTTP в двоичной форме. Его можно использовать для снижения затрат на обработку, связанных с HTTP-запросами, и в основном он используется в сценариях, требующих кластеризации или обратных прокси-серверов.

По умолчанию AJP включен в Apache Tomcat и настроен на прослушивание порта 8009. Этот порт можно изменить в файле конфигурации, но чаще всего он используется для порта 8009.

Как определить, включен ли AJP?

Существует два основных способа определить, включен ли AJP. Во-первых, проверьте файл server.xml, расположенный в папке конфигурации Tomcat. Если AJP включен, порт и протокол будут указаны в файле, как показано на снимке экрана ниже.

Если он не включен, эта строка будет закомментирована или не появится в файле конфигурации.

Другой способ определить, включен ли AJP, — выполнить сканирование сервера с помощью nmap. Использование такой команды, как nmap -T4 -A -v ‹SERVER IP›, покажет, открыт ли порт 8009 и использует ли он протокол AJP.

Почему существует эта уязвимость?

По умолчанию Tomcat рассматривает соединения AJP как имеющие более высокий уровень доверия по сравнению с соединениями HTTP. Когда AJP реализован правильно, протоколу требуется секрет, который требуется любому, кто запрашивает протокол. При использовании конфигурации Tomcat по умолчанию этот секрет не включен, что означает, что проверка безопасности не выполняется для запросов, поступающих на порт 8009. Это означает, что злоумышленник, не прошедший проверку подлинности, может получить доступ к порту для чтения или потенциальной записи на сервер.

Каково влияние этой уязвимости?

В большинстве случаев эта уязвимость позволяет злоумышленнику читать любые ресурсы, существующие на сервере Tomcat. Это означает, что любые серверные или конфигурационные файлы могут быть утеряны. Серьезность этого зависит от того, что содержится в исходном коде и файлах конфигурации.

Худший случай этой атаки происходит, когда приложение позволяет пользователю загружать файлы. В этом случае злоумышленник может загрузить вредоносный jsp-файл и получить к нему доступ через браузер, что приведет к удаленному выполнению кода. Этот тип атаки может привести к полной компрометации уязвимого сервера.

Как можно исправить эту уязвимость?

Самый простой способ устранить эту уязвимость — обновить версию Apache Tomcat до 9.0.31, 8.5.51 или 7.0.100.

Если вы в настоящее время не используете AJP, вы также можете закомментировать порт в файле server.xml. Это гарантирует, что трафик через порт 8009 не будет принят, что смягчит атаку.

Если вы используете AJP и не можете обновить Tomcat, лучше всего добавить секрет в конфигурацию AJP. Это гарантирует, что любой, кто получает доступ к порту, должен пройти аутентификацию перед доступом к нему. Кроме того, правила брандмауэра можно использовать для ограничения доступа к порту, если он используется только для внутренних целей или определенными процессами.