- );
- }
-
- generateCrossSegmentServiceListItems(issue) {
- let service_list_items = [];
-
- for (const [service, info] of Object.entries(issue['services'])) {
- service_list_items.push(
-
- {service} ({info['display_name']})
-
- );
- }
-
- return service_list_items;
- }
-
- generateShellshockPathListBadges(paths) {
- return paths.map(path => {path});
- }
-
- generateSmbPasswordIssue(issue) {
- return (
- <>
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SMB attack.
-
- The Monkey authenticated over the SMB protocol with user {issue.username} and its password.
-
- >
- );
- }
-
- generateSmbPthIssue(issue) {
- return (
- <>
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SMB attack.
-
- The Monkey used a pass-the-hash attack over SMB protocol with user {issue.username}.
-
- >
- );
- }
-
- generateWmiPasswordIssue(issue) {
- return (
- <>
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a WMI attack.
-
- The Monkey authenticated over the WMI protocol with user {issue.username} and its password.
-
- >
- );
- }
-
- generateWmiPthIssue(issue) {
- return (
- <>
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a WMI attack.
-
- The Monkey used a pass-the-hash attack over WMI protocol with user {issue.username}.
-
- >
- );
- }
-
- generateSshIssue(issue) {
- return (
- <>
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SSH attack.
-
- The Monkey authenticated over the SSH protocol with user {issue.username} and its password.
-
- >
- );
- }
-
- generateSshKeysIssue(issue) {
- return (
- <>
- Protect {issue.ssh_key} private key with a pass phrase.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SSH attack.
-
- The Monkey authenticated over the SSH protocol with private key {issue.ssh_key}.
-
- >
- );
- }
-
-
- generateSambaCryIssue(issue) {
- return (
- <>
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- Update your Samba server to 4.4.14 and up, 4.5.10 and up, or 4.6.4 and up.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SambaCry attack.
-
- The Monkey authenticated over the SMB protocol with user {issue.username} and its password, and used the SambaCry
- vulnerability.
-
- >
- );
- }
-
- generateVsftpdBackdoorIssue(issue) {
- return (
- <>
- Update your VSFTPD server to the latest version vsftpd-3.0.3.
-
- The machine {issue.machine} ({issue.ip_address}) has a backdoor running at
- port 6200.
-
- The attack was made possible because the VSFTPD server was not patched against CVE-2011-2523.
-
In July 2011, it was discovered that vsftpd version 2.3.4 downloadable from the master site had been
- compromised.
- Users logging into a compromised vsftpd-2.3.4 server may issue a ":)" smileyface as the username and gain a
- command
- shell on port 6200.
-
- The Monkey executed commands by first logging in with ":)" in the username and then sending commands to the
- backdoor
- at port 6200.
-
Read more about the security issue and remediation here.
-
- >
- );
- }
-
- generateElasticIssue(issue) {
- return (
- <>
- Update your Elastic Search server to version 1.4.3 and up.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to an Elastic Groovy attack.
-
- The attack was made possible because the Elastic Search server was not patched against CVE-2015-1427.
-
- >
- );
- }
-
- generateShellshockIssue(issue) {
- return (
- <>
- Update your Bash to a ShellShock-patched version.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a ShellShock attack.
-
- The attack was made possible because the HTTP server running on TCP port {issue.port} was vulnerable to a shell injection attack on the
- paths: {this.generateShellshockPathListBadges(issue.paths)}.
-
- >
- );
- }
-
- generateAzureIssue(issue) {
- return (
- <>
- Delete VM Access plugin configuration files.
-
- Credentials could be stolen from {issue.machine} for the following users {issue.users}. Read more about the security issue and remediation here.
-
- >
- );
- }
-
- generateConfickerIssue(issue) {
- return (
- <>
- Install the latest Windows updates or upgrade to a newer operating system.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a Conficker attack.
-
- The attack was made possible because the target machine used an outdated and unpatched operating system
- vulnerable to Conficker.
-
- >
- );
- }
-
- generateIslandCrossSegmentIssue(issue) {
- return (
- <>
- Segment your network and make sure there is no communication between machines from different segments.
-
- The network can probably be segmented. A monkey instance on {issue.machine} in the
- networks {this.generateInfoBadges(issue.networks)}
- could directly access the Monkey Island server in the
- networks {this.generateInfoBadges(issue.server_networks)}.
-
- >
- );
- }
-
- generateSharedCredsDomainIssue(issue) {
- return (
- <>
- Some domain users are sharing passwords, this should be fixed by changing passwords.
-
- These users are sharing access password:
- {this.generateInfoBadges(issue.shared_with)}.
-
- >
- );
- }
-
- generateSharedCredsIssue(issue) {
- return (
- <>
- Some users are sharing passwords, this should be fixed by changing passwords.
-
- These users are sharing access password:
- {this.generateInfoBadges(issue.shared_with)}.
-
- >
- );
- }
-
- generateSharedLocalAdminsIssue(issue) {
- return (
- <>
- Make sure the right administrator accounts are managing the right machines, and that there isn’t an
- unintentional local
- admin sharing.
-
- Here is a list of machines which the account {issue.username} is defined as an administrator:
- {this.generateInfoBadges(issue.shared_machines)}
-
- >
- );
- }
-
- generateStrongUsersOnCritIssue(issue) {
- return (
- <>
- This critical machine is open to attacks via strong users with access to it.
-
- The services: {this.generateInfoBadges(issue.services)} have been found on the machine
- thus classifying it as a critical machine.
- These users has access to it:
- {this.generateInfoBadges(issue.threatening_users)}.
-
- >
- );
- }
-
- generateTunnelIssue(issue) {
- return (
- <>
- Use micro-segmentation policies to disable communication other than the required.
-
- Machines are not locked down at port level. Network tunnel was set up from {issue.machine} to {issue.dest}.
-
- >
- );
- }
-
- generateStruts2Issue(issue) {
- return (
- <>
- Upgrade Struts2 to version 2.3.32 or 2.5.10.1 or any later versions.
-
- Struts2 server at {issue.machine} ({issue.ip_address}) is vulnerable to remote code execution attack.
-
- The attack was made possible because the server is using an old version of Jakarta based file upload
- Multipart parser. For possible work-arounds and more info read here.
-
- >
- );
- }
-
- generateDrupalIssue(issue) {
- return (
- <>
- Upgrade Drupal server to versions 8.5.11, 8.6.10, or later.
-
- Drupal server at {issue.machine} ({issue.ip_address}) is vulnerable to remote command execution attack.
-
- The attack was made possible because the server is using an old version of Drupal, for which REST API is
- enabled. For possible workarounds, fixes and more info read
- here.
-
- >
- );
- }
-
- generateWebLogicIssue(issue) {
- return (
- <>
- Update Oracle WebLogic server to the latest supported version.
-
- Oracle WebLogic server at {issue.machine} ({issue.ip_address}) is vulnerable to one of remote code execution attacks.
-
- The attack was made possible due to one of the following vulnerabilities:
- CVE-2017-10271 or
- CVE-2019-2725
-
- >
- );
- }
-
- generateHadoopIssue(issue) {
- return (
- <>
- Run Hadoop in secure mode (
- add Kerberos authentication).
-
- The Hadoop server at {issue.machine} ({issue.ip_address}) is vulnerable to remote code execution attack.
-
- The attack was made possible due to default Hadoop/Yarn configuration being insecure.
-
- >
- );
- }
-
- generateMSSQLIssue(issue) {
- return (
- <>
- Disable the xp_cmdshell option.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a MSSQL exploit attack.
-
- The attack was made possible because the target machine used an outdated MSSQL server configuration allowing
- the usage of the xp_cmdshell command. To learn more about how to disable this feature, read
- .
-
- >
- );
- }
-
- generateZerologonIssue(issue) {
- return (
- <>
- Install Windows security updates.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a Zerologon exploit.
-
- The attack was possible because the latest security updates from Microsoft
- have not been applied to this machine. For more information about this
- vulnerability, read
- .
- {!issue.password_restored &&
-
-
-
- The domain controller's password was changed during the exploit and could not be restored successfully.
- Instructions on how to manually reset the domain controller's password can be found
- .
-
-
}
-
- >
- );
- }
-
generateIssue = (issue) => {
- let issueData;
- switch (issue.type) {
- case 'vsftp':
- issueData = this.generateVsftpdBackdoorIssue(issue);
- break;
- case 'smb_password':
- issueData = this.generateSmbPasswordIssue(issue);
- break;
- case 'smb_pth':
- issueData = this.generateSmbPthIssue(issue);
- break;
- case 'wmi_password':
- issueData = this.generateWmiPasswordIssue(issue);
- break;
- case 'wmi_pth':
- issueData = this.generateWmiPthIssue(issue);
- break;
- case 'ssh':
- issueData = this.generateSshIssue(issue);
- break;
- case 'ssh_key':
- issueData = this.generateSshKeysIssue(issue);
- break;
- case 'sambacry':
- issueData = this.generateSambaCryIssue(issue);
- break;
- case 'elastic':
- issueData = this.generateElasticIssue(issue);
- break;
- case 'shellshock':
- issueData = this.generateShellshockIssue(issue);
- break;
- case 'conficker':
- issueData = this.generateConfickerIssue(issue);
- break;
- case 'island_cross_segment':
- issueData = this.generateIslandCrossSegmentIssue(issue);
- break;
- case 'shared_passwords':
- issueData = this.generateSharedCredsIssue(issue);
- break;
- case 'shared_passwords_domain':
- issueData = this.generateSharedCredsDomainIssue(issue);
- break;
- case 'shared_admins_domain':
- issueData = this.generateSharedLocalAdminsIssue(issue);
- break;
- case 'strong_users_on_crit':
- issueData = this.generateStrongUsersOnCritIssue(issue);
- break;
- case 'tunnel':
- issueData = this.generateTunnelIssue(issue);
- break;
- case 'azure_password':
- issueData = this.generateAzureIssue(issue);
- break;
- case 'struts2':
- issueData = this.generateStruts2Issue(issue);
- break;
- case 'weblogic':
- issueData = this.generateWebLogicIssue(issue);
- break;
- case 'hadoop':
- issueData = this.generateHadoopIssue(issue);
- break;
- case 'mssql':
- issueData = this.generateMSSQLIssue(issue);
- break;
- case 'drupal':
- issueData = this.generateDrupalIssue(issue);
- break;
- case 'zerologon':
- issueData = this.generateZerologonIssue(issue);
- break;
+ let issueDescriptor = this.IssueDescriptorEnum[issue.type];
+
+ let reportFnc = (issue) => {};
+ if (issue.hasOwnProperty('credential_type')) {
+ reportFnc = issueDescriptor[this.issueContentTypes.REPORT][issue.credential_type];
+ } else {
+ reportFnc = issueDescriptor[this.issueContentTypes.REPORT];
}
- return
{issueData}
;
+ let reportContents = reportFnc(issue);
+ return
)
+}
+
+export function azurePasswordIssueReport(issue) {
+ return (
+ <>
+ Delete VM Access plugin configuration files.
+
+ Credentials could be stolen from {issue.machine} for the following users {issue.users}. Read more about the security issue and remediation here.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/CrossSegmentIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/CrossSegmentIssue.js
new file mode 100644
index 000000000..6c1ece1ea
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/CrossSegmentIssue.js
@@ -0,0 +1,84 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+import {generateInfoBadges} from './utils';
+
+export function crossSegmentIssueOverview() {
+ return (
Weak segmentation - Machines from
+ different segments are able to communicate.
)
+}
+
+export function crossSegmentIssueReport(crossSegmentIssue) {
+ let crossSegmentIssueOverview = 'Communication possible from '
+ + `${crossSegmentIssue['source_subnet']} to ${crossSegmentIssue['target_subnet']}`;
+
+ return (
+
+ IP {issue['source']} ({issue['hostname']}) was able to communicate with
+ IP {issue['target']} using:
+
+ {issue['icmp'] &&
ICMP
}
+ {getCrossSegmentServiceListItems(issue)}
+
+
+ );
+ }
+
+export function getCrossSegmentServiceListItems(issue) {
+ let service_list_items = [];
+
+ for (const [service, info] of Object.entries(issue['services'])) {
+ service_list_items.push(
+
+ {service} ({info['display_name']})
+
+ );
+ }
+
+ return service_list_items;
+ }
+
+export function islandCrossSegmentIssueReport(issue) {
+ return (
+ <>
+ Segment your network and make sure there is no communication between machines from different segments.
+
+ The network can probably be segmented. A monkey instance on {issue.machine} in the
+ networks {generateInfoBadges(issue.networks)}
+ could directly access the Monkey Island server in the
+ networks {generateInfoBadges(issue.server_networks)}.
+
+ >
+ );
+ }
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/DrupalIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/DrupalIssue.js
new file mode 100644
index 000000000..d5cc068bb
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/DrupalIssue.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function drupalIssueOverview() {
+ return (
)
+}
+
+export function drupalIssueReport(issue) {
+ return (
+ <>
+ Upgrade Drupal server to versions 8.5.11, 8.6.10, or later.
+
+ Drupal server at {issue.machine} ({issue.ip_address}) is vulnerable to remote command execution attack.
+
+ The attack was made possible because the server is using an old version of Drupal, for which REST API is
+ enabled. For possible workarounds, fixes and more info read
+ here.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/ElasticIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/ElasticIssue.js
new file mode 100644
index 000000000..4d389bf2b
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/ElasticIssue.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function elasticIssueOverview() {
+ return (
Elasticsearch servers are vulnerable to CVE-2015-1427.
+
)
+}
+
+export function elasticIssueReport(issue) {
+ return (
+ <>
+ Update your Elastic Search server to version 1.4.3 and up.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to an Elastic Groovy attack.
+
+ The attack was made possible because the Elastic Search server was not patched against CVE-2015-1427.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/HadoopIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/HadoopIssue.js
new file mode 100644
index 000000000..ff126ef8a
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/HadoopIssue.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function hadoopIssueOverview() {
+ return (
Hadoop/Yarn servers are vulnerable to remote code execution.
)
+}
+
+export function hadoopIssueReport(issue) {
+ return (
+ <>
+ Run Hadoop in secure mode (
+ add Kerberos authentication).
+
+ The Hadoop server at {issue.machine} ({issue.ip_address}) is vulnerable to remote code execution attack.
+
+ The attack was made possible due to default Hadoop/Yarn configuration being insecure.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/MS08_067Issue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/MS08_067Issue.js
new file mode 100644
index 000000000..2a831a093
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/MS08_067Issue.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function ms08_067IssueOverview() {
+ return (
Machines are vulnerable to ‘Conficker’ (MS08-067).
)
+}
+
+export function ms08_067IssueReport(issue) {
+ return (
+ <>
+ Install the latest Windows updates or upgrade to a newer operating system.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a Conficker attack.
+
+ The attack was made possible because the target machine used an outdated and unpatched operating system
+ vulnerable to Conficker.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/MssqlIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/MssqlIssue.js
new file mode 100644
index 000000000..e8e1bb162
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/MssqlIssue.js
@@ -0,0 +1,24 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function mssqlIssueOverview() {
+ return (
MS-SQL servers are vulnerable to remote code execution via xp_cmdshell command.
)
+}
+
+export function mssqlIssueReport(issue) {
+ return (
+ <>
+ Disable the xp_cmdshell option.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a MSSQL exploit attack.
+
+ The attack was made possible because the target machine used an outdated MSSQL server configuration allowing
+ the usage of the xp_cmdshell command. To learn more about how to disable this feature, read
+ Microsoft's documentation.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/PthCriticalServiceIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/PthCriticalServiceIssue.js
new file mode 100644
index 000000000..73589715b
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/PthCriticalServiceIssue.js
@@ -0,0 +1,6 @@
+import React from 'react';
+
+export function pthCriticalServiceIssueOverview() {
+ return (
Mimikatz found login credentials of a user who has admin access to a server defined as
+ critical.
)
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SambacryIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SambacryIssue.js
new file mode 100644
index 000000000..05bcb6850
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SambacryIssue.js
@@ -0,0 +1,28 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function sambacryIssueOverview() {
+ return (
Samba servers are vulnerable to ‘SambaCry’ (CVE-2017-7494).
)
+}
+
+export function sambacryIssueReport(issue) {
+ return (
+ <>
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ Update your Samba server to 4.4.14 and up, 4.5.10 and up, or 4.6.4 and up.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SambaCry attack.
+
+ The Monkey authenticated over the SMB protocol with user {issue.username} and its password, and used the SambaCry
+ vulnerability.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SharedPasswordsIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SharedPasswordsIssue.js
new file mode 100644
index 000000000..2a09dbb83
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SharedPasswordsIssue.js
@@ -0,0 +1,51 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+import {generateInfoBadges} from './utils';
+
+export function sharedPasswordsIssueOverview() {
+ return (
Multiple users have the same password
)
+}
+
+export function sharedAdminsDomainIssueOverview() {
+ return (
Shared local administrator account - Different machines have the same account as a local
+ administrator.
)
+}
+
+export function sharedCredsDomainIssueReport(issue) {
+ return (
+ <>
+ Some domain users are sharing passwords, this should be fixed by changing passwords.
+
+ These users are sharing access password:
+ {generateInfoBadges(issue.shared_with)}.
+
+ >
+ );
+ }
+
+export function sharedCredsIssueReport(issue) {
+ return (
+ <>
+ Some users are sharing passwords, this should be fixed by changing passwords.
+
+ These users are sharing access password:
+ {generateInfoBadges(issue.shared_with)}.
+
+ >
+ );
+ }
+
+export function sharedLocalAdminsIssueReport(issue) {
+ return (
+ <>
+ Make sure the right administrator accounts are managing the right machines, and that there isn’t an
+ unintentional local
+ admin sharing.
+
+ Here is a list of machines which the account {issue.username} is defined as an administrator:
+ {generateInfoBadges(issue.shared_machines)}
+
+ >
+ );
+ }
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/ShellShockIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/ShellShockIssue.js
new file mode 100644
index 000000000..b2496fb21
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/ShellShockIssue.js
@@ -0,0 +1,30 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function shellShockIssueOverview() {
+ return (
Machines are vulnerable to ‘Shellshock’ (CVE-2014-6271).
+
)
+}
+
+
+function getShellshockPathListBadges(paths) {
+ return paths.map(path => {path});
+}
+
+export function shellShockIssueReport(issue) {
+ return (
+ <>
+ Update your Bash to a ShellShock-patched version.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a ShellShock attack.
+
+ The attack was made possible because the HTTP server running on TCP port {issue.port} was vulnerable to a shell injection attack on the
+ paths: {getShellshockPathListBadges(issue.paths)}.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SmbIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SmbIssue.js
new file mode 100644
index 000000000..66e2117ff
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SmbIssue.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function smbPasswordReport(issue) {
+ return (
+ <>
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SMB attack.
+
+ The Monkey authenticated over the SMB protocol with user {issue.username} and its password.
+
+ >
+ );
+}
+
+export function smbPthReport(issue) {
+ return (
+ <>
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SMB attack.
+
+ The Monkey used a pass-the-hash attack over SMB protocol with user {issue.username}.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SshIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SshIssue.js
new file mode 100644
index 000000000..cb74018d8
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/SshIssue.js
@@ -0,0 +1,39 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function sshIssueOverview() {
+ return (
Stolen SSH keys are used to exploit other machines.
)
+}
+
+export function shhIssueReport(issue) {
+ return (
+ <>
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SSH attack.
+
+ The Monkey authenticated over the SSH protocol with user {issue.username} and its password.
+
+ >
+ );
+}
+
+export function sshKeysReport(issue) {
+ return (
+ <>
+ Protect {issue.ssh_key} private key with a pass phrase.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SSH attack.
+
+ The Monkey authenticated over the SSH protocol with private key {issue.ssh_key}.
+
+ >
+ );
+ }
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/StolenCredsIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/StolenCredsIssue.js
new file mode 100644
index 000000000..a0b0c037b
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/StolenCredsIssue.js
@@ -0,0 +1,5 @@
+import React from 'react';
+
+export function stolenCredsIssueOverview() {
+ return (
Stolen credentials are used to exploit other machines.
)
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/StrongUsersOnCritIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/StrongUsersOnCritIssue.js
new file mode 100644
index 000000000..328207710
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/StrongUsersOnCritIssue.js
@@ -0,0 +1,16 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function strongUsersOnCritIssueReport(issue) {
+ return (
+ <>
+ This critical machine is open to attacks via strong users with access to it.
+
+ The services: {this.generateInfoBadges(issue.services)} have been found on the machine
+ thus classifying it as a critical machine.
+ These users has access to it:
+ {this.generateInfoBadges(issue.threatening_users)}.
+
+ >
+ );
+ }
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/Struts2Issue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/Struts2Issue.js
new file mode 100644
index 000000000..ca4c2b2b9
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/Struts2Issue.js
@@ -0,0 +1,26 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function struts2IssueOverview() {
+ return (
Struts2 servers are vulnerable to remote code execution. (
+ CVE-2017-5638)
)
+}
+
+export function struts2IssueReport(issue) {
+ return (
+ <>
+ Upgrade Struts2 to version 2.3.32 or 2.5.10.1 or any later versions.
+
+ Struts2 server at {issue.machine} ({issue.ip_address}) is vulnerable to remote code execution attack.
+
+ The attack was made possible because the server is using an old version of Jakarta based file upload
+ Multipart parser. For possible work-arounds and more info read here.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/TunnelIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/TunnelIssue.js
new file mode 100644
index 000000000..c4d52751a
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/TunnelIssue.js
@@ -0,0 +1,19 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function tunnelIssueOverview(){
+ return (
Weak segmentation - Machines were able to communicate over unused ports.
)
+}
+
+export function tunnelIssueReport(issue) {
+ return (
+ <>
+ Use micro-segmentation policies to disable communication other than the required.
+
+ Machines are not locked down at port level. Network tunnel was set up from {issue.machine} to {issue.dest}.
+
+ >
+ );
+ }
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/VsftpdIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/VsftpdIssue.js
new file mode 100644
index 000000000..e5419a9c2
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/VsftpdIssue.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function vsftpdIssueOverview() {
+ return (
)
+}
+
+export function vsftpdIssueReport(issue) {
+ return (
+ <>
+ Update your VSFTPD server to the latest version vsftpd-3.0.3.
+
+ The machine {issue.machine} ({issue.ip_address}) has a backdoor running at
+ port 6200.
+
+ The attack was made possible because the VSFTPD server was not patched against CVE-2011-2523.
+
In July 2011, it was discovered that vsftpd version 2.3.4 downloadable from the master site had been
+ compromised.
+ Users logging into a compromised vsftpd-2.3.4 server may issue a ":)" smileyface as the username and gain a
+ command
+ shell on port 6200.
+
+ The Monkey executed commands by first logging in with ":)" in the username and then sending commands to the
+ backdoor
+ at port 6200.
+
Read more about the security issue and remediation here.
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/WeakPasswordIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/WeakPasswordIssue.js
new file mode 100644
index 000000000..ee3c6c04f
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/WeakPasswordIssue.js
@@ -0,0 +1,6 @@
+import React from 'react';
+
+export function weakPasswordIssueOverview() {
+ return (
Machines are accessible using passwords supplied by the user during the Monkey’s
+ configuration.
)
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/WebLogicIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/WebLogicIssue.js
new file mode 100644
index 000000000..e7678c448
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/WebLogicIssue.js
@@ -0,0 +1,23 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function webLogicIssueOverview() {
+ return (
Oracle WebLogic servers are susceptible to a remote code execution vulnerability.
)
+}
+
+export function webLogicIssueReport(issue) {
+ return (
+ <>
+ Update Oracle WebLogic server to the latest supported version.
+
+ Oracle WebLogic server at {issue.machine} ({issue.ip_address}) is vulnerable to one of remote code execution attacks.
+
+ The attack was made possible due to one of the following vulnerabilities:
+ CVE-2017-10271 or
+ CVE-2019-2725
+
+ >
+ );
+}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/WmiIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/WmiIssue.js
new file mode 100644
index 000000000..cce631274
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/WmiIssue.js
@@ -0,0 +1,36 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+
+export function wmiPasswordIssueReport(issue) {
+ return (
+ <>
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a WMI attack.
+
+ The Monkey authenticated over the WMI protocol with user {issue.username} and its password.
+
+ >
+ );
+ }
+
+export function wmiPthIssueReport(issue) {
+ return (
+ <>
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a WMI attack.
+
+ The Monkey used a pass-the-hash attack over WMI protocol with user {issue.username}.
+
+ >
+ );
+ }
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/ZerologonIssue.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/ZerologonIssue.js
new file mode 100644
index 000000000..771aecf6c
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/issues/ZerologonIssue.js
@@ -0,0 +1,64 @@
+import React from 'react';
+import CollapsibleWellComponent from '../CollapsibleWell';
+import WarningIcon from '../../../ui-components/WarningIcon';
+import {Button} from 'react-bootstrap';
+
+export function zerologonIssueOverview() {
+ return (
+
+ Some Windows domain controllers are vulnerable to 'Zerologon' (
+ ).
+
+ )
+}
+
+export function zerologonOverviewWithFailedPassResetWarning() {
+ let overview = [zerologonIssueOverview()];
+ overview.push(
+
+
+
+ Automatic password restoration on a domain controller failed!
+
+
+
+ )
+ return overview;
+}
+
+export function zerologonIssueReport(issue) {
+ return (
+ <>
+ Install Windows security updates.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a Zerologon exploit.
+
+ The attack was possible because the latest security updates from Microsoft
+ have not been applied to this machine. For more information about this
+ vulnerability, read
+ Microsoft's documentation.
+ {!issue.password_restored ?
+
+
+
+ The domain controller's password was changed during the exploit and could not be restored successfully.
+ Instructions on how to manually reset the domain controller's password can be found here.
+
+