カテゴリー
Computer Security

PHP 5.1.2の脆弱性

A cross-site scripting (XSS) vulnerability in phpinfo (info.c) in PHP
<= 5.1.2 allows remote attackers to inject arbitrary web script or HTML
via long array variables, including (1) a large number of dimensions
or (2) long values, which prevents HTML tags from being removed.
(CVE-2006-0996)

Directory traversal vulnerability in file.c in PHP <= 5.1.2 allows
local users to bypass open_basedir restrictions and allows remote
attackers to create files in arbitrary directories via the tempnam
function. (CVE-2006-1494)

The copy function in file.c in PHP <= 5.1.2 allows local users to
bypass safe mode and read arbitrary files via a source argument
containing a compress.zlib:// URI. (CVE-2006-1608)

Mandriva Linux Security Advisoryによると現行リリースのPHP 5.1.2,4.4.2にも含まれる脆弱性を修正したPHPパッケージをリリースしましたね。重要な修正ではないので「適切」にシステムを構築・管理しているPHPユーザは気にする必要はありません。

phpinfo関数を一般に公開するのは絶対に止めた方が良いです。基本的にphpinfo関数の出力はデバッグ用の情報です。セキュアなシステムではデバッグ情報を一般に公開する事はありません。開発時以外はシステムや言語のエラー情報を出力しないのと同じです。

open_basedirは「フェイルセーフ機能」であるため、これに頼った設計を行うべきではありません。Perlなどでtaintモードを信頼するのと変わりません。

# 言い古されてはいますが、セキュリティ対策は繰り返し言い続ける事が重要ですから。

カテゴリー
Computer

Thunderbird 1.5.0.2のメッセージフィルタ不良?

今さっき気が付きました。Thunderbird 1.5.0.2のメッセージフィルタを編集、削除しようとすると無応答状態になりました。クリックできなくなった状態と言った方が良いかも知れません。私だけかな?

Windows XP SP2日本語版/Thunderbird 1.5.0.2 英語版

カテゴリー
Windows

Windows PowerShell RC1

Perlの様な文法を持つシェルだそうです。.NETが自由自在に使える(?)のかも。

# Over 130 standard utilities (called “cmdlets) for completing common system administration tasks such as working with the registry, services, processes, Windows Management Instrumentation, event logs, etc..

# Intuitive, task-based scripting language and support for existing scripts and command line tools..

# Designed for consistency so all tools and system data stores follow a common syntax, common naming conventions and information can be easily shared/piped between tools.

# Simplified command-based navigation of the operating system (including drives, startup files, and registry).

# Powerful object manipulation capabilities (objects can be directly manipulated or pipelined to other tools or databases).

# Designed for extensibility so that independent software vendors and enterprise developers can easily build custom tools and utilities to administer their software.

WindowsXP以上が必要らしい。

インストールされたプログラムくらいは簡単にリストできるようになっているようです。次がMSDNに掲載されていたインストールされたプログラムをリストするコードです。とても簡単ですね。

$strComputer = "."

