JavaのexecメソッドでOSコマンドインジェクション脆弱性は入るのか

とある記事の検証をしていて、Javaのexecメソッドで記述されたOSコマンドインジェクションのサンプルに出会いました。しかし、このサンプルは現在では脆弱性がないようです。これについて、何人かの方からコメントでご教授いただきました。ありがとうございました。
4
徳丸 浩 @ockeghem

OSコマンドインジェクションのリスト2は、execメソッドがシェルを経由しないため脆弱でないようだけど、10年前の記事なので、仕様が変わったのだろうか @IT:Webアプリケーションに潜むセキュリティホール(2) - Page2 http://t.co/37Y8bLzJ

2013-02-18 10:57:27
徳丸 浩 @ockeghem

いけてない記事をごまかすため編集部が過去の良記事を引用しているが、記事が古すぎでリスト2はもはや脆弱性の例になっていない模様 Webアプリにおける11の脆弱性の常識と対策 (2/4) - @IT http://t.co/DvHQIZAS

2013-02-18 10:59:58
徳丸 浩 @ockeghem

いけてない記事を検証する→国分さんの記事を引用してごまかしている→あれ、Javaのexecはシェルを経由していないはず→WindowsとUbuntuで検証→やはりシェルを経由していない→JREの実装が変わったのか? (国分さんが検証せずに記事を書いたとは考えにくい)←イマココ

2013-02-18 11:03:11
徳丸 浩 @ockeghem

Javaで Process proc = Runtime.getRuntime().exec("echo hello ; cat /etc/passwd"); を実行すると、「hello ; cat /etc/passwd」と表示され、OSコマンドインジェクションにはならない

2013-02-18 11:06:00
Kanatoko @kinyuka

1.4.2_17で検証しましたが、その通りですね RT @ockeghem: Javaで(略)exec("echo hello ; cat /etc/passwd"); を実行すると、「hello ; cat /etc/passwd」と表

2013-02-18 11:36:40
一ノ瀬 いろは @ichinose_iroha

@ockeghem Runtime.exec() の時点で SHELL を介することは内ので大抵の場合問題にならないが、“SHELL を明示的に呼び出している場合” 「引数インジェクション攻撃を受ける可能性はある」と言う事のようですね http://t.co/WDbd6euU

2013-02-18 11:49:44
一ノ瀬 いろは @ichinose_iroha

@ockeghem @b_wind ただ、あくまで Runtime.exec の時点ではパーサーは SHELL では無く StringTokenizer オブジェクト。 国分さんの例は成立しないという点は変わりません http://t.co/katxFT0L

2013-02-18 11:54:35
masa141421356 @masa141421356

@ockeghem かなり昔の情報ですが、Java FAQにワイルドカード展開したいならシェルを明示して通す必要があるという話がありますね http://t.co/nQKUX1nz

2013-02-18 12:17:47
Takahiro Kambe @_taca_

@ockeghem 「UNIX系OSコマンドでの特殊文字」という表3の題からして違和感ありまくる上に、EOTを取り上げてる謎。説明がファイルの終わりとあるけどDOSの^Zじゃあるまいし、と思ったところで^Dと気づきましたが、やはり変な文字一覧。

2013-02-18 12:26:59
Takahiro Kambe @_taca_

@ockeghem @it 少なくとも、C言語のsystem()辺りはともかく。exec()って正確には存在しないし、わざわざシェルを介させない限り「特殊文字」が解釈されることないし。プログラム書いた人の記事とは思えない。

2013-02-18 12:30:46
徳丸 浩 @ockeghem

@b_wind ありがとうございます。JPCERT/CCの記事は私も読みました。SHELLを明示的に呼び出す方法は、わざとらしいというよりは、現場ではついやってしまいそうだなと思いました

2013-02-18 15:34:33
徳丸 浩 @ockeghem

@b_wind そうですよね。うーん、という感じです

2013-02-18 15:34:47
一ノ瀬 いろは @ichinose_iroha

@ockeghem 念のため、と思い現状確認出来る一番古い ver 1.3.1 (2001年) と最新の 7 のドキュメントを比較してみましたが、該当部分は全く変わっていませんでした メソッド名から多言語の処理と同一と勘違いしてしまったのか… さすがにこれ以上は何とも言えませんね

2013-02-18 15:42:05
徳丸 浩 @ockeghem

@_taca_ まぁ、10年前の記事ですので、OSコマンドインジェクションとシェルの関係とか、よく分かっていない人が多かったのだろうと思います。今でも多い…か。とくにWeb関係者は

2013-02-18 15:42:43
徳丸 浩 @ockeghem

@b_wind わざわざありがとうございます。であれば、著者のミスという可能性もありますね。最初シェル経由のサンプルを書いていたのに、後から抜いてしまったとか…

2013-02-18 15:44:01
徳丸 浩 @ockeghem

@kinyuka ありがとうございます。やはり、そうですか…

2013-02-18 16:03:43
徳丸 浩 @ockeghem

@masa141421356 ありがとうございます。やはり、デフォルトだとシェル経由しないということですね

2013-02-18 16:04:27