This talk is meant to discuss security issues in the spirit of helping those who build systems make stable, secure web applications.
Happy Path
Easiest thing possible
MVP
No unauthorized access.
Hardened
Tested
Grandma's cat photos
Your blog
Static content
Banking
Health information
Government
Big business
Payment systems
$$$ of loss potential
Office Space
Loss of consumer confidence
Restore the backup
Maybe a few comments lost since last backup
No animals were harmed
Grandma cries for a minute
(but verify)
"SELECT * FROM accounts WHERE custID='" + params.id +"'"
http://example.com/app/accountView?id=' or '1'='1
String hql = """from AccountHolder
where username = '$username'
and password = '$password'"""
def row = AccountTransaction.executeQuery(hql)
admin' AND substring(password,0,1) == char(64) AND '1' = '1
Or better tested sanitization tools
Grails 1.3.7 (pre 1.3.8)
class MyDomainObject {
def SpringSecurityService
...
}
“cp img.png ./archive/$filename”.execute()
log.info “user benign said ${message}”
http://example.com/thing/action?message=[ERROR] Admin password has expired!! OH CRAP HELP
def transfer(Transfer tfr) {
Deposit d = new Deposit(amount: tfr.amt)
d.save()
Withdrawal w = new Withdrawal(amount: tfr.amt, description: tfr.desc)
w.save()
}
http://example.com/sale/saleitems;jsessionid=2P0OC2JDPXM0OQSNDLPSKHCJUN2JV?dest=Hawaii
xkcd.com/936/
reviewText = """Excellent Product</div>
<iframe src="myadnetwork.com/pwnage.html"/>
<h1>Injected DOM</h1>
<div class='review'>Good work"""
view.gsp (codec = none)
<div class='review'>${reviewText}</div>
Direct execution
eval()
window.execScript()/function()/setInterval()/setTimeout()
script.src(), iframe.src()
https://example.com/account/123
https://example.com/account/999
Filters
ACL
Permissions
Trust but verify!
Ownership level checking Authorization
...for example
socat -v tcp-listen:8080,fork tcp:localhost:80
Poor salting
<img
src="http://example.com/app/transferFunds?amount=1500&destinationAccount=attackersAcct#"
width="0" height="0" />
URL Mappings
allowedMethods
Apple SSL issue
OSX/iOS