diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/apache_druid_rce.pp b/modules/vulnerabilities/unix/http/apache_druid_rce/apache_druid_rce.pp new file mode 100644 index 000000000..ed70494a9 --- /dev/null +++ b/modules/vulnerabilities/unix/http/apache_druid_rce/apache_druid_rce.pp @@ -0,0 +1,9 @@ +# Apache Druid 0.20 - RCE +# https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/http/apache_druid_js_rce.rb +# https://github.com/rapid7/metasploit-framework/blob/master/documentation/modules/exploit/linux/http/apache_druid_js_rce.md +contain apache_druid_rce::install +contain apache_druid_rce::configure +contain apache_druid_rce::service +Class['apache_druid_rce::install'] +-> Class['apache_druid_rce::configure'] +-> Class['apache_druid_rce::service'] diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partaa b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partaa new file mode 100644 index 000000000..8f64cef7e Binary files /dev/null and b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partaa differ diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partab b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partab new file mode 100644 index 000000000..e63e6b83a Binary files /dev/null and b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partab differ diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partac b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partac new file mode 100644 index 000000000..a64844067 Binary files /dev/null and b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partac differ diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partad b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partad new file mode 100644 index 000000000..c9ad0e6d7 Binary files /dev/null and b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partad differ diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partae b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partae new file mode 100644 index 000000000..1b4038c4d Binary files /dev/null and b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partae differ diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partaf b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partaf new file mode 100644 index 000000000..0f0ce6dd8 Binary files /dev/null and b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partaf differ diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partag b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partag new file mode 100644 index 000000000..d85ebe031 Binary files /dev/null and b/modules/vulnerabilities/unix/http/apache_druid_rce/files/apache_druid_rce.tar.gz.partag differ diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/files/stretch.list b/modules/vulnerabilities/unix/http/apache_druid_rce/files/stretch.list new file mode 100644 index 000000000..927ab7e90 --- /dev/null +++ b/modules/vulnerabilities/unix/http/apache_druid_rce/files/stretch.list @@ -0,0 +1,2 @@ +deb http://deb.debian.org/debian/ stretch main +deb-src http://deb.debian.org/debian stretch main \ No newline at end of file diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/manifests/configure.pp b/modules/vulnerabilities/unix/http/apache_druid_rce/manifests/configure.pp new file mode 100644 index 000000000..ae2faef0c --- /dev/null +++ b/modules/vulnerabilities/unix/http/apache_druid_rce/manifests/configure.pp @@ -0,0 +1,20 @@ +# Class: apache_druid_rce::configure +# Configuration for apache druid +# +class apache_druid_rce::configure { + $secgen_parameters = secgen_functions::get_parameters($::base64_inputs_file) + $user = $secgen_parameters['leaked_username'][0] + $leaked_filenames = $secgen_parameters['leaked_filenames'] + $strings_to_leak = $secgen_parameters['strings_to_leak'] + + Exec { path => [ '/bin/', '/sbin/' , '/usr/bin/', '/usr/sbin/' ] } + + ::secgen_functions::leak_files { 'druid-flag-leak': + storage_directory => "/home/${user}", + leaked_filenames => $leaked_filenames, + strings_to_leak => $strings_to_leak, + owner => $user, + mode => '0750', + leaked_from => 'apache_druid_rce', + } +} diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/manifests/install.pp b/modules/vulnerabilities/unix/http/apache_druid_rce/manifests/install.pp new file mode 100644 index 000000000..08117f333 --- /dev/null +++ b/modules/vulnerabilities/unix/http/apache_druid_rce/manifests/install.pp @@ -0,0 +1,74 @@ +# Class: apache_druid_rce::install +# Install process for apache druid RCE +# https://archive.apache.org/dist/druid/0.20.0/ +class apache_druid_rce::install { + Exec { path => [ '/bin/', '/sbin/' , '/usr/bin/', '/usr/sbin/' ] } + $modulename = 'apache_druid_rce' + + $secgen_parameters = secgen_functions::get_parameters($::base64_inputs_file) + $port = $secgen_parameters['port'][0] + $user = $secgen_parameters['leaked_username'][0] + $user_home = "/home/${user}" + + # Create user + user { $user: + ensure => present, + home => $user_home, + managehome => true, + } + + # This generates a repo file so we can get packages from debian stretch + file { '/etc/apt/sources.list.d/stretch.list': + ensure => file, + source => "puppet:///modules/${modulename}/stretch.list" + } + -> exec { 'update-packages': + command => 'apt update' + } + -> package { 'install-jdk8': + ensure => 'installed', + name => 'openjdk-8-jdk', + } + # openjdk8 is required. Since we are buster, we need the repos within stretch for this + #ensure_packages(['openjdk-8-jdk'], { ensure => 'installed'}) + + $releasename = "${modulename}.tar.gz" + $currentsource = ["${releasename}.partaa", + "${releasename}.partab", + "${releasename}.partac", + "${releasename}.partad", + "${releasename}.partae", + "${releasename}.partaf", + "${releasename}.partag"] + + $currentsource.each |String $fsource| { + file { "/tmp/${fsource}": + ensure => file, + source => "puppet:///modules/${modulename}/${fsource}", + } + } + + exec { 'rebuild-archive': + cwd => '/tmp/', + command => "cat ${releasename}.parta* > ${releasename}", + } + -> exec { 'unpack-druid': + cwd => '/tmp', + command => "tar -xf ${releasename}", + creates => '/tmp/apache-druid-0.20.0', + } + -> exec { 'move-druid': + cwd => '/tmp', + command => 'mv apache-druid-0.20.0 /usr/local/apache-druid/', + creates => '/usr/local/apache-druid' + } + -> exec { 'chmod-druid': + command => 'chmod -R 777 /usr/local/apache-druid/bin/', + } + -> exec { 'chown-druid': + command => "chown -R ${user}:${user} /usr/local/apache-druid/", + } + -> exec { 'change-port': + command => "sed -i 's/8888/${port}/' /usr/local/apache-druid/conf/druid/single-server/nano-quickstart/router/runtime.properties", + } +} diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/manifests/service.pp b/modules/vulnerabilities/unix/http/apache_druid_rce/manifests/service.pp new file mode 100644 index 000000000..2087b8504 --- /dev/null +++ b/modules/vulnerabilities/unix/http/apache_druid_rce/manifests/service.pp @@ -0,0 +1,17 @@ +# Class: apache_druid_rce::service +# Service behaviour +# +class apache_druid_rce::service { + $secgen_parameters = secgen_functions::get_parameters($::base64_inputs_file) + $user = $secgen_parameters['leaked_username'][0] + + file { '/etc/systemd/system/druid.service': + content => template('apache_druid_rce/druid.service.erb'), + owner => 'root', + mode => '0755', + } + -> service { 'druid': + ensure => running, + enable => true, + } +} diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/secgen_metadata.xml b/modules/vulnerabilities/unix/http/apache_druid_rce/secgen_metadata.xml new file mode 100644 index 000000000..4960fc102 --- /dev/null +++ b/modules/vulnerabilities/unix/http/apache_druid_rce/secgen_metadata.xml @@ -0,0 +1,58 @@ + + + + Apache Druid 0.20.0 RCE + James Davis + MIT + Apache Druid includes the + ability to execute user-provided JavaScript code embedded + in various types of requests; however, that feature is disabled by default. + In Druid versions prior to `0.20.1`, an authenticated user can send a specially-crafted + request that both enables the JavaScript code-execution feature and executes the supplied + code all at once, allowing for code execution on the server with the privileges of the Druid + Server process. More critically, authentication is not enabled in Apache Druid by default. + + http + user_rwx + remote + linux + low + + port + strings_to_leak + leaked_filenames + + + + + + + + + + + + + + + + druid + + + + CVE-2021-25646 + 8.8 + AV:N/AC:L/Au:N/C:C/I:C/A:C + + https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/http/apache_druid_js_rce.rb + + https://github.com/rapid7/metasploit-framework/blob/master/documentation/modules/exploit/linux/http/apache_druid_js_rce.md + https://archive.apache.org/dist/druid/0.20.0/ + https://github.com/apache/druid + Apache Druid + Apache License 2.0 + + \ No newline at end of file diff --git a/modules/vulnerabilities/unix/http/apache_druid_rce/templates/druid.service.erb b/modules/vulnerabilities/unix/http/apache_druid_rce/templates/druid.service.erb new file mode 100644 index 000000000..63b067cd5 --- /dev/null +++ b/modules/vulnerabilities/unix/http/apache_druid_rce/templates/druid.service.erb @@ -0,0 +1,14 @@ +[Unit] +Description=Apache Druid Nano Quickstart +After=network.target + +[Service] +Type=simple +User=<%= @user %> +WorkingDirectory=/usr/local/apache-druid/ +ExecStart=/usr/local/apache-druid/bin/start-nano-quickstart +Restart=always +RestartSec=1 + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/scenarios/examples/vulnerability_examples/apache_druid.xml b/scenarios/examples/vulnerability_examples/apache_druid.xml new file mode 100644 index 000000000..ac963734c --- /dev/null +++ b/scenarios/examples/vulnerability_examples/apache_druid.xml @@ -0,0 +1,16 @@ + + + + + + druid + + + + + + + + \ No newline at end of file