Skip to content

Commit ae5f0e8

Browse files
committed
guard Rex::Version.new against crashes on local modules
1 parent 897f8c8 commit ae5f0e8

File tree

4 files changed

+33
-15
lines changed

4 files changed

+33
-15
lines changed

modules/exploits/example_linux_priv_esc.rb

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,24 @@ def base_dir
9797

9898
def check
9999
# Check the kernel version to see if its in a vulnerable range
100+
# we guard this because some distros have funky kernel versions https://github.com/rapid7/metasploit-framework/issues/19812
100101
release = kernel_release
101-
if Rex::Version.new(release.split('-').first) > Rex::Version.new('4.14.11') ||
102-
Rex::Version.new(release.split('-').first) < Rex::Version.new('4.0')
103-
return CheckCode::Safe("Kernel version #{release} is not vulnerable")
102+
begin
103+
if Rex::Version.new(release.split('-').first) > Rex::Version.new('4.14.11') ||
104+
Rex::Version.new(release.split('-').first) < Rex::Version.new('4.0')
105+
return CheckCode::Safe("Kernel version #{release} is not vulnerable")
106+
end
107+
rescue ArgumentError => e
108+
return CheckCode::Safe("Error determining or processing kernel release (#{release}) into known format: #{e}")
104109
end
105110
vprint_good "Kernel version #{release} appears to be vulnerable"
106111

107112
# Check the app is installed and the version, debian based example
108113
package = cmd_exec('dpkg -l example | grep \'^ii\'')
109114
if package&.include?('1:2015.3.14AR.1-1build1')
110-
CheckCode::Appears("Vulnerable app version #{package} detected")
115+
return CheckCode::Appears("Vulnerable app version #{package} detected")
111116
end
117+
112118
CheckCode::Safe("app #{package} is not vulnerable")
113119
end
114120

modules/exploits/linux/local/docker_cgroup_escape.rb

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,17 @@ def check
8383
print_status('Unable to determine host OS, this check method is unlikely to be accurate if the host isn\'t Ubuntu')
8484
release = kernel_release
8585
# https://people.canonical.com/~ubuntu-security/cve/2022/CVE-2022-0492
86-
release_short = Rex::Version.new(release.split('-').first)
87-
release_long = Rex::Version.new(release.split('-')[0..1].join('-'))
88-
if release_short >= Rex::Version.new('5.13.0') && release_long < Rex::Version.new('5.13.0-37.42') || # Ubuntu 21.10
89-
release_short >= Rex::Version.new('5.4.0') && release_long < Rex::Version.new('5.4.0-105.119') || # Ubuntu 20.04 LTS
90-
release_short >= Rex::Version.new('4.15.0') && release_long < Rex::Version.new('4.15.0-173.182') || # Ubuntu 18.04 LTS
91-
release_short >= Rex::Version.new('4.4.0') && release_long < Rex::Version.new('4.4.0-222.255') # Ubuntu 16.04 ESM
92-
return CheckCode::Vulnerable("IF host OS is Ubuntu, kernel version #{release} is vulnerable")
86+
begin
87+
release_short = Rex::Version.new(release.split('-').first)
88+
release_long = Rex::Version.new(release.split('-')[0..1].join('-'))
89+
if release_short >= Rex::Version.new('5.13.0') && release_long < Rex::Version.new('5.13.0-37.42') || # Ubuntu 21.10
90+
release_short >= Rex::Version.new('5.4.0') && release_long < Rex::Version.new('5.4.0-105.119') || # Ubuntu 20.04 LTS
91+
release_short >= Rex::Version.new('4.15.0') && release_long < Rex::Version.new('4.15.0-173.182') || # Ubuntu 18.04 LTS
92+
release_short >= Rex::Version.new('4.4.0') && release_long < Rex::Version.new('4.4.0-222.255') # Ubuntu 16.04 ESM
93+
return CheckCode::Vulnerable("IF host OS is Ubuntu, kernel version #{release} is vulnerable")
94+
end
95+
rescue ArgumentError => e
96+
return CheckCode::Safe("Error determining or processing kernel release (#{release}) into known format: #{e}")
9397
end
9498

9599
CheckCode::Safe("Kernel version #{release} may not be vulnerable depending on the host OS")

modules/exploits/linux/local/tomcat_ubuntu_log_init_priv_esc.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,11 @@ def check
9393
# 0 is ii for installed
9494
# 1 is tomcat# for package name
9595
# 2 is version number
96-
package = Rex::Version.new(package[2])
96+
begin
97+
package = Rex::Version.new(package[2])
98+
rescue ArgumentError => e
99+
return CheckCode::Safe("Error processing Tomcat version (#{package[2]}) into known format: #{e}")
100+
end
97101

98102
if (package.to_s.start_with?('8') && package < Rex::Version.new('8.0.32-1ubuntu1.2')) ||
99103
(package.to_s.start_with?('7') && package < Rex::Version.new('7.0.52-1ubuntu0.7')) ||

modules/exploits/linux/local/vmwgfx_fd_priv_esc.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,13 @@ def base_dir
7474
def check
7575
# Check the kernel version to see if its in a vulnerable range
7676
release = kernel_release
77-
unless Rex::Version.new(release) > Rex::Version.new('4.14-rc1') &&
78-
Rex::Version.new(release) < Rex::Version.new('5.17-rc1')
79-
return CheckCode::Safe("Kernel version #{release} is not vulnerable")
77+
begin
78+
unless Rex::Version.new(release) > Rex::Version.new('4.14-rc1') &&
79+
Rex::Version.new(release) < Rex::Version.new('5.17-rc1')
80+
return CheckCode::Safe("Kernel version #{release} is not vulnerable")
81+
end
82+
rescue ArgumentError => e
83+
return CheckCode::Safe("Error determining or processing kernel release (#{release}) into known format: #{e}")
8084
end
8185

8286
vprint_good "Kernel version #{release} appears to be vulnerable"

0 commit comments

Comments
 (0)