Booz Allen Hamilton Inc. 8283 Greensboro Drive McLean, VA 22102 www.boozallen.com April 23, 2015 Bill Cerniuk 810 Vermont Ave, NW Washington, DC 20420 Re: HipaaChatLite AppCritique Security Report Findings This letter and attached report are intended to address the Fail rating that was assigned to the above mentioned app by Booz Allen Hamilton on the Analytics and Project Coordination Support contract. We recommend an overall evaluation of Fail for HipaaChatLite for the following reasons: Stores screenshots, pictures and audio recordings unencrypted and with low file protection values Pictures and audio can be accessed by any user with trusted access to the device Vulnerable to account impersonation by replaying stolen tokens Specific details around the findings can be found in the subsequent report. Regards, Travis Hoffmann Booz Allen Hamilton AppCritique Security Report HipaaChat Lite Ver: 4.0.0 App Metadata Version Developer Package Name Platform iTunes App Store Link 4.0.0 Tapestry Telemed LLC com.tapestrytelemed.hipaac hat iOS https://itunes.apple.com/us/app/id642738088 Executive Summary and Overall Security Overall Evaluation for Use Recommendation: Fail This app stores screenshots, pictures, and recorded audio unencrypted and with low file protections. It's also potentially vulnerable to account impersonation by replaying stolen tokens. The more red there is, the more security risk present in the app. Each peak indicates a Not Present, Warn, or Present value for a specific check. 1 Potential Attack Vectors Here the checks are categorized into common mobile attack vectors. Overall Evaluation Results Area of Concern Functionality Risk Rating Medium Risk Data Storage Medium Risk Networking Medium Risk Summary of Findings The app does not clear the cache of sensitive data transmitted over HTTPS, including authentication tokens The app does not scrub sensitive information from screenshots taken for backgrounding The app uses potentially vulnerable C functions The app downloads executable Javascript code Files are stored with low file protection values Video and audio recordings are stored unencrypted and can be accessed by any user with trusted access to the device Authentication tokens stored in the cache with low file permissions App uses a known weak hashing algorithm The app is taking over the certificate validation process which could allow for self-signed certs which are vulnerable to manin-the-middle attacks The app transmits video over alternate UDP ports 2 Functionality Findings The app caches sensitive authentication tokens that are exchanged via HTTPS. This information should instead be stored in the keychain. The app neglects to scrub sensitive information from screenshots. When the app is minimized, the screenshots are stored with low file protections and are not cleared of any sensitive data. The app contains a PIN code feature designed to further secure the app if it is restored after minimization or if it is logged in to. Restoring the app from minimization will still display sensitive information cached in the backgrounded screenshot before displaying the PIN entry. Logging in to the app will also still display the sensitive information for a fraction of a second before displaying the PIN entry. Checks Conducted Check App Writes to Media Directory Sensitive Data Synchronized to Cloud Sensitive Information Found in App Artifacts Result Not Present Not Present Present Weak Access Control Not Present Warn Possible Input Validation Vulnerability Lacks Binary Protections App Includes Unnecessary Functionality Downloads Executable Code App Alters OS Permissions Contains Known Malware Not Present Not Present Present Not Present Not Present Explanation App does not write to the media directory. No sensitive information was detected synchronizing to the cloud. Sensitive information is stored in app screenshots. Audio and video recordings are stored in the app's Documents directory unencrypted and with low file protections. No weak access control was detected. App uses methods that require input validation. App may be vulnerable to formatting or injection vulnerabilities. App was compiled with binary protections. No unnecessary code detected. App downloads executable Javascript code that may be malicious. iOS apps cannot alter OS permissions. App has been vetted by Apple's review process, and does not contain any known malware. Data Storage Findings The app stores audio recordings and pictures taken by its users unencrypted and with low file protections in the application's Documents directory. These are accessible to anyone who can bypass the lock screen or gain trust on the device, regardless of who is logged in to the app. Files are stored with low file protection values, which could allow the files to be accessed while the device is locked. Additionally, a login token was found stored in the cache. This token could potentially be stolen and reused to impersonate a user and read their messages or 3 perform other actions within the app as though you were logged in as that user. Because we cannot test the backend web service that the app uses, and because we don't know how long the token is valid for, the likelihood of this attack to succeed given the factors involved is unknown. The app uses a known weak hashing algorithm. Checks Conducted Check Security Information Found Outside Keychain Sensitive Information Vulnerable Result Warn Weak or Untested Encryption Warn Warn Explanation Authentication tokens are stored in the app's web cache. Screenshots are not scrubbed before being stored. Audio recordings and pictures are stored unencrypted with low file protections. App uses weak or deprecated encryption library. Encrypted data may be vulnerable. Networking Findings The app transmits video chat data over alternate ports using UDP. It's unknown if this traffic is properly encrypted, and it's possible that an adversary could decrypt video traffic being exchanged between two devices. Analysis of UDP traffic would require an extended amount of time due to its conversationless format. Checks Conducted Check Sensitive Information Vulnerable in Transit Sensitive Cookies Insecure Result Present Non-Standard Protocol Use Not Present Present Sensitive Information Transmitted To Third Parties Unnecessary Sensitive Information Transmitted Not Present Not Present Explanation Video and audio chats are conducted over UDP and may be unencrypted. All cookies use secure flags, or no cookie was found. This app uses arbitrary UDP ports for audio and video conversations. No sensitive information was detected in transit to a third party. No unnecessary sensitive information was detected in transit. 4 Connection Summary Ad Networks Analytics Networks Google ad network Google analytics Cloud Networks Social Networks Distribution Networks Amazon AWS cloud network Web Connections Country Code http://004-qsk-624.mktoresp.com http://munchkin.marketo.net http://netdna.bootstrapcdn.com http://use.typekit.net http://www.everbridge.com http://www.hipaachat.com https://api3.hipaachat.com https://cdn.auth0.com https://hipaachat.auth0.com https://www.gravatar.com US US GB US US US US US US US * If country code is not provided it could not be determined. This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com. Hard-Coded Strings Found Embedded IPs Country Code 127.0.0.1 * Embedded URLs Country Code http://acedicom.edicomgroup.com http://barbados.usembassy.gov http://bugzilla.xamarin.com http://code.google.com http://crl.comodo.net http://crl.comodoca.com http://crl.entrust.net http://crl.geotrust.com http://crl.globalsign.net GB US US US GB GB US US US 5 http://crl.netsolssl.com http://crl.pki.wellsfargo.com http://crl.securetrust.com http://crl.sgtrustservices.com http://crl.usertrust.com http://crl.xrampsecurity.com http://crt.comodoca.com http://cybertrust.omniroot.com http://docs.xamarin.com http://experiencestmartin.com http://fedir.com http://logo.verisign.com http://ns.adobe.com http://ocsp.comodoca.com http://ocsp.entrust.net http://policy.camerfirma.com http://repository.swisssign.com http://s2.turksandcaicosyp.com http://schemas.microsoft.com http://studentsabroad.state.gov http://tirana.usembassy.gov http://travel.state.gov http://www.airportairport.com http://www.angolatelecom.com http://www.apple.com http://www.areacodedownload.com http://www.britishvirginislands.com http://www.certicamara.com http://www.certplus.com http://www.cnc.gov http://www.com http://www.digicert.com http://www.dot.gov http://www.dps.gov http://www.entrust.net http://www.firmaprofesional.com http://www.frommers.com http://www.gexf.net http://www.google.com http://www.ida.gov http://www.justice.gov http://www.nanpa.com http://www.nationalnanpa.com http://www.phonebookoftheworld.com http://www.quovadisglobal.com http://www.startssl.com http://www.trustdst.com http://www.usertrust.com http://www.valicert.com http://xamarin.com https://api.opentok.com https://ocsp.quovadisoffshore.com https://secure.comodo.com https://www.apple.com https://www.catcert.net https://www.net https://www.netlock.net www.camerfirma.com www.cnmiphonebook.com www.digicert.com www.entrust.net www.google.com www.login.live.com www.login.skype.com GB US US FR GB US GB US US US GB US US GB US ES CH US US US US US DE AO US US US US US * BS US US * CA ES US FR US * US US US US BM IL US GB US US US BM GB US ES CA HU ES MP US CA US * * 6 www.login.yahoo.com www.mail.google.com www.xrampsecurity.com * * US Embedded Emails ca@trustwave.com certs@thawte.com contacto@procert.net cps@netlock.net ec_acc@catcert.net ellenorzes@netlock.net info@izenpe.com info@netlock.net info@valicert.com ops@trustdst.com server@thawte.com * If country code is not provided it could not be determined. This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com. String Explanation /Users/tokbox/jenkins/workspace/otkit-ios-sdk/otkitobjc/OTVideoCaptureProxy.m /etc/passwd SELECT 'CREATE TABLE %s.' || substr(sql,14) FROM sqlite_master WHERE type='table' AND name!='sqlite_sequence' AND rootpage>0 Hard-coded developer user directory Hard-coded directory to unix user list file Creating hard-coded tables in a sqlite database Recommendations and Remediation The following are suggested changed that would be required for this app to pass a DISA Review, a standard DISA review (not based on the assumptions outlined in the App Testing Working Assumptions Doc), or to improve security. Action # 1 2 3 4 Explanation Enforce strict file protections. The default file protection level for all files should be NSFileProtectionComplete. Scrub all sensitive information from screenshots. Whenever the app is minimized by pressing the home button, overwrite the screenshot used to background the app with a black or white screen to prevent sensitive PHI from being leaked. Encrypt all audio recordings and pictures taken by the app. Messages sent in plain text are already encrypted in addition to their file protections, so the same should apply to recordings and pictures. Store all authentication tokens in the keychain. Any authentication information, whether it's passwords or authentication tokens, should be stored in the keychain and not in the cache. The developer should clear all sensitive information from the cache by overriding the willCacheResponse behavior. 7 Screenshots The following screen shows the main messaging view of the app. This screen is displayed immediately on login. Even if the pin code feature is enabled in the HipaaChat settings, this screen will still display briefly before the pin entry screen is displayed over it. This screen, as well as the actual contents of the chat and any other sensitive information, will be kept in any screenshots taken when the app is minimized. 8 Standards Mapping Check Categories App Alters OS Permissions App Includes Unnecessary Functionality App Writes to Media Directory Contains Known Malware Check Name Result MAPP-SRG App Alters Operating System Permissions Not Present SRG-APP-000033-MAPP-00010 Found Linked Frameworks not Directly Used by App Not Present SRG-APP-000033-MAPP-00012, SRG-APP-000141-MAPP00031 M10 App Writes to Media Directory Not Present SRG-APP-000243-MAPP-00049 M4 App Contains Known Malware Not Present SRG-APP-999999-MAPP-00077 Downloads Executable Code Downloads and Executes JavaScript Without User Permission App is not Compiled with Automatic Reference Counting App is not Compiled With PIE (Position Independent Executable) Protection App is not Compiled with Stack Smashing Protection Sensitive Data Found on Non-Standard Port/Protocol Source Uses Vulnerable C Functions Present SRG-APP-000022-MAPP-00009 M7 Not Present SRG-APP-999999-MAPP-00069 M10 Not Present SRG-APP-999999-MAPP-00069 M10 Not Present SRG-APP-999999-MAPP-00069 M10 Warn SRG-APP-000251-MAPP-00054, SRG-APP-999999-MAPP00069 M7 Security Information Found Outside Keychain Files Contain Sensitive Information Social Networking Token Found Present Not Present M2, M5 M2 Sensitive Cookies Insecure Sensitive Data Synchronized to Cloud Sensitive Cookies Insecure Not Present SRG-APP-000196-MAPP-00042 SRG-APP-000129-MAPP-00029, SRG-APP-999999-MAPP00066 SRG-APP-999999-MAPP-00066 Sensitive Data Synchronized to Cloud Not Present Sensitive Information Found in NSLog Sensitive Information Found in Multi-Tasking Display Sensitive Information Found in URL Cache Sensitive Information is Transmitted to a Third Party Not Present Present No Default File Protection is Specified Low File Protection Levels PList Files Contain Sensitive Information Files Contain Sensitive Information SQLite Contains Sensitive Information UIPasteBoard Leaks Information Does not Use Appropriate SSL/TLS Standards Sensitive Data Found on Non-Standard Port/Protocol Sensitive Data is Unencrypted in Transit Invalid SSL Certificate Unnecessary Sensitive Information Transmitted Present Present Not Present Present Warn Not Present Not Present Present SRG-APP-000196-MAPP-00042 SRG-APP-000196-MAPP-00042 SRG-APP-000196-MAPP-00042 SRG-APP-000196-MAPP-00042 SRG-APP-000196-MAPP-00042 SRG-APP-000243-MAPP-00049 SRG-APP-000264-MAPP-00057 M5 M2 M4 M2, M5 M2 M7 M3 M3 164.312(a)(2)(iv) 164.312(c)(2) Warn Warn Not Present SRG-APP-000264-MAPP-00057 SRG-APP-000264-MAPP-00057 SRG-APP-999999-MAPP-00075 M3 M3 M4 164.312(a)(2)(iv), 164.312(e)(2)(ii) 164.312(a)(2)(iv), 164.312(e)(2)(ii) Files not Encrypted Using Username / Password (Applies When Login is Present) “Remember Me” Sessions Enabled by Default Social Networking Token Found Present SRG-APP-000129-MAPP-00029 M5 164.312(a)(2)(iv), 164.312(c)(2), 164.312(d), 164.312(e)(2)(i) M5 M2 164.312(a)(2)(iii), 164.312(e)(2)(i) Uses Falsifiable Values for Authentication Uses Weak Encryption Library Not Present Present M5 M6 164.312(a)(2)(i), 164.312(d), 164.312(e)(2)(i) 164.312(a)(2)(iv), 164.312(e)(2)(ii) Lacks Binary Protections Non-Standard Protocol Use Possible Input Validation Vulnerability Sensitive Information Found in App Artifacts Sensitive Information Transmitted To Third Parties Sensitive Information Vulnerable Sensitive Information Vulnerable in Transit Unnecessary Sensitive Information Transmitted Weak Access Control Weak or Untested Encryption Present Warn Not Present Not Present Not Present OWASP Mobile Top 10 2014 M3 HIPAA 164.312(c)(2) 164.312(c)(2) M4 M4 SRG-APP-000266-MAPP-00059 SRG-APP-999999-MAPP-00075 SRG-APP-000129-MAPP-00029, SRG-APP-999999-MAPP00066 SRG-APP-999999-MAPP-00070 SRG-APP-000192-MAPP-00038, SRG-APP-000193-MAPP00039, SRG-APP-000194-MAPP-00040, SRG-APP-000195MAPP-00041 M4 M4 M4 M4 164.312(c)(2) 164.312(a)(2)(iv), 164.312(e)(2)(ii) 164.312(c)(2) 9