※勉強目的のみ。悪用厳禁。
脆弱性説明
Apache Tomcat における脆弱性(CVE-2020-1938)について
脆弱性バージョン(8.5.50)検証
poc実行
デフォルトの設定のままtomcatを起動。
pocはググって出たものを使った。
/WEB-INF/web.xmlの内容が表示された。

nmap結果。
AJPの8009ポートが空いている。

緩和策実行
JPCERTの緩和策を実行した。
Apache Tomcat の脆弱性 (CVE-2020-1938) に関する注意喚起
conf/server.xmlの設定内容


nmap実行
8009ポートが表示されなくなった。

poc実行
拒否された。

潜在的なRCE
システムコマンドを実行するjspを何らかの方法でアップロードする。

脆弱性を使用してアップロードしたファイルを読み込むとjspとして実行される。
その際、拡張子は無視される。

修正バージョン(8.5.51)検証
実行結果
タイムアウト。
デフォルト設定ではAJPが有効になっていない。

有効にした。

nmap結果。
ポートは開いている。

poc実行。
403でブロックされた。

以下の修正を見ると、設定されたsecretがリクエストに含まれなければならず、かつ属性が決められたレギュラーでないと403になるとのこと。
Rename requiredSecret to secret and add secretRequired · apache/tomcat@b962835 · GitHub
Add new AJP attribute allowedArbitraryRequestAttributes · apache/tomcat@5a5494f · GitHub
対策
最新版へアップデートする。
アップデートが無理であれば、緩和策を実施する。
Apache Tomcat における脆弱性(CVE-2020-1938)について
Apache Tomcat の脆弱性 (CVE-2020-1938) に関する注意喚起
感想
デフォルトでAJPが有効で、検証も簡単だったので割と悪用されそうだという気がする。
最新版にアップデートしても、AJP周りがまぁまぁ変わっていたので、AJPを使っているシステムは検討が必要…
どうあっても工数がかかってしまいそうで、開発泣かせな脆弱性。
コメント