Security
XSS
- The attacker submit a form with html code
	
- javascript
 - a fake login form
 
 - The victim browse a page which contains those data and unwittingly execute the code
	
- The page may not be related to the initial form used by the attacker (ie: the admin panel)
 
 
XSS
- The attacker forge a link wich contains malicious code
 - The victim follow the link and get the a page which execute the code
	
- ie: lost_password?email=...
 
 
XSS
- The attacker upload an html file wich contains maliscious code
	
- fake login page
 - retrieve cookie and other local informations
 
 
XSS
- escape output
 - use framework (twig)
	
- do not disable the security
 
 - force browser to download uploaded files
	
- disposition: attachement
 
 
CSRF
- The attacker forge a link to an unsecured page
	
- could be GET or POST
 
 - 
The victim, throught it browser and it session execute the maliscious code
	
- ie: <img src="http://site.com/users/123/delete">
 
 
CSRF
- Use unguessable token in each "write actions"
 - Activated by default with Symfony2
 
Retrieve list of user
- When a page display differents message according to the error
	
- "User does not exists" vs "Incorrect password"
 - login page AND password lost
 - irrelevant if the application contains a sigup page
 
 
Counting entities
- When the information could be strategycal
	
- invoice-2015-001
 - /api/virtual-machine/24
 
 
Horizontal privilege escalation
- always check if the user is allowed to access to the resources
	
- isGranted()
 - voters
 
 - do not forget uploaded files
	
- even if the resource is marked as shared
 - especially if the path to the resource is guessable
 
 
Password autocompletion
- The attacker has access to the victim's machine
 - Retrieve the password from the browser's storage
 
Password autocompletion
- Add autocomplete=off
 
FileSystem manipulation
- When the application allows the user to create folders and upload files
 - The attacker can "browse" outside the "application's root" directory by using ".." in the path
 
FileSystem manipulation
- Assert the real_path of path starts with the root directory
 
Code execution
- The attacker upload a PHP file. It can run it throught the "download" link
 
- The attacker upload PHP script name foo.jpg
 - Then he upload a .htaccess which add and handler for .jpg files
 
Code execution
- Block htaccess files (AllowOverride: None)
 - Use a front controller
 - Rename files
 
System call
- The attacker can run system command
	
- exec
 - passthru
 - shell_exec
 - system
 - proc_open
 - popen
 - curl_exec
 - curl_multi_exec
 - parse_ini_file
 - show_source
 - ``
 
 
System call
- The attacker force the script to execute a remote script
	
- include_once $_GET['action'];
 
 
System call
- If possible disable those functions with the directive disable_functions
 - sets allow_url_fopen to false (use Guzzle/curl to retrieve remote resources)
 
Unsecured cookies
- Without HTTPS, the cookies are readables.
 - The attacker can steal the sessionId
 
- The cookies can be handle with javascript
 - The attacker can read the sessionId thanks to an XSS
 
Unsecured cookies
- add the flag "secure" to the cookie
 - add the flag "HttpOnly" to the session's cookie
 
framework:
  session:
    cookie_secure:   true
    cookie_httponly: true
Unsecure SSL
- Using an expired certificat
 - Using weak algorithme (sha1)
 - Allowing a weak algorithme (rc4)
 
Unsecure SSL
- https://www.ssllabs.com/ssltest/analyze.html
	
- SSLProtocol ALL -SSLv2 -SSLv3
 - SSLHonorCipherOrder on
 - SSLCipherSuite ALL:!LOW:!aNULL:!md5:!RC4
 
 
Unsupported versions
- OS
 - Kernel
 - WebServer (apache/nginx)
 - PHP
 - packages
 
Unsupported versions
- apt-get upgrade
 - apt-get dist-upgrade / reinstall
 - docker pull
 - composer update
 - don't fix the versions (use "^")
 
Security should not be an option
Nadim Kobeissi
- Display the site with HTTP and/or HTTPS ?
 - No the choice HTTP does not exists
 
Security
By Jérémy DERUSSÉ
Security
- 1,318