CS-527 Software Security
Web security
       Asst. Prof. Mathias Payer
         Department of Computer Science
               Purdue University
             TA: Kyriakos Ispoglou
https://nebelwelt.net/teaching/17-527-SoftSec/
                Spring 2017
                                    Command injection
Table of Contents
1   Command injection
2   SQL injection
3   Cross Site Scripting (XSS)
4   Summary and conclusion
Mathias Payer (Purdue University)          CS-527 Software Security   2017   2 / 23
                                    Command injection
Dynamic web pages
       Dynamic web pages execute code on the server.
       This allows the web server to add content from other sources
       (e.g., databases) and provide rich interfaces back to the user.
       Build and combine complex parts dynamically and send the final
       result to the user (e.g., a content management system that loads
       contents from the database, intersects it with the site template,
       adds navigation modules and other third party modules).
Mathias Payer (Purdue University)          CS-527 Software Security   2017   3 / 23
                                    Command injection
Command injection
display.php
<html><head><title>Display a file</title></head>
<body>
<? echo system("cat ".$_GET[’file’]); ?>
</body></html>
       How can this script be attacked?
       display.php?file=info.txt%3bcat%20%2fetc%2fpasswd
       ; allows chaining of individual commands.
       system is a powerful command that executes full shell scripts.
Mathias Payer (Purdue University)          CS-527 Software Security   2017   4 / 23
                                    Command injection
Command injection mitigation
       Can we just block ;?
       Blacklisting is usually not a good solution as attack space may
       be infinite.
       What about using a pipe.
       What about using a backtick.
       What about using alternative commands (e.g., cat instead of
       rm).
       Even the shell itself has many inbuilt commands.
Mathias Payer (Purdue University)          CS-527 Software Security   2017   5 / 23
                                    Command injection
Mitigation through validation
       Ensure that the filename matches a set of allowed filenames.
       Non-alphanumeric characters are needed to execute alternate
       functionality.
       Fix both directory and set of allowed files.
       Disallow special characters in the file name.
Mathias Payer (Purdue University)          CS-527 Software Security   2017   6 / 23
                                    Command injection
Mitigation through escaping
       Escape parameters so that interpreter can distinguish between
       data (channel) and control (channel).
       Escaped form: system("cat ’file.txt’).
       How do you write such an escape function?
       You don’t – there’s a huge potential for error. Use built-in ones.
       Each language has its own flavours of escape functions.
Mathias Payer (Purdue University)          CS-527 Software Security   2017   7 / 23
                                    Command injection
Mitigation through reduction of privileges
       The system command is immensely powerful as it launches a
       new shell interpreter.
       Fall down to simplest possible API: open the file yourself and
       read it into a buffer or, if you must execute a command, launch
       it directly and not through the shell.
Mathias Payer (Purdue University)          CS-527 Software Security   2017   8 / 23
                                    Command injection
Generalized injection attacks
       What enables injection attacks?
       Both code and data share the same channel.
       In the system example above, cat and file are specified as part of
       the same “shell script” where ; starts a new command.
       In code injection the data on the stack and the executed code
       share the same channel (as do code pointers).
Mathias Payer (Purdue University)          CS-527 Software Security   2017   9 / 23
                                    SQL injection
Table of Contents
1   Command injection
2   SQL injection
3   Cross Site Scripting (XSS)
4   Summary and conclusion
Mathias Payer (Purdue University)     CS-527 Software Security   2017   10 / 23
                                    SQL injection
SQL injection example
User authentication
$sql = ”SELECT * FROM users WHERE email=’” . $ GET[’email’]
. ”’ AND pass=’” . $ GET[’pwd’] . ’;”
       What is wrong with this query?
       An attacker may inject ’ to escape queries and inject commands.
       (Also, the password is not hashed but stored in plaintext.)
Mathias Payer (Purdue University)     CS-527 Software Security   2017   11 / 23
                                    SQL injection
More SQL injection
       An attacker may set email to ”root@acme.com’–”.
       Or ”root@acme.com’; DROP TABLE users;–”.
       Or insert a new user into the database.
       SQL injection is, in spirit, the same attack as code injection or
       command injection.
Mathias Payer (Purdue University)     CS-527 Software Security   2017   12 / 23
                                    SQL injection
SQL injection mitigation
       The same as before: validation, escaping, or reduction of
       privileges.
       Always ensure to check/validate/protect all parameters.
       Validation checks for valid input of values.
       Escaping ensures that illegal values are escaped.
       Reduction of privileges is best strategy.
Mathias Payer (Purdue University)     CS-527 Software Security   2017   13 / 23
                                    SQL injection
SQL injection mitigation
       Separate control and data channel: prepared SQL statements.
       Similar to printf, define “format” string and supply arguments.
       Supported by all web frameworks and DB connectors.
       sql("SELECT * FROM users WHERE email=$1 AND
       pwd=$2", email, pwd)
Mathias Payer (Purdue University)     CS-527 Software Security   2017   14 / 23
                                Cross Site Scripting (XSS)
Table of Contents
1   Command injection
2   SQL injection
3   Cross Site Scripting (XSS)
4   Summary and conclusion
Mathias Payer (Purdue University)              CS-527 Software Security   2017   15 / 23
                                Cross Site Scripting (XSS)
Cross Size Scripting (XSS)
Definition
XSS allows an attacker to inject and execute JavaScript (or other
content) in the context of another web page (e.g., malicious
JavaScript code that is injected into the banking web page of a user
to extract user name and password or to issue counterfeit
transactions).
Mathias Payer (Purdue University)              CS-527 Software Security   2017   16 / 23
                                Cross Site Scripting (XSS)
The XSS family
   1   Persistent/stored XSS (i.e., code is stored at the server).
   2   Reflected XSS (i.e., the code is reflected through the server but
       not stored there).
   3   Client-side XSS (i.e., the code leverages a client-side
       vulnerability).
Mathias Payer (Purdue University)              CS-527 Software Security   2017   17 / 23
                                Cross Site Scripting (XSS)
Persistent XSS
       The attacker stores the attack data on the server itself.
       A simple chat application allows users to store arbitrary text that
       is then displayed to other logged in users.
       The attacker may send a message that contains “
       <script>alert(’Mr. Evil here’);</script>
       ”.
       This code is then executed on all logged in clients when the
       server sends them the chat message of Mr Evil.
       Common use case: feedback forms, blog comments, or even
       product meta data (you don’t have to see it to execute it).
       The bug is on the server side (usually missing sanitization).
Mathias Payer (Purdue University)              CS-527 Software Security   2017   18 / 23
                                Cross Site Scripting (XSS)
Reflected XSS
       The attacker encodes the attack data in the link that is then
       sent to the user (e.g., through email or on a compromised site).
       A web interface may return your query as part of the results
       (i.e., ”Your search for ’query’ return 23 results.”).
       This attack requires the user to follow the attacker controlled
       link!
       This attack is often possible in search forms or other input that
       is not validated/cleaned.
       Many scripts also forget to screen both GET and POST
       requests.
       The bug is on the server side (usually missing sanitization).
Mathias Payer (Purdue University)              CS-527 Software Security   2017   19 / 23
                                Cross Site Scripting (XSS)
Client-side XSS
       Larger applications contain a lot of JavaScript code. This code
       itself may also contain vulnerabilities on the client side.
       JavaScript may use URL parameters to, e.g., display user names
       or process information (think JSON requested data that is
       processed in the background).
       Attacker must make user follow the compromised link but,
       compared to reflected XSS, the server does not embed the
       JavaScript code into the page through server side processing but
       the user-side JavaScript parses the parameters and misses the
       attack.
       Missing input validation and sanitization in the client side code
       allows the attacker to inject code into the client-side processing.
Mathias Payer (Purdue University)              CS-527 Software Security   2017   20 / 23
                                    Summary and conclusion
Table of Contents
1   Command injection
2   SQL injection
3   Cross Site Scripting (XSS)
4   Summary and conclusion
Mathias Payer (Purdue University)               CS-527 Software Security   2017   21 / 23
                                    Summary and conclusion
Summary
       The web can be attacked through different attack vectors, not
       just memory corruption.
       Command injection allows an attacker to inject shell commands
       into the execution flow.
       SQL injection allows an attacker to inject SQL commands from
       a web application into the database.
       XSS allows the attacker to execute malicious JavaScript code in
       the context of another web application.
       All three types of attacks share the common problem that code
       and data are not separated.
Mathias Payer (Purdue University)               CS-527 Software Security   2017   22 / 23
                                    Summary and conclusion
Questions?
Mathias Payer (Purdue University)               CS-527 Software Security   2017   23 / 23