JavaのexecメソッドでOSコマンドインジェクション脆弱性は入るのか
OSコマンドインジェクションのリスト2は、execメソッドがシェルを経由しないため脆弱でないようだけど、10年前の記事なので、仕様が変わったのだろうか @IT:Webアプリケーションに潜むセキュリティホール(2) - Page2 http://t.co/37Y8bLzJ
2013-02-18 10:57:27いけてない記事をごまかすため編集部が過去の良記事を引用しているが、記事が古すぎでリスト2はもはや脆弱性の例になっていない模様 Webアプリにおける11の脆弱性の常識と対策 (2/4) - @IT http://t.co/DvHQIZAS
2013-02-18 10:59:58いけてない記事を検証する→国分さんの記事を引用してごまかしている→あれ、Javaのexecはシェルを経由していないはず→WindowsとUbuntuで検証→やはりシェルを経由していない→JREの実装が変わったのか? (国分さんが検証せずに記事を書いたとは考えにくい)←イマココ
2013-02-18 11:03:11Javaで Process proc = Runtime.getRuntime().exec("echo hello ; cat /etc/passwd"); を実行すると、「hello ; cat /etc/passwd」と表示され、OSコマンドインジェクションにはならない
2013-02-18 11:06:001.4.2_17で検証しましたが、その通りですね RT @ockeghem: Javaで(略)exec("echo hello ; cat /etc/passwd"); を実行すると、「hello ; cat /etc/passwd」と表
2013-02-18 11:36:40@ockeghem Runtime.exec() の時点で SHELL を介することは内ので大抵の場合問題にならないが、“SHELL を明示的に呼び出している場合” 「引数インジェクション攻撃を受ける可能性はある」と言う事のようですね http://t.co/WDbd6euU
2013-02-18 11:49:44@ockeghem @b_wind ただ、あくまで Runtime.exec の時点ではパーサーは SHELL では無く StringTokenizer オブジェクト。 国分さんの例は成立しないという点は変わりません http://t.co/katxFT0L
2013-02-18 11:54:35@ockeghem かなり昔の情報ですが、Java FAQにワイルドカード展開したいならシェルを明示して通す必要があるという話がありますね http://t.co/nQKUX1nz
2013-02-18 12:17:47@ockeghem 「UNIX系OSコマンドでの特殊文字」という表3の題からして違和感ありまくる上に、EOTを取り上げてる謎。説明がファイルの終わりとあるけどDOSの^Zじゃあるまいし、と思ったところで^Dと気づきましたが、やはり変な文字一覧。
2013-02-18 12:26:59@ockeghem @it 少なくとも、C言語のsystem()辺りはともかく。exec()って正確には存在しないし、わざわざシェルを介させない限り「特殊文字」が解釈されることないし。プログラム書いた人の記事とは思えない。
2013-02-18 12:30:46@b_wind ありがとうございます。JPCERT/CCの記事は私も読みました。SHELLを明示的に呼び出す方法は、わざとらしいというよりは、現場ではついやってしまいそうだなと思いました
2013-02-18 15:34:33@ockeghem 念のため、と思い現状確認出来る一番古い ver 1.3.1 (2001年) と最新の 7 のドキュメントを比較してみましたが、該当部分は全く変わっていませんでした メソッド名から多言語の処理と同一と勘違いしてしまったのか… さすがにこれ以上は何とも言えませんね
2013-02-18 15:42:05@_taca_ まぁ、10年前の記事ですので、OSコマンドインジェクションとシェルの関係とか、よく分かっていない人が多かったのだろうと思います。今でも多い…か。とくにWeb関係者は
2013-02-18 15:42:43@b_wind わざわざありがとうございます。であれば、著者のミスという可能性もありますね。最初シェル経由のサンプルを書いていたのに、後から抜いてしまったとか…
2013-02-18 15:44:01