bashの脆弱性CVE-2014-7186, CVE-2014-7187について
CVE-2014-6271やCVE-2014-7169と比べると影響は小さいですが、本家のGNUからは2014/09/30時点においてもパッチはリリースされていません。CVE-2014-6271の対処を済ませていれば発生条件を満たすスクリプトを書かない限り再現せず、その発生条件は通常の使用方法では満さないものであることから、GNUとしてもパッチのリリースを急いでいなかったのかもしれません。
CVE-2014-7186
下記のテストケースはCVE-2014-7186の不具合によりコア・ダンプしたり、フレーム・ポインターが書き換えられたりする可能性があります。
bash -c "true `yes '<<EOF' | head -20 | xargs echo`"
これはparse.yの中でリダイレクトの情報を積み上げるスタックとして使用している配列のサイズが10にハード・コーディングされていることが原因です。
static REDIRECT *redir_stack[10];
そのため、11以上ネストした場合にコア・ダンプしたり、フレーム・ポインターが書き換えられたりする可能性があります。
発生条件
ヒア・ドキュメントを11以上ネストして使用している場合に発生する可能性があります。
CVE-2014-7187
下記のテストケースはCVE-2014-7187の不具合によりエラー出力します。場合によってはコア・ダンプしたり、フレーム・ポインターが書き換えられたりする可能性があります。
bash -c "`yes 'for i in; do' | head -200; echo ':'; yes 'done' | head -200 `"
これも不具合箇所はparse.yです。
/* The line number in a script where the word in a `case WORD', `select WORD' or `for WORD' begins. This is a nested command maximum, since the array index is decremented after a case, select, or for command is parsed. */ #define MAX_CASE_NEST 128 static int word_lineno[MAX_CASE_NEST]; static int word_top = -1; ........ case FOR: if (word_top < MAX_CASE_NEST) word_top++; word_lineno[word_top] = line_number; break;
word_topの値が127の時に問題箇所を通過すると、word_top++で128になるため存在しない129番目の要素word_lineno[128]にアクセスしてします。その結果、コア・ダンプしたり、フレーム・ポインターが書き換えられたりする可能性があります。
発生条件
for、case、selectを128以上ネストしている場合に発生する可能性があります。
参考情報
2014/10/02追記
2014/10/02にCVE-2014-7186とCVE-2014-7187の両方をFixするパッチがリリースされました。 (bash43-028、他)