Skip to content

Commit 2baabfa

Browse files
committed
update check method to detected other vulnerable services
1 parent 908094d commit 2baabfa

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

modules/exploits/windows/http/gladinet_viewstate_deserialization_cve_2025_30406.rb

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)