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