$colItems = get-wmiobject -class "Win32_Product" -namespace "root\CIMV2" `
-computername $strComputer

foreach ($objItem in $colItems) {
      write-host "Caption: " $objItem.Caption
      write-host "Description: " $objItem.Description
      write-host "Identifying Number: " $objItem.IdentifyingNumber
      write-host "Installation Date: " $objItem.InstallDate
      write-host "Installation Date 2: " $objItem.InstallDate2
      write-host "Installation Location: " $objItem.InstallLocation
      write-host "Installation State: " $objItem.InstallState
      write-host "Name: " $objItem.Name
      write-host "Package Cache: " $objItem.PackageCache
      write-host "SKU Number: " $objItem.SKUNumber
      write-host "Vendor: " $objItem.Vendor
      write-host "Version: " $objItem.Version
      write-host
}

http://www.microsoft.com/technet/scriptcenter/scripts/msh/apps/user/usapms01.mspx

今までWindowsでバッチ処理というとWSHによりVBScript/JScriptで記述する事が普通でしたがPerl風のPowerShellもオプションに加えられた形になります。どう便利なのか今ひとつ分かっていませんがサンプルコードを見る限りは非常に簡単にWindowsの情報を取得して処理を行えるようになっている様です。

Exchange Server 2007 and System Center Operations Manager 2007 (Microsoft Operations Manager “V3”) will be built upon Windows PowerShell.

Exchange Server 2007はPowerShellを使って構築されている、と書かれています。色々複雑な処理も簡単(?)に行えるような言語になっていると思われます。Windowsでバッチ処理が必要な場合はPowerShellも良い選択肢なのかも知れないです。

カテゴリー
Security

遂にWinnyの脆弱性もOSVDBに載るようになりました

A remote overflow exists in Winny. Winny fails to perform proper bounds checking of unspecified file transfer port commands resulting in a heap-based buffer overflow. With a specially crafted request, an attacker can cause arbitrary code execution in the context of the user who executed the Winny, resulting in a loss of integrity.

EEyeのアドバイザリが英語なので載ってもおかしくないですがSPAMMERに知られると即刻悪用されそうな気がします。

カテゴリー
Computer Misc

「はじめてのPHP言語プログラミング入門」誤り募集中

Amazonの「はじめてのPHP言語プログラミング入門」に新しいコメント :)

全体の構成は、良いが、説明文の日本語がお粗末!!。
いわゆる、て、に、を、は、が、なってない。
特に、コード内での解説文は、再度、著者、自らが見直すべきと思う。
例示:抽象メソッドに関数に中身は記述できない
いたるところ、このような記述であるが、類推して読まざるを
えないため、わかりにくくなっている。
また、「入門」は、外した方が良い。

ご指摘の通り後で中途半端に書き加えたりした部分が残ってしまっている部分があると思います。本としての完成度と執筆に使える時間は比例すると思いますが、いつも締め切りギリギリに間に合わせている状況なので残ってしまいます(汗 最終の著者校正でもおかしな日本語を結構直した記憶があるので修正漏れが沢山あってもおかしくないと思います。またありがちですがコード中のコメントは見てなかったような気がします。

と言うことでおかしな日本語も大募集中です。メール、ブログへのコメント何でも結構です。見つけた方、ページ数と一緒に変な日本語を教えてください。よろしくお願いします。

自分でも変な日本語を見つけた箇所もありますが付箋が無くなってどこだったか分からない状態だったりします。「いたるところに」と書いてるので何箇所くらい見つけられたのか非常に興味があります。

抽象メソッドに関数に中身は記述できない

これは多分「関数に中身は記述できない」を最初に書き、これではおかしいので「抽象メソッドに中身は記述できない」にしたかったのだと思われます。例示の部分は後でPDFを検索してみよう。

【追記】検索しました。p140です。

abstract class AbstractClass2 {
// 抽象メソッドに関数に中身は記述できない
abstract public function AbstractMethod();

自分で読んでたら見逃しやすそうな部分です。(というより実際見逃していますけど)抽象メソッド、抽象クラスを知らない読者には??となる可能性もあるかも知れませんね。「いたるところ」全部教えてほしいです。

「てにをは」不良は結構残っている可能性は高いです。とりあえずはじめての誤植レポートなのでブログにも書いてみました。解りづらい表記・誤植も教えて頂けるとありがたいです。

正誤一覧のページ

カテゴリー
Computer Security

0DAY Firefox Remote Code Execution and Denial of Service Vulnerability

Firefox 1.5.0.2以下のiframe.contentWindow.focus()に問題がありバッファがオーバーフローするようです。これ件フォローが無いので真偽は??です。

NoScript拡張を使って不用意にJavaScriptが実行されないように注意した方が良いかも知れません。

http://www.noscript.net/whats

IEもObjectタグで騒ぎになっていますね。セミナーでは「WebクライアントとWebサーバアプリは最も危険なアプリです」と言っていますが最近は色々ありすぎですね…

カテゴリー
Computer Security

PHPの問題? BugTrackのレポート – Multiple PHP4/PHP5 vulnerabilities

このアドバイザリのメールの日付は何故か「2005/11/13」となっているのですが4/24のメールの様です。結論から言うとこのアドバイザリは通常は「無視してOK」です。

メールではメモリ消費のPoCとして以下のコードを例示しています。

i. wordwrap()
——
<?
$a = str_repeat (“A”,438013);
$b = str_repeat (“B”,951140);
wordwrap ($a,0,$b,0);
?>
——

ii. array_fill()
——
<array_fill (1,123456789,”Infigo-IS”);?>
——

iii. substr_compare()
——
&lt?substr_compare (“A”,”A”,12345678);?%gt;
——

まず1つ目ですが日本語環境でwordwrapを使っているケースは無いでしょう。更にプログラマが長大な分割文字(ラップした時の区切り文字)を指定する事はあり得ません。攻撃される事はまず無いでしょう。とは言っても典型的な整数オーバーフロー問題がある事は確かです。しかし、リスクがMediumとされていますがLowが適切でしょう。

【追記】古いwordwrapには整数オーバーフローがあったため修正されていました。まだ整数オーバーフローがあるのはおかしい、と思いPHP 5.1.2のソースを確認しました。少なくともPHP 5.1.2ではオーバーフローは発生せず整数オーバーフローが発生した場合、エラーが発生するコードになっています。と思っていたら、間違ってCVSのパッチ適用済みPHP5.1.2版のソースを見ていたようです。PHP5.1.2にも整数オーバーフローがあります。PHP 4.4.2も整数オーバーフローの影響を受けます。しかし、既に書いたとおり脆弱性自体の危険性は非常に低いです。同じようなバグが過去にレポートされていて直されていたと思うのですがまだ残っていたようです。

【追記2】substr_compare(“A”,”A”,12345678) ですがメモリ参照の問題でSegfaultします。バグですがこの手の問題は普通DoSとは言いませんね… PHP 5.1.3では修正されます。 “The start position cannot exceed initial string length.”とエラーになります。このエラーメッセージからも分かるように確保しているメモリよりも先のアドレスを参照している為、Segfaultしてしまったバグです。プログラム中に間違えて踏みそうなバグですが、この時点までこんなバグが残っていたのは色々な意味で「どうかな…」と思います。このバグ「クラッシュするよ」とレポートがあれば、PHPソース中で不具合を発生させる箇所が不明でも、バックトレース一発で原因まで特定できる単純なバグです。substr_compareはPHP5からの関数ですがzval(PHP変数のデータ構造体)には文字列(データ)の長さが保存されているのですが、これを使っていなかったのも「どうかな…」と思わされます…

2、3つ目ですがDoSが可能となるとしていますがこれに書いてあるコードでメモリを沢山消費しても仕方ないコードです。(ちょっと乱暴な例えかもしれませんが)C言語で「メモリをGB単位で確保して、確保したメモリにmemsetするとsegfaultする」と言っているような物です。言語とアプリケーションは違います。言語でメモリを大量に消費すると問題になるケースもありますが、これらは問題として取り扱うような動作ではありません。memory_limitの引っかかってしまっても当たり前でしょう。レポートした方はどうすべき、と考えているか聞いてみたいくらいです。

今までにもこの手のレポートはいくつかあったのですが、PHPをプログラミング言語として捉えていない人が多いのは驚かされます… たしか、最近もまた

function foo($arg) {
   foo($arg);
}

で「PHPがクラッシュするからおかしい」とメールがあったと思います。メモリは有限リソースなんですけどね… しかも同じ内容のメールは私が気が付いただけでも複数回見ています… 初心者向けに再帰呼び出し回数に制限を設けてもよいかも知れませんが、再帰呼び出し制限なんて必要なんでしょうか?

私が知らないだけかも知れませんが手続き型のライトウェイト言語(Ruby、Python、Perl、Tclなど)で「関数のコールスタックは1000まで」と言った感じでチェックしている(できる)言語がある??!

【追記】
気になりついでにPHP,Ruby,Python,Perlの動作も調べたので、気になる方はコメントをどうぞ。制限するか? しないか? ポリシーの問題のようですね。Perl,PHPは制限しない。Ruby,Pythonは制限する。で、最も中途半端なのはPHP ;) 詳しくはコメントをどうぞ。