アカウント名:
パスワード:
でも標準SHELLをbashにしてる環境が多すぎたり、入力データをまんまSHELLに投げてるプログラムとかテスト不足のWebServerを代表とするdaemon群が一番悪い気がするんだがなぁ…
テスト不足のWebServerを代表とするdaemon群が一番悪い気がするんだがなぁ…
今回のバグは、bashが環境変数中に仕込まれたコードを実行してしまう、というものです。そして、リクエスト中のヘッダフィールドを環境変数として渡すことは、CGIの仕様によって要求されています(RFC 3875 [ietf.org])。したがって今回の脆弱性は、Webサーバが仕様通りに動作することがテストされていたとしても、回避することはできません。
攻撃っぽいフィールドを弾いてほしいところかも知れませんが、それは汎用のWebサーバではなくWAFの役割だと思います。
bash を #!/bin/sh として起動しても今回の問題が避けられないところまでは確認しましたが、この環境変数で関数を…って仕様は素の sh にはあるのでしょうか? (問題があるかどうか以前の問題として)
# 素の sh って定義がアレだとは思いますが…
素のshと言うよりも, 現代のopen source環境ならash(多くの*BSD)/dash(DebianおよびUbuntu)と言っていいんじゃないかな.
OpenBSDやAIX, HP-UXなんかはksh系だけど, こちらはkshと明示することが多いだろうし.
問題はその他の多くのLinuxディストリが/bin/shと言いながら, 実はbashを使っていることだと思う.
Mac OS Xのディフォルトシェルがbashだってことは、あまり広まってない気がしますね。まぁ、現状Mac OS Xでは、影響少なさげなようですが。http://complexitydaemon.wordpress.com/2014/09/26/bash-os-x-dhcp-and-you/ [wordpress.com]
> リクエスト中のヘッダフィールドを環境変数として渡すことは、CGIの仕様によって要求されています
その仕様がバグだってことだな。
クライアントから送られてくるデータを無条件に受け付けるってどんだけお花畑なんだか。
クライアントから送られてくるデータに不穏当なものがないか検査する機能を提供すべきなのは、そのデータを受け付けるプログラムでしょ。
そういう機能を提供せずに他の実行ファイルを呼び出すというというのはバグというより無責任だな。
今回の場合、送られてくるデータを不適切だという解釈をbash以外のプログラム(たとえば httpd)がすることは可能なんでしょうか。正当なデータも通らなくなったりとか不都合が起きたりしない?
> クライアントから送られてくるデータに不穏当なものがないか> 検査する機能を提供すべきなのは、そのデータを受け付ける> プログラムでしょ。
そうですね、外部データをチェックするのは「CGI 仕様」ではなく「CGI プログラム」が提供するべき機能ですね。
読みましたが、これはアプリ間データ渡しに環境変数使う設計が問題。カプセル化考えたらこんなことしないよ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家
bashのBugではあるんだけど… (スコア:0)
でも標準SHELLをbashにしてる環境が多すぎたり、入力データをまんまSHELLに投げてるプログラムとか
テスト不足のWebServerを代表とするdaemon群が一番悪い気がするんだがなぁ…
Re:bashのBugではあるんだけど… (スコア:2)
今回のバグは、bashが環境変数中に仕込まれたコードを実行してしまう、というものです。そして、リクエスト中のヘッダフィールドを環境変数として渡すことは、CGIの仕様によって要求されています(RFC 3875 [ietf.org])。したがって今回の脆弱性は、Webサーバが仕様通りに動作することがテストされていたとしても、回避することはできません。
攻撃っぽいフィールドを弾いてほしいところかも知れませんが、それは汎用のWebサーバではなくWAFの役割だと思います。
Re: (スコア:0)
bash を #!/bin/sh として起動しても今回の問題が避けられないところまでは確認しましたが、
この環境変数で関数を…って仕様は素の sh にはあるのでしょうか?
(問題があるかどうか以前の問題として)
# 素の sh って定義がアレだとは思いますが…
Re:bashのBugではあるんだけど… (スコア:1)
素のshと言うよりも, 現代のopen source環境ならash(多くの*BSD)/dash(DebianおよびUbuntu)と言っていいんじゃないかな.
OpenBSDやAIX, HP-UXなんかはksh系だけど, こちらはkshと明示することが多いだろうし.
問題はその他の多くのLinuxディストリが/bin/shと言いながら, 実はbashを使っていることだと思う.
Re:bashのBugではあるんだけど… (スコア:1)
Mac OS Xのディフォルトシェルがbashだってことは、あまり広まってない気がしますね。
まぁ、現状Mac OS Xでは、影響少なさげなようですが。
http://complexitydaemon.wordpress.com/2014/09/26/bash-os-x-dhcp-and-you/ [wordpress.com]
Re: (スコア:0)
> リクエスト中のヘッダフィールドを環境変数として渡すことは、CGIの仕様によって要求されています
その仕様がバグだってことだな。
クライアントから送られてくるデータを無条件に受け付けるってどんだけ
お花畑なんだか。
Re: (スコア:0)
別にどんな文字列だろうと評価しなければ何の害にもならないし。
Re: (スコア:0)
クライアントから送られてくるデータに不穏当なものがないか
検査する機能を提供すべきなのは、そのデータを受け付ける
プログラムでしょ。
そういう機能を提供せずに他の実行ファイルを呼び出すというと
いうのはバグというより無責任だな。
Re: (スコア:0)
今回の場合、送られてくるデータを不適切だという解釈をbash以外のプログラム(たとえば httpd)がすることは可能なんでしょうか。
正当なデータも通らなくなったりとか不都合が起きたりしない?
Re: (スコア:0)
CookieとRefererは「変なデータ」なので、きちんとチェックするhttpdがもし存在すれば
400 Bad Requestを投げるようなことは可能だったかもしれません。
そんな実装のhttpdはたぶん存在しなかったと思いますが。WAFにはあったりするかも。
User-Agentは今回のを決め打ちで弾くようにするとかじゃないと無理っぽい気がします。
Re: (スコア:0)
> クライアントから送られてくるデータに不穏当なものがないか
> 検査する機能を提供すべきなのは、そのデータを受け付ける
> プログラムでしょ。
そうですね、外部データをチェックするのは「CGI 仕様」ではなく「CGI プログラム」が
提供するべき機能ですね。
Re: (スコア:0)
HTTPdが検査はまあできなくもないですが、事前情報が無い段階では「User-Agent: (){:;}; echo hoge」とかいうのは
「見かけないけど別におかしくはない」文字列に見えます。
bashが「よくわからないデータ」を「検査もせずに」「勝手に解釈」しなければ問題なかったんですよ。
Re: (スコア:0)
読みましたが、これはアプリ間データ渡しに環境変数使う設計が問題。
カプセル化考えたらこんなことしないよ。