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,185