DLR AST (0)
荒井さんの blog を読んでいると,行かないつもりだった TechEd 2007 Yokohama に行きたくなってくる今日この頃.
Orcas を入れなくても .NET AST で遊べるのはおもしろいですね.テスト用の AST の作成ですが,私は F# を利用したものをちょこちょこ作っています.公開はもうちょっと先になりそうですが.
以下はそのプロトタイプとして作った C# 版のテストコードです.Microsoft.Scripting.dll を参照に加えてください.
using System; using Microsoft.Scripting; using Microsoft.Scripting.Ast; using System.Reflection.Emit; namespace ASTTest { delegate T Func<T>(); static class Program { static void Main(string[] args) { CodeBlock cb = Ast.CodeBlock("MyFunc", typeof(int)); cb.Body = Ast.Return( Ast.Condition( Ast.True(), Ast.Constant(1), Ast.Constant(2) ) ); Func<int> func = TreeCompiler.CompileBlock<Func<int>>(cb); Console.WriteLine("act() => {0}", func()); } } }
評価しているのは以下のような AST です.
- If
- True
- 1
- 2
この AST が Lightweight Code Gen (LCG) を経由して動的メソッドに展開されています.通常,LCG では IL 出力を自分で書かなくてはなりませんが,その部分は DLR の AST.Emit メソッドが代わりにやってくれています.
更新履歴
- 2008年3月2日
- IronPython 2.0 A8 用にコードを修正しました.
D3DX とセキュリティアップデート
Microsoft DirectXに、任意のコマンド実行が可能になる脆弱性が報告され、7月19日、セキュリティ各社がアドバイザリーを公開した。最新バージョンでは問題は修正済みだという。
Secuniaのアドバイザリーによると、脆弱性は、RLE(Run Length Encoding)で圧縮されたTarga(TGA)形式の画像ファイルを処理する際の入力認証エラーに起因する。悪用されると、細工を施したTarga画像を使ってヒープベースのバッファオーバーフローを誘発し、システムを制御される恐れがある。
同社の深刻度評価は5段階で上から2番目の「Highly critical」となっている。
影響を受けるのはMicrosoft DirectX 7.x/8.x/9.xとMicrosoft DirectX SDK。
なお、iDefenseによると、Microsoftは2006年10月のSDKとEnd-User Runtimeリリースでこの問題に対処済み。2007年6月のリリースにはこの脆弱性が存在しないことが確認したという。
おそらく D3DX に問題があるのだと思うのですが,問題のある d3dx9_XX.dll の範囲と更新状況については 1 分ほど調べた範囲内ではよく分かりませんでした.時間がとれたらちゃんと調べてみます.
問題は,悪意のあるファイルをどうやって D3DX の関数に読み込ませるかですが,例えば DirectX SDK に同梱されるサムネイル表示シェル拡張も影響を受けるので,さしあたってはそれが一番影響が大きそうでしょうか.まあ最近の SDK を入れている人は大丈夫と.後は人気ゲームの mod なんかもピンポイントに狙われると危ないかもしれません.Joost の用に DirectX をゲーム以外に利用しているケースも注意が必要ですかね.
あと何より,静的リンク時代の D3DX も今回の影響を受けそうな気がしますが,さてどうやって対策したものかという感じですなぁ.