月: 2006年4月

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モードを信頼するのと変わりません。

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

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も良い選択肢なのかも知れないです。

遂に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に知られると即刻悪用されそうな気がします。

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

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

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

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

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

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

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

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

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

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

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

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

正誤一覧のページ

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サーバアプリは最も危険なアプリです」と言っていますが最近は色々ありすぎですね…

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 ;) 詳しくはコメントをどうぞ。

Windows Vista のUser Acount Protection(UAP)機能

The bad news, then, is that UAP is a sad, sad joke. It’s the most annoying feature that Microsoft has ever added to any software product, and yes, that includes that ridiculous Clippy character from older Office versions. The problem with UAP is that it throws up an unbelievable number of warning dialogs for even the simplest of tasks. That these dialogs pop up repeatedly for the same action would be comical if it weren’t so amazingly frustrating. It would be hilarious if it weren’t going to affect hundreds of millions of people in a few short months. It is, in fact, almost criminal in its insidiousness.

と非常に使いづらい、と書いてあります。

このUAPと言う機能、MacOSXやLinuxユーザなら知っている管理者権限の必要な操作を行う場合にクレデンシャル(管理者ユーザのパスワード)を聞く機能です。個人的にはVistaには非常に期待しているのでこんな部分で使い物にならないようにされては困ります…

Zend Framework 0.1.3

4/18にZend Frameworkのリリースがアップデートされていますね。

詳しくはリンク先のチェンジログを見ていただくとして

– Zend_HttpClient moved to Zend_Http_Client (Mike)

のように互換性に関連する修正や機能追加もありますが、あまり大きな変更や追加はなく基本的にはバグフィックスリリースになっています。

OpenDocumentがISO標準に

先頃発足したOpenDocument Format Alliance(ODF Alliance)は、推進中のファイルフォーマットが5月にInternational Organization for Standardization(ISO:国際標準化機構)の承認を得られるだろうとの自信を示している。

OpenDocumentがISO標準になると各機関の調達基準になるので良い事ですね。独自拡張を許さない調達基準であれば相互互換性も上がって便利です。

【追記】OpenDocumentはOpenOfficeの標準の保存形式です。一太郎も準拠していたと思います。

Thunderbirdは英語版が軽い?!

ここにも書いてあるように日本語版Thunderbirdはダウンロードしづらかったので英語版をダウンロードしてインストールしました。

以前からThunderbirdはメモリ消費量が多く、しかも重い(重いのはメモリが768MBのノートPCではスワップするからですが)ので困っていたのですが英語版のメモリ消費量は随分少ないような気がします。そして、随分軽くなったように思えます。

しばらく使ってみないとどちらとも言えないですが、
気のせい?マイナーバージョンアップのせい?

英語版を試してみたい方、日本語版をインストールしたまま英語版をインストールしも大丈夫なようです。ただし、インストール後にデフォルトの文字エンコーディングを設定しないと面倒です。

Tools->Display->Fonts の

Output Encoding
Input Encoding

を両方ともISO-2022-JPに設定すると日本語版とあまり変わらず使えると思います。(もちろんメニューなどが英語で表示される事を除けば)

セキュリティの脅威を知る レベル 100 シリーズ

まだ全部見ていませんが

【セキュリティの脅威を知る レベル 100 シリーズ】
皆様からご要望の多かった開発者が考慮すべきセキュリティの問題点を1つ1つを解説した
全10回シリーズのオンラインセミナーの基礎コースで、毎週公開予定です。
開発を行う上でセキュリティの脅威やその対処について基本から学びたい技術者の方々を対象に
セキュリティの脅威の原因と被害また、その対応方法を簡潔にご紹介いたします。
本オンラインセミナーの資料(解説付き)もダウンロードいただけます。

第1回: 開発者のセキュリティ
開発者のセキュリティ対策として、発生したときの問題点や、
セキュリティ確保のプロセスなど基本的な要素を解説いたします。
>> >> http://go.microsoft.com/?linkid=4815647

とメールが来ていました。

開発者のセキュリティ
SQLインジェクション
クロスサイトスクリプティング

の順番でセキュリティ対策を解説していくそうです。

参照にはIE必須、メディアプレイヤーが必用なようです。

超極める!PHP

超極める!PHP

ムック形式本の「極めるPHP」の続き、「超極める!PHP」に何本か記事を書かせていただきました。こんな表紙になるそうです。

Amazonの著者の順序は書いたページ数が多い順、と聞いていたので私が一番沢山書いたのですね。40~50ページの間だったと思います。

オープンセミナー2006@四国 – 4月22日(土曜日)

詳しくはリンク先を見ていただくとして、4月22日(土曜日)に「オープンセミナー2006@四国」がサンポート高松 eとぴあ香川にて13時より開催されます。

参加費は無料です。できる限り多くの方にお越し頂ければ幸いです。

「オープンセミナー2006@四国」 開催のお知らせ

日本PostgreSQLユーザ会 四国支部

「オープンセミナー2006@四国」は2003年、2004年とPostgreSQLユーザ会主催のセミナーとして開催された 「PostgreSQLセミナー」の流れをくむセミナーです。

PostgreSQLとは無料かつ自由に利用可能なリレーショナルデータベースシステムです。日本PostgreSQLユー ザ会(以下JPUG)2006年3月よりNPO法人となり装いも新たに日本におけるPostgreSQLの普及と発展を主な目 的とし以下の活動を行っています。

* ・PostgreSQLの研究開発および普及促進
* ・PostgreSQLに関する情報の公開  
* ・会員相互および外部との技術的・人間的交流

これまでのPostgreSQLセミナーではPostgreSQLの話題が中心でした。本セミナーでは瀬戸内Linuxユーザ 会(STLUG)から2名の講師、IPAから1名、JPUGから2名の多彩な講師によるオープンソースとインター ネット関連のセミナーとして企画いたしました。インターネットの中核であるIXの内側、最新のOSS動向、 セキュリティ、PostgreSQLを対象のセミナーです。

セミナー開催のご案内が直前になってしまいましたが、中国・四国地方では数少ないオープンソース/イン ターネット/セキュリティのセミナーです。ご都合の良い方は是非ご参加ください。スタッフ一同お待ちし ています。

当日夜に高松駅近辺にて懇親会も予定しています。懇親会に参加をご希望の方は問合せ先にEメールでご連 絡下さい。