
CVE-2016-1240 エクスプロイトとパッチ
1.仮想マシンに Tomcat 7 をインストールします
sudo apt-get install tomcat7
2.最初のステップが失敗した場合は、JDK_DIRS="/usr/lib/jvm/java-8-oracle" を設定し、ステートメント “export JAVA_HOME=/usr/lib/jvm/java-8-oracle” と “export CATALINA_HOME=/usr/share/tomcat7” を追加します。その後、Tomcat 7 を再インストールします
3.Tomcat ユーザーの初期パスワードを設定します
sudo passwd tomcat7
4.Tomcat ユーザーにログインシェルを割り当てます
sudo usrmod -s /bin/bash tomcat7
5.Tomcat 7 ユーザーシェルを確立します
ssh tomcat7@localhost
1.Tomcat7 ユーザーシェルを介して /tmp にエクスプロイトスクリプト attack.sh を作成し、エクスプロイトコードを実行可能にします
touch attack.sh
chmod +x attack.sh
2.エクスプロイトコードを実行します
./attack.sh
3.Tomcat サーバーを再起動して攻撃結果を確認します
sudo service tomcat7 restart
4.ユーザーの ID を確認します
id
その後、攻撃は成功し、euid は root である 0 になるはずです。
# Run the catalina.sh script as a daemon
set +e
touch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
chown $TOMCAT7_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
start-stop-daemon --start -b -u "$TOMCAT7_USER" -g "$TOMCAT7_GROUP" \
-c "$TOMCAT7_USER" -d "$CATALINA_TMPDIR" -p "$CATALINA_PID" \
-x /bin/bash -- -c "$AUTHBIND_COMMAND $TOMCAT_SH"
status="$?"
set +a -e
return $status
上記のコードは特権昇格の鍵です。これは root 権限で実行されるため、私たちが望むことは何でもできます。次に、catalina.out の所有者を tomcat7 ユーザーに変更する必要があります。Tomcat を再起動すると、catalina が指すファイルを読み取ることができます。
具体的には、Tomcat が再起動すると、catalina.out の所有者が Tomcat ユーザーに変更されます。この再起動は Linux の init によって呼び出されます。Linux の init を悪用することで、シンボリックリンクを使用して任意のファイルの所有者を Tomcat ユーザーに変更できます。catalina.out を任意のファイルにシンボリックリンクすると、catalina.out によって付与される root 権限でシステム内の任意のファイルを操作できます。これは典型的な DLL ハイジャックの悪用です。