Cross Site Scripting (XSS) - PowerPoint PPT Presentation

About This Presentation
Title:

Cross Site Scripting (XSS)

Description:

Cross Site Scripting (XSS) David Wharton Intrusion Detection & Prevention Regions Financial Corp. Overview Introduction What is XSS? Is XSS Important? – PowerPoint PPT presentation

Number of Views:527
Avg rating:3.0/5.0
Slides: 35
Provided by: pct78
Category:

less

Transcript and Presenter's Notes

Title: Cross Site Scripting (XSS)


1
Cross Site Scripting (XSS)
  • David Wharton
  • Intrusion Detection Prevention
  • Regions Financial Corp.

2
Overview
  • Introduction
  • What is XSS?
  • Is XSS Important?
  • Exploiting XSS
  • Preventing XSS
  • BeEF Demo
  • Conclusion
  • Questions

3
Introduction
4
What is XSS?
  • XSS is a vulnerability that allows an attacker to
    run arbitrary JavaScript in the context of the
    vulnerable website.
  • XSS bypasses same-origin policy protection
  • The policy permits scripts running on pages
    originating from the same site to access each
    other's methods and properties with no specific
    restrictions, but prevents access to most methods
    and properties across pages on different sites.
  • The term origin is defined using the domain
    name, application layer protocol, and (in most
    browsers) TCP port
  • http//en.wikipedia.org/wiki/Same_origin_policy
  • Requires some sort of social engineering to
    exploit.

5
Types of XSS
  • Reflected XSS
  • Stored XSS (a.k.a. Persistent XSS)
  • DOM Based XSS

6
Reflected XSS
7
Reflected XSS Example
  • Exploit URL
  • http//www.nikebiz.com/search/?qltscriptgtalert('XS
    S')lt/scriptgtx0y0
  • HTML returned to victim
  • ltdiv id"pageTitleTxt"gt lth2gtltspan
    class"highlight"gtSearch Resultslt/spangtltbr /gt
    Search "ltscriptgtalert('XSS')lt/scriptgt"lt/h2gt

8
Reflected XSS Example
9
Stored XSS
  • JavaScript supplied by the attacker is stored by
    the website (e.g. in a database)
  • Doesnt require the victim to supply the
    JavaScript somehow, just visit the exploited web
    page
  • More dangerous than Reflected XSS
  • Has resulted in many XSS worms on high profile
    sites like MySpace and Twitter (discussed later)

10
DOM Based XSS
  • Occur in the content processing stages performed
    by the client
  • ltselectgtltscriptgt
  • document.write("ltOPTION value1gt"document.locatio
    n.href.substring(document.location.href.indexOf("d
    efault")8)"lt/OPTIONgt")
  • lt/scriptgtlt/selectgt
  • http//www.some.site/page.html?defaultASP.NET
  • /page.html?defaultltscriptgtalert(document.cookie)lt
    /scriptgt
  • Source http//en.wikipedia.org/wiki/Cross-site_sc
    ripting
  • Source http//www.owasp.org/index.php/DOM_Based_X
    SS

11
Is XSS Dangerous?
  • Yes
  • OWASP Top 2
  • Defeats Same Origin Policy
  • Just think, any JavaScript you want will be run
    in the victims browser in the context of the
    vulnerable web page
  • Hmmm, what can you do with JavaScript?

12
What can you do with JavaScript?
  • Pop-up alerts and prompts
  • Access/Modify DOM
  • Access cookies/session tokens
  • Circumvent same-origin policy
  • Virtually deface web page
  • Detect installed programs
  • Detect browser history
  • Capture keystrokes (and other trojan
    functionality)
  • Port scan the local network

13
What can you do with JavaScript? (cont)
  • Induce user actions
  • Redirect to a different web site
  • Determine if they are logged on to a particular
    site
  • Capture clipboard content
  • Detect if the browser is being run in a virtual
    machine
  • Rewrite the status bar
  • Exploit browser vulnerabilities
  • Launch executable files (in some cases)

14
Example Form Injection
15
Example Virtual Defacement
16
Example Pop-Up Alert
17
Example Cookie Stealing
18
Example XSS Worms
  • Samy Worm
  • Affected MySpace
  • Leveraged Stored XSS vulnerability so that for
    every visitor to Samys MySpace page, the
    following would silently happen
  • The visitor would be added as Sammys friend
  • The visitor would get an update to their page
    that infected it with the same JavaScript and
    left a message saying, but most of all, Samy is
    my hero.
  • Worm spread exponentially
  • Over 1 million friend requests in less than 20
    hours

19
Cause of Injection VulnerabilitiesImproper
Handling of User-Supplied Data
  • gt 80 of web security issues caused by this!
  • NEVER Trust User/Client Input!
  • Client-side checks/controls have to be invoked on
    the server too.
  • Improper Input Validation
  • Improper Output Validation
  • More details in next section

20
Preventing Injection Vulnerabilities In Your Apps
  • Validate Input
  • Letters in a number field?
  • 10 digits for 4 digit year field?
  • Often only need alphanumeric
  • Careful with lt gt " ' and
  • Whitelist (e.g. /a-zA-Z0-90,20/)
  • Reject, dont try and sanitize

21
Preventing XSS In Your Applications
  • Validate Output
  • Encode HTML Output
  • If data came from user input, a database, or a
    file
  • Response.Write(HttpUtility.HtmlEncode(Request.Form
    "name"))
  • Not 100 effective but prevents most
    vulnerabilities
  • Encode URL Output
  • If returning URL strings
  • Response.Write(HttpUtility.UrlEncode(urlString))
  • How To Prevent Cross-Site Scripting in ASP.NET
  • http//msdn.microsoft.com/en-us/library/ms998274.a
    spx
  • XSS Prevention Cheat Sheet
  • http//www.owasp.org/index.php/XSS_28Cross_Site_S
    cripting29_Prevention_Cheat_Sheet

22
RULE 0 - Never Insert Untrusted Data Except in
Allowed Locations (see rules 1-5)
  • ltscriptgt...NEVER PUT UNTRUSTED DATA
    HERE...lt/scriptgt directly in a script
  • lt!--...NEVER PUT UNTRUSTED DATA HERE...--gt inside
    an HTML comment
  • ltdiv ...NEVER PUT UNTRUSTED DATA HERE...test /gt
    in an attribute name
  • lt...NEVER PUT UNTRUSTED DATA HERE... href"/test"
    /gt in a tag name

23
RULE 1 - HTML Escape Before Inserting Untrusted
Data into HTML Element Content
  • ltbodygt...ESCAPE UNTRUSTED DATA BEFORE PUTTING
    HERElt/bodygt
  • ltdivgtESCAPE UNTRUSTED DATA BEFORE PUTTING
    HERElt/divgt
  • any other normal HTML elements

24
RULE 1 (continued)
  • Escape these characters
  • --gt amp
  • lt --gt lt
  • gt --gt gt
  • " --gt quot
  • ' --gt x27 apos is not recommended
  • / --gt x2F
  • forward slash is included as it helps end an HTML
    entity
  • Remember HttpUtility.HtmlEncode()

25
RULE 2 - Attribute Escape Before Inserting
Untrusted Data into HTML Common Attributes
  • ltdiv attrESCAPE UNTRUSTED DATA BEFORE PUTTING
    HEREgtcontentlt/divgt
  • inside UNquoted attribute
  • ltdiv attr'ESCAPE UNTRUSTED DATA BEFORE PUTTING
    HERE'gtcontentlt/divgt
  • inside single quoted attribute
  • ltdiv attr"ESCAPE UNTRUSTED DATA BEFORE PUTTING
    HERE"gtcontentlt/divgt
  • inside double quoted attribute
  • Except for alphanumeric characters, escape all
    characters with ASCII values less than 256 with
    the xHH format or named entity if available.
    Examples quot 39

26
RULE 3 - JavaScript Escape Before Inserting
Untrusted Data into HTML JavaScript Data Values
  • The only safe place to put untrusted data into
    these event handlers as a quoted "data value.
  • ltscriptgtalert('...ESCAPE UNTRUSTED DATA BEFORE
    PUTTING HERE...')lt/scriptgt inside a quoted string
  • ltscriptgtx'...ESCAPE UNTRUSTED DATA BEFORE
    PUTTING HERE...'lt/scriptgt one side of a quoted
    expression
  • ltdiv onmouseover"x'...ESCAPE UNTRUSTED DATA
    BEFORE PUTTING HERE...'"lt/divgt inside quoted
    event handler
  • Except for alphanumeric characters, escape all
    characters less than 256 with the \xHH format.
    Example \x22 not \

27
RULE 3 (continued)
  • But be careful!
  • ltscriptgt window.setInterval('...EVEN IF YOU
    ESCAPE UNTRUSTED DATA YOU ARE XSSED HERE...')
    lt/scriptgt

28
RULE 4 - CSS Escape Before Inserting Untrusted
Data into HTML Style Property Values
  • ltstylegtselector property  ...ESCAPE UNTRUSTED
    DATA BEFORE PUTTING HERE... lt/stylegt property
    value
  • ltspan styleproperty  ...ESCAPE UNTRUSTED DATA
    BEFORE PUTTING HERE...gttextlt/stylegt property
    value
  • Except for alphanumeric characters, escape all
    characters with ASCII values less than 256 with
    the \HH escaping format. Example \22 not \

29
RULE 5 - URL Escape Before Inserting Untrusted
Data into HTML URL Parameter Values
  • lta href"http//www.somesite.com?test...URL
    ESCAPE UNTRUSTED DATA BEFORE PUTTING
    HERE..."gtlinklt/a gt
  • Except for alphanumeric characters, escape all
    characters with ASCII values less than 256 with
    the HH escaping format. Example 22
  • Remember HttpUtility.UrlEncode()

30
Reduce Impact of XSS Vulnerabilities
  • If Cookies Are Used
  • Scope as strict as possible
  • Set secure flag
  • Set HttpOnly flag
  • On the client, consider disabling JavaScript (if
    possible) or use something like the NoScript
    Firefox extension.

31
Further Resources
  • XSS Prevention Cheat Sheet
  • http//www.owasp.org/index.php/XSS_28Cross_Site_S
    cripting29_Prevention_Cheat_Sheet
  • XSS Attacker Cheat Sheet
  • http//ha.ckers.org/xss.html
  • OWASP Enterprise Security APIs
  • http//www.owasp.org/index.php/CategoryOWASP_Ente
    rprise_Security_API
  • OWASP XSS Page
  • http//www.owasp.org/index.php/Cross-site_Scriptin
    g_28XSS29

32
Demo BeEF
  • Browser Exploitation Framework
  • Written by Wade Alcorn
  • http//www.bindshell.net/tools/beef/
  • Architecture

33
Conclusion
  • XSS vulnerabilities are bad.
  • Avoid introducing XSS vulnerabilities in your
    code.
  • Please. They will only cause delays in getting
    your apps into production.
  • Give me your email, I have a link you really
    need to see. ?

34
Questions?
  • Contact info
  • David Wharton
  • david.r.wharton_at_regions.com
  • 205.261.5219
Write a Comment
User Comments (0)
About PowerShow.com