Security/Features/PasswordManagerImprovements: Difference between revisions

no edit summary
mNo edit summary
No edit summary
Line 10: Line 10:
|Feature overview=Hardening the Password Manager.  
|Feature overview=Hardening the Password Manager.  


# See https://www.usenix.org/conference/usenixsecurity14/technical-sessions/presentation/silver
|Feature users and use cases=# See https://www.usenix.org/conference/usenixsecurity14/technical-sessions/presentation/silver
# Include improvements to the Password Manager to prevent attacks such as "Lupin" in the paper "Automated Password Extraction Attack on Modern Password Managers".  When a user is on an insecure network and makes any http request, a mitm could add login iframes to the http request.  The mitm can then add javascript to the responses from the login pages that send the attacker the autocompleted passwords from password manager.
# Include improvements to the Password Manager to prevent attacks such as "Lupin" in the paper "Automated Password Extraction Attack on Modern Password Managers".  When a user is on an insecure network and makes any http request, a mitm could add login iframes to the http request.  The mitm can then add javascript to the responses from the login pages that send the attacker the autocompleted passwords from password manager.
|Feature users and use cases=#Preventing local attacks:
|Feature requirements=* Preventing active network attacks:
## Explore solutions for encrypting the passwords stored locally in the password manager (for example, make use of keychain or encryption mechanisms that come with the OS).
*# Do not autofill the username/password stored in password manager in certain situations (listed below). Provide alternative UX - <b>UX help needed</b>
#Preventing active network attacks:
*#* For http sites (IE 11 has this security feature)
## Do not autofill the username/password stored in password manager in certain situations (listed below). Provide alternative UX <b>Requires UX help for alternate experience</b>
*#* https sites that have mixed active content
### For http sites (IE 11 has this security feature)
*#* https sites that require a cert override (chrome does this)
### https sites that have mixed active content
*#* in iframed sites (where the parent and frame are not  same orign, or always?) (safari does this for non-same origin, chrome does this for all frames). (Open Issue - what about third party widgets that allow users to login and post comments.)
### https sites that require a cert override (chrome does this)
*#* Invisible form fields (visibility and opacity, although this isn't going to prevent clickjacking attacks to autofill the passwords)
### in iframed sites (where the parent and frame are not  same orign, or always?) (safari does this for non-same origin, chrome does this for all frames). (Open Issue - what about third party widgets that allow users to login and post comments.)
*# [https://wiki.mozilla.org/Security/Features/HighlightCleartextPasswords Highlight Cleartext Passwords].) - Warn users about entering their passwords on insecure pages - [https://bugzilla.mozilla.org/show_bug.cgi?id=759860 Bug 759860].  UX help needed for this.
### Invisible form fields (visibility and opacity, although this isn't going to prevent clickjacking attacks to autofill the passwords)
*# Secure Filling - Passwords that are saved by the password manager should not be available to javascript on the page.  The actual password values should only be sent on submit.  This protects the password from attacks via xss, 3rd party javascript, etc.
## [https://wiki.mozilla.org/Security/Features/HighlightCleartextPasswords Highlight Cleartext Passwords].) - Warn users about entering their passwords on insecure pages - [https://bugzilla.mozilla.org/show_bug.cgi?id=759860 Bug 759860].  UX help needed for this.
# Secure Filling
## Passwords that are saved by the password manager should not be available to javascript on the page.  The actual password values should only be sent on submit.  This protects the password from attacks via xss, 3rd party javascript, etc.
## The more extreme option is to not give javascript access to any password fields (regardless of whether the password manager saves the password).  Javascript would just be able to determine the length of the password (browser fills in dummy values for each * in the password field).  The actual password the user enters is only used on submit.  The problem with this is with registration pages that use javascript to test the password strength.  [https://bugzilla.mozilla.org/show_bug.cgi?id=653132 Bug 653132]
#Duplicate Passwords:
## If an identical password is stored for the both the http and https version of a site, prompt the user to redirect to the https site.  (Should we do this even if the passwords are not identical?)
## If an identical password is stored for both any http site and any https site (not necessarily same domain), and it is not used on the http site for X months, expire the http version. (This helps in cases where the hostname has changed, e.g. from mail.google.com to www.google.com.)  If the http site and the https site are same domain, we can expire the http password in <X months (this can help in cases where the website has upgraded to https, but the user's http password manager entry still exists and is open to attack).
#HSTS and preferring secure origins for passwords:
## If a site is HSTS, then there is no reason to have http data for that site. Hence, if a site is marked HSTS, and the user has any data (cookies, passwords, etc) that are not https-only/secure, immediately mark that data as https-only. (This helps if a site uses STS, but the user's privacy settings cause the password storage to outlive the STS storage.)
|Feature non-goals=Further ideas (these aren't non-goals, they just need to be worked out and defined more. Putting them here for lack of a better section to put them in)


# Assume we have implemented secure filling (javascript on the page can't read the password).  If the user prompts the password manager to fill in a password on an HTTP page and the form action has changed since the password was stored, don't send the password (might be tricky to implement).  Perhaps with an UI for user override.
(secure autofilling issue with ajax logins in mostly china)


# When the password field name is different from the name when the password was saved, don't allow secure filling & submit.  Moreover, don't allow javascript to dynamically change the name of the form??  See https://www.usenix.org/system/files/conference/usenixsecurity14/sec14-paper-silver.pdf section 5.2, Preventing self exfiltration attacks.
* Preventing local attacks:
*# Explore solutions for encrypting the passwords stored locally in the password manager (for example, make use of keychain or encryption mechanisms that come with the OS).


# If we don't allow javascript access to all password fields, could javascript on the page still grab key strokes?
* Duplicate Passwords - Protecting users from password reuse attacks
** If an identical password is stored for both any http site and any https site (not necessarily same domain), and it is not used on the http site for X months, expire the http version. (This helps in cases where the hostname has changed, e.g. from mail.google.com to www.google.com.)  If the http site and the https site are same domain, we can expire the http password in <X months (this can help in cases where the website has upgraded to https, but the user's http password manager entry still exists and is open to attack).


# Working on the credential management spec can help us in the long run with password detection and secure filling.
* HSTS: If a site is HSTS, then there is no reason to have http data for that site. Hence, if a site is marked HSTS, and the user has any data (cookies, passwords, etc) that are not https-only/secure, immediately mark that data as https-only. (This helps if a site uses STS, but the user's privacy settings cause the password storage to outlive the STS storage.)
|Feature non-goals=Further ideas/thoughts that are not fully investigated yet.  (These are not non-goals, they are just here for lack of a better section to put them in.)


# Only autofill forms after user interaction with the login page, not necessarily the form  - https://code.google.com/p/chromium/issues/detail?id=257156.  We need more details here.
* Assume we have implemented secure filling (javascript on the page can't read the password).  If the user prompts the password manager to fill in a password on an HTTP page and the form action has changed since the password was stored, don't send the password (might be tricky to implement).  Perhaps with an UI for user override. (There are secure autofilling issue with ajax logins, a technique used mostly in china per https://www.usenix.org/conference/usenixsecurity14/technical-sessions/presentation/silver)


* When the password field name is different from the name when the password was saved, don't allow secure filling & submit.  Moreover, don't allow javascript to dynamically change the name of the form??  See https://www.usenix.org/system/files/conference/usenixsecurity14/sec14-paper-silver.pdf section 5.2, Preventing self exfiltration attacks.


# Consider not autofilling passwords in following cases.  More investigation is needed here to make a decision:
* If we don't allow javascript access to all password fields, could javascript on the page still grab key strokes?
## If there are multiple login forms on a page??
## If the form action has changed since the password was stored. (To do this, we need to include the form action in the key, along with the url.  We'd need to check the action both on load and on submit.  What if it's a javascript action? More investigation needed here.)


* Working on the credential management spec can help us in the long run with password detection and secure filling.


# More on HSTS and preferring secure origins for passwords
* Only autofill forms after user interaction with the login page, not necessarily the form  - https://code.google.com/p/chromium/issues/detail?id=257156.  We need more details here.


##When clearing history, retain the STS bit if any other data associated with the site is retained. For example, in the common case of clearing all history other than passwords, retain the STS bits for sites that have passwords stored. (Potential privacy issue)
## If a password is stored in an http version of a site, see if the https version exists.  If it does, prompt the user to redirect to the https version of the site and store their password there instead.
|Feature ux design=What should the UX be when we do not autofill?
# Today the experience is that the user first has to type the username, and then the password will be filled in.
# We could have an autofill-and-submit option, so that there is still only one click for the user.  Instead of clicking "submit" they would click "fill and submit".  This way, we've added security without decreasing usability.
# To prevent clickjacking attacks, the UI for this could live somewhere in chrome; the user could interact with the some password manager directly instead of the webpage.


What should the UX be when we alert users of duplicate passwords?
* Consider not autofilling passwords in following cases.  More investigation is needed here to make a decision:
*# If there are multiple login forms on a page??
*# If the form action has changed since the password was stored. (To do this, we need to include the form action in the key, along with the url.  We'd need to check the action both on load and on submit.  What if it's a javascript action? More investigation needed here.)


Can we somehow expose the about:config option [http://kb.mozillazine.org/Signon.autofillForms signon.autofill] to users to prevent attacks on saved passwords in HTTPS pages (ex: XSS bugs on the victim site).
 
* More on HSTS - When clearing history, retain the STS bit if any other data associated with the site is retained. For example, in the common case of clearing all history other than passwords, retain the STS bits for sites that have passwords stored. (Potential privacy issue)
 
* Prefer secure origins - If a password is stored in an http version of a site, see if the https version exists.  If it does, prompt the user to redirect to the https version of the site and store their password there instead.
 
* Secure Filling 2.0
** Do not give javascript access to any password fields (regardless of whether the password manager saves the password) - the actual password the user enters is only used on submit.  The problem with this is with registration pages that use javascript to test the password strength.  [https://bugzilla.mozilla.org/show_bug.cgi?id=653132 Bug 653132]
|Feature ux design=* What should the UX be when we do not autofill?
*# Today the experience is that the user first has to type the username, and then the password will be filled in.
*# We could have an autofill-and-submit option, so that there is still only one click for the user.  Instead of clicking "submit" they would click "fill and submit".  This way, we've added security without decreasing usability.
*# To prevent clickjacking attacks, the UI for this could live somewhere in chrome; the user could interact with the some password manager directly instead of the webpage.
 
* What should the UX be when we alert users of duplicate passwords?
 
* Can we somehow expose the about:config option [http://kb.mozillazine.org/Signon.autofillForms signon.autofill] to users to prevent attacks on saved passwords in HTTPS pages (ex: XSS bugs on the victim site).
}}
}}
{{FeatureInfo
{{FeatureInfo
canmove, Confirmed users
285

edits