3

TCLインタープリターが組み込まれているシステムでセキュリティテストを行っています。システムはインターネット(HTTP)から入力を受け取り、それを解析して、カスタマイズ可能なTCLスクリプトに渡します。ファジングテスト(HTTPヘッダーでバイナリガベージを送信する)中に、ログに次のエラーが表示されることに気付きました。

TCLエラー:「foreachheader [XXXXX] {}」の実行中に、要素を引用符で囲み、スペースではなく「{}x」を続けてください

また

TCLエラー:「foreachheader [XXXXX] {}」の実行中に、リスト内のオープンクォートが一致しません

ここで、XXXXXは、システムによって解析されたHTTPヘッダーの配列を返すコマンドです。実際のコマンドをわかりにくくして申し訳ありませんが、ベンダーに問題について通知する前に、あまり多くの詳細を公開したくないことをご理解いただければ幸いです(問題であることが判明した場合)。

エラーを生成するTCLコードは非常に単純です。

foreachヘッダー[XXXXX]{}

私の知る限り、HTTP解析はTCLの外部で行われ、解析された値はカスタムコマンド(おそらくTCL拡張機能として実装されている)を介してTCLにアクセスできるようになります。

だから私の質問は:

  1. これらのエラーは、不十分なユーザー入力検証など、システムのセキュリティ問題の明らかな兆候ですか?

  2. はいの場合、この条件を悪用して、システムに特別に細工された要求、一種のコードインジェクション攻撃を送信することにより、任意のTCLステートメントを実行できますか?

  3. 「安全なTCLコーディング慣行」文書はありますか?何も見つかりませんでした。

4

1 に答える 1

7

あなたはcomp.lang.tclでこれを尋ねましたが、私は次のように答えました:

1) これらのエラーは、ユーザー入力の検証が不十分であるなど、システムのセキュリティ上の問題の明らかな兆候ですか?

これらは、解析コードの問題を示しています。コードは、ヘッダーが整形式の Tcl リストであると想定できると想定していると思いますが、これは完全に安全ではないことがわかりました。サニタイズとは、次のようなものを使用することです。

set listOfWords [regexp -all -inline {\S+} $someString] 

結果として得られる単語のコレクションは、任意の入力文字列に対して整形式のリストであることが保証されます。

2) 「はい」の場合、この条件を悪用して、システムに特別に細工されたリクエスト (一種の http://en.wikipedia.org/wiki/Code_injection攻撃) を送信することにより、任意の TCL ステートメントを実行できますか?

そのリストをコードとして扱わない限り、おそらくそうではありません。

3) 「セキュア TCL コーディング プラクティス」ドキュメントはありますか? 信頼できないデータを安全に処理する方法に関する他の情報源はありますか?

最も簡単な方法は、セーフ インタープリターで解析を行うことです。

interp create -safe parsingInterp 
parsingInterp eval { make the procedures } 
parsingInterp eval [list doTheParse $stringToParse] 

listまた、構築されたリスト (たとえば、やその他の多くのコマンドからのリスト) が eval-safeであることも保証することに注意してください 。あれは:

eval [list $a $b $c] 

は次とまったく同じです:

$a $b $c 

これは、それらの変数に何があっても当てはまります。

于 2011-04-23T08:37:33.413 に答える