@@ -27,8 +27,10 @@ def initialize(info = {})
2727 the machineKey, they can forge ViewState payloads that pass integrity checks.
2828 This can result in ViewState deserialization attacks, potentially leading to
2929 remote code execution (RCE) on the web server.
30+
3031 Gladinet CentreStack versions up to 16.4.10315.56368 are vulnerable (fixed in 16.4.10315.56368).
3132 Gladinet Triofox versions up to 16.4.10317.56372 are vulnerable (fixed in 16.4.10317.56372).
33+ NOTE: There are other rebranded services that might be vulnerable and can be detected by this module.
3234 } ,
3335 'Author' => [
3436 'Huntress Team' , # discovery and detailed vulnerability write up
@@ -126,7 +128,7 @@ def check
126128 'method' => 'GET' ,
127129 'uri' => normalize_uri ( target_uri . path , 'portal' , 'loginpage.aspx' )
128130 } )
129- return CheckCode ::Safe ( 'Failed to identify that Gladinet CentreStack or Triofox is running.' ) unless res &.code == 200 && res . body . include? ( 'GLADINET ' )
131+ return CheckCode ::Safe ( 'Failed to identify that Gladinet CentreStack/Triofox or similar service is running.' ) unless res &.code == 200 && res . body . include? ( 'id="__VIEWSTATEGENERATOR" value="3FE2630A" ' )
130132
131133 if res . body . include? ( 'CentreStack' )
132134 check_app = 'CentreStack'
@@ -136,18 +138,21 @@ def check
136138 check_app = 'Unknown'
137139 end
138140
139- build = res . body . match ( /\( Build.*\) / )
140- unless build . nil? || check_app == 'Unknown'
141- version = Rex ::Version . new ( build [ 0 ] . split ( ' ' ) [ 1 ] . chomp ( ')' ) )
141+ build = res . body . match ( /\( Build\s *.*\) / )
142+ unless build . nil?
143+ version = build [ 0 ] . gsub ( /[[:space:]]/ , '' ) . split ( 'Build' ) [ 1 ] . chomp ( ')' )
144+ rex_version = Rex ::Version . new ( version )
142145 if check_app == 'CentreStack'
143- return CheckCode ::Appears ( "#{ check_app } #{ build } " ) if version < Rex ::Version . new ( '16.4.10315.56368' )
146+ return CheckCode ::Appears ( "Service #{ check_app } (Build #{ version } ) " ) if rex_version < Rex ::Version . new ( '16.4.10315.56368' )
144147 elsif check_app == 'Triofox'
145- return CheckCode ::Appears ( "#{ check_app } #{ build } " ) if version < Rex ::Version . new ( '16.4.10317.56372' )
148+ return CheckCode ::Appears ( "Service #{ check_app } (Build #{ version } )" ) if rex_version < Rex ::Version . new ( '16.4.10317.56372' )
149+ elsif check_app == 'Unknown'
150+ return CheckCode ::Detected ( "Service #{ check_app } (Build #{ version } )" ) if rex_version < Rex ::Version . new ( '16.4.10317.56372' )
146151 end
147- return CheckCode ::Safe ( "#{ check_app } #{ build } " )
152+ return CheckCode ::Safe ( "Service #{ check_app } (Build #{ version } ) " )
148153 end
149154
150- CheckCode ::Unknown ( 'No CentreStack or Triofox application and/or build version detected.' )
155+ CheckCode ::Detected ( "Service #{ check_app } (Build not detected)" )
151156 end
152157
153158 def exploit
0 commit comments