List of De-Serialize - text.Baldanders.info
tag:text.Baldanders.info,2015-11-18:/tags
2015-11-18T20:29:21+09:00
帰ってきた「しっぽのさきっちょ」
https://text.baldanders.info/images/avatar.jpg
https://text.baldanders.info/images/avatar.jpg
Apache Commons Collections ライブラリの非直列化処理に脆弱性
tag:text.Baldanders.info,2015-11-18:/remark/2015/vulnerability-acc-library/
2015-11-18T11:29:21+00:00
2019-07-01T13:48:09+00:00
なお,今回のケースは Java 以外にも広がるかもしれないので,類似情報に注意しておいた方がいいだろう。
Spiegel
https://baldanders.info/profile/
<p>1週間以上前の話で,なんだか今更なんだけど,全く仕事に絡んでないこともないので,覚え書きの形で残しておく。
なお,今回のケースは Java 以外にも広がるかもしれないので,類似情報に注意しておいた方がいいだろう。</p>
<h2>脆弱性の内容</h2>
<p>発端はこれ。</p>
<figure>
<blockquote>
<q>2015年1月に開催された AppSec California 2015 において、<a href="http://frohoff.github.io/appseccali-marshalling-pickles/">Gabriel Lawrence 氏と Chris Frohoff 氏</a>は、信頼できないデータをデシリアライズしてしまう脆弱性について講演し、任意のコードを実行可能であることを示しました。</q>
</blockquote>
<figcaption><div><q><a href="http://jvn.jp/vu/JVNVU94276522/">Apache Commons Collections ライブラリのデシリアライズ処理に脆弱性</a></q>より</div></figcaption>
</figure>
<figure style='margin:0 auto;text-align:center;'>
<div style="position: relative; margin: 0 2rem; padding-bottom: 56.25%; padding-top: 30px; height: 0; overflow: hidden;">
<iframe src="//www.slideshare.net/slideshow/embed_code/key/a8ysJs2aqxHie8" frameborder="0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;" allowfullscreen></iframe>
</div>
<figcaption><div><a href="http://www.slideshare.net/frohoff1/appseccali-2015-marshalling-pickles">AppSecCali 2015 - Marshalling Pickles</a></div></figcaption>
</figure>
<p>この際に <a href="https://github.com/frohoff/ysoserial" title="frohoff/ysoserial">PoC</a>(Proof-of-Concept; 概念実証コード)も公開されている。</p>
<p>更に両氏は今月になって,この <a href="https://github.com/frohoff/ysoserial" title="frohoff/ysoserial">PoC</a> を使って Apache Commons Collections ライブラリを使用するいくつかのミドルウェアおよび Groovy, Spring が攻略可能であることを示した。</p>
<h2>影響を受ける製品</h2>
<ul>
<li>Apache Commons Collections ライブラリのバージョン 3.2.1 および 4.0</li>
<li>Groovy や Spring の一部バージョン</li>
<li>上記ライブラリまたはフレームワークが classpath に読み込まれている状態で,シリアル化された Java オブジェクトを外部から受け付けている環境
<ul>
<li>WebLogic, WebSphere, JBoss, Jenkins, OpenNMS 等のミドルウェア製品</li>
</ul>
</li>
</ul>
<figure>
<blockquote>
<q>Weblogic や WebSphere に対して可能だと言われているのは、アプリケーションサーバを起動または停止するために通常、組織内で使用する管理ポートへの攻撃です。これらのアプリケーションサーバ上で稼働するすべての Webアプリケーションに影響があるわけではありません。受け付ける入力にシリアル化された Javaオブジェクトを含まない、つまり入力がユーザーのマウス操作やキー入力、文字データや画像のみであるような Webアプリケーションであれば影響を受けません。</q>
</blockquote>
<figcaption><div><q><a href="http://blog.trendmicro.co.jp/archives/12577">主要Javaアプリケーションサーバに影響するJavaライブラリの脆弱性を正しく理解する</a></q>より</div></figcaption>
</figure>
<p>さらに</p>
<ul>
<li>Java 以外にも Python, Ruby などで書かれたアプリケーションやライブラリにも同様の脆弱性がある可能性が指摘されている
<ul>
<li><a href="https://github.com/charliesome/charlie.bz/blob/master/posts/rails-3.2.10-remote-code-execution.md" title="charlie.bz/rails-3.2.10-remote-code-execution.md at master · charliesome/charlie.bz">Rails 3.2.10 Remote Code Execution</a></li>
</ul>
</li>
</ul>
<h3>影響度(CVSS)</h3>
<p><strong>CVSSv2 基本評価値 7.5 (AV:N/AC:L/Au:N/C:P/I:P/A:P)</strong></p>
<table>
<thead>
<tr>
<th style="text-align:right">基本評価基準</th>
<th style="text-align:left">評価値</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:right">攻撃元区分(AV)</td>
<td style="text-align:left">ネットワーク(N)</td>
</tr>
<tr>
<td style="text-align:right">攻撃条件の複雑さ(AC)</td>
<td style="text-align:left">低 (L)</td>
</tr>
<tr>
<td style="text-align:right">攻撃前の認証要否(Au)</td>
<td style="text-align:left">不要(N)<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></td>
</tr>
<tr>
<td style="text-align:right">情報漏えいの可能性(機密性への影響, C)</td>
<td style="text-align:left">部分的(P)</td>
</tr>
<tr>
<td style="text-align:right">情報改ざんの可能性(完全性への影響, I)</td>
<td style="text-align:left">部分的(P)</td>
</tr>
<tr>
<td style="text-align:right">業務停止の可能性(可用性への影響, A)</td>
<td style="text-align:left">部分的(P)</td>
</tr>
</tbody>
</table>
<p>CVSS については<a href="https://text.baldanders.info/remark/2015/cvss-v3-metrics-in-jvn/">解説ページ</a>を参照のこと。</p>
<h2>対策・回避策</h2>
<p>回避策としては以下のとおり。</p>
<ul>
<li>外部入力に認証をかける(今回の <a href="https://github.com/frohoff/ysoserial" title="frohoff/ysoserial">PoC</a> には認証をバイパスする機能はない)</li>
<li>外部入力にシリアル化された Java オブジェクトを受け付けない,または受け付けるオブジェクトを限定する</li>
<li><a href="https://github.com/frohoff/ysoserial" title="frohoff/ysoserial">PoC</a> 対象のクラス(ACC ライブラリであれば <code>InvokerTransformer</code> クラス)を使用しない。</li>
</ul>
<p>さらに根本的な対策としてアプリケーションの設計の見直しが推奨されている。</p>
<figure lang="en">
<blockquote>
<q>However, to be clear: this is not the only known and especially not unknown useable gadget. So replacing your installations with a hardened version of Apache Commons Collections will not make your application resist this vulnerability.</q>
</blockquote>
<figcaption><div>via <q><a href="https://blogs.apache.org/foundation/entry/apache_commons_statement_to_widespread">Apache Commons statement to widespread Java object de-serialisation vulnerability</a></q></div></figcaption>
</figure>
<figure>
<blockquote>
<q>Apache Commons Collections ライブラリの対策版リリースの準備が進められています。しかし、現状提案されているパッチはシリアライズ機能をデフォルトで無効にするだけのものです。当該ライブラリのシリアライズ機能が必要な場合には、この機能を有効にするコードを追加するとともに、安全にデシリアライズするようアプリケーションの設計を見直す必要があります。</q>
</blockquote>
<figcaption><div><q><a href="http://jvn.jp/vu/JVNVU94276522/">Apache Commons Collections ライブラリのデシリアライズ処理に脆弱性</a></q>より</div></figcaption>
</figure>
<figure>
<blockquote>
<q>この PoC が公開された「<a href="http://frohoff.github.io/appseccali-marshalling-pickles/">Marshalling Pickles</a>」の発表には「オブジェクトのデシリアル化処理はいかにしてあなたの一日を台無しにするか」という副題がついており、Java に限らずシリアル化されたオブジェクトを受け取り、デシリアル化処理を行う場合の危険性について広く述べられています。<br>
なかでも強く「脆弱性は非安全なデシリアル化処理にあるのであり、PoC があることが脆弱なのではない」と述べられています。デシリアル化処理には脆弱性ができやすいため、これを安全に行うための方法として、デシリアル化するクラスをホワイトリストでフィルターする(resolveClass のオーバーライド)、単なる暗号化ではない適切な認証方法を利用することなどが紹介されています。</q>
</blockquote>
<figcaption><div><q><a href="http://blog.trendmicro.co.jp/archives/12577">主要Javaアプリケーションサーバに影響するJavaライブラリの脆弱性を正しく理解する</a></q>より</div></figcaption>
</figure>
<h3>ベンダの対応</h3>
<ul>
<li>WebLogic : 最新版は対策済み(<a href="https://support.oracle.com/rs?type=doc&id=2076338.1">回避策</a>)</li>
<li>WebSphere : 最新版は対策済み</li>
<li>JBoss : 最新版は対策済み(一部パッチ準備中),危険なクラスを削除</li>
<li>Jenkins : 最新版は対策済み</li>
<li>OpenNMS : Port 1099 の遮断で回避</li>
<li>Groovy : 最新版は対策済み</li>
<li>Spring : 最新版は対策済み</li>
</ul>
<h2>参考</h2>
<ul>
<li><a href="http://jvn.jp/vu/JVNVU94276522/">JVNVU#94276522: Apache Commons Collections ライブラリのデシリアライズ処理に脆弱性</a></li>
<li><a href="http://www.kb.cert.org/vuls/id/576313">Vulnerability Note VU#576313 - Apache Commons Collections Java library insecurely deserializes data</a></li>
<li><a href="http://frohoff.github.io/appseccali-marshalling-pickles/">AppSecCali 2015: Marshalling Pickles by frohoff</a>
<ul>
<li><a href="https://github.com/frohoff/ysoserial">frohoff/ysoserial</a> : 概念実証コード</li>
</ul>
</li>
<li><a href="http://foxglovesecurity.com/2015/11/06/what-do-weblogic-websphere-jboss-jenkins-opennms-and-your-application-have-in-common-this-vulnerability/">What Do WebLogic, WebSphere, JBoss, Jenkins, OpenNMS, and Your Application Have in Common? This Vulnerability.</a></li>
<li><a href="https://blogs.apache.org/foundation/entry/apache_commons_statement_to_widespread">Apache Commons statement to widespread Java object de-serialisation vulnerability : The Apache Software Foundation Blog</a></li>
<li><a href="http://blog.trendmicro.co.jp/archives/12577">主要Javaアプリケーションサーバに影響するJavaライブラリの脆弱性を正しく理解する | トレンドマイクロ セキュリティブログ</a></li>
<li><a href="http://www.itmedia.co.jp/enterprise/articles/1511/10/news053.html">Javaライブラリに脆弱性、主要ミドルウェア全てに影響 - ITmedia エンタープライズ</a></li>
<li><a href="http://japan.zdnet.com/article/35073223/">Javaライブラリにリモートコード実行の脆弱性–JBoss、WebSphere、WebLogicなどに影響 - ZDNet Japan</a></li>
<li><a href="http://d.hatena.ne.jp/Kango/20151110/1447175137">Apache Commonsのcollectionsの脆弱性に関連するリンク集をまとめてみた。 - piyolog</a></li>
<li><a href="http://takahashikzn.root42.jp/entry/2015/11/10/155319">commons-collectionsのInvokerTransformer脆弱性について - R42日記</a></li>
<li><a href="http://takahashikzn.root42.jp/entry/2015/11/12/031449">SpringとGroovyにも直列化オブジェクト脆弱性 - R42日記</a></li>
<li><a href="http://jvndb.jvn.jp/ja/contents/2015/JVNDB-2015-005968.html">JVNDB-2015-005968 Oracle WebLogic Server の WLS Security コンポーネントにおける任意のコマンドを実行される脆弱性 - JVN iPedia - 脆弱性対策情報データベース</a> : 対策版リリース</li>
<li><a href="http://www-01.ibm.com/support/docview.wss?uid=swg21972121">IBM (参考) Apache Commons の脆弱性が Lotus Widget Factory に与える影響について (CVE-2015-7450) - Japan</a> : この記事では,影響度を CVSSv3 基本評価値で 9.8 (<code>CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H</code>) と評価している。 CVSSv3 では基本評価値 9.0 以上で「緊急」レベルとみなせる</li>
</ul>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://github.com/frohoff/ysoserial" title="frohoff/ysoserial">PoC</a> による攻撃に限るなら認証をバイパスできないため,外部入力に認証をかけている場合は評価値は7未満になる。今回のようなケースは CVSSv2 では評価が難しいかも。 <a href="https://baldanders.info/blog/000864/">CVSSv3</a> で評価し直した方がいいかな。 <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>