infrastructure | developer advocate · nosql means no security? philipp kre! 4 4 4 4@xer"...

52
NoSQL MEANS no SECURITY? Philipp Kre @xer

Upload: others

Post on 29-May-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

NoSQLMEANS no SECURITY?

Philipp Krenn @xeraa

Page 2: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

INFRASTRUCTURE | DEVELOPER ADVOCATE

Page 3: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

ViennaDBPapers We Love Vienna

Page 4: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript
Page 5: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript
Page 6: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript
Page 7: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

SQL Injections?

Page 8: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

JavaScript InjectionHTTP://WWW.KALZUMEUS.COM/2010/09/22/SECURITY-LESSONS-LEARNED-FROM-THE-DIASPORA-LAUNCH/

def self.search(query) Person.all('$where' => "function() { return this.diaspora_handle.match(/^#{query}/i) || this.profile.first_name.match(/^#{query}/i) || this.profile.last_name.match(/^#{query}/i); }")end

Page 9: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Problem JS Evaluation$where

db.eval()

db.runCommand( { mapReduce:

db.collection.group()

Page 10: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Solution JS EvaluationDEACTIVATE: --noscripting OR security.javascriptEnabled: false

ESCAPE: CodeWScope

Page 11: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Saarbrücker Cybersicherheits-Studenten entdecken bis zu 40.000 ungesicherte

Datenbanken im Internet— http://www.uni-saarland.de/nc/aktuelles/artikel/nr/12173.html

Page 12: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Bound to all interfaces by default?

Page 13: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Authentication enabled by default?

Page 14: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Authentication & Authorization

Page 15: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Enableauth=true

Page 16: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

<3.0MONGODB CHALLENGE RESPONSE

MONGODB-CR

Page 17: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

>=3.0IETF RFC 5802

SCRAM-SHA-1

Page 18: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

SCRAM-SHA-1CONFIGURABLE iterationCount

SALT PER USER INSTEAD OF SERVERSHA-1 INSTEAD OF MD5

SERVER AUTHENTICATES AGAINST THE CLIENT AS WELL

Page 19: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Predefined Rolesread / readAnyDatabase

readWrite / readWriteAnyDatabasedbAdmin / dbAdminAnyDatabase

userAdmin / userAdminAnyDatabasedbOwner

BACKUP, RESTORE, CLUSTER MANAGEMENT,...

Page 20: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

$ mongod --noauth --port 27017 --dbpath test/ --logpath testlog

$ mongo localhost/admin> db.createUser({ user: "philipp", pwd: "password", roles: [ { role: "root", db: "admin" } ]})> db.system.users.find()> exit

Page 21: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

$ mongod --auth --port 27017 --dbpath test/ --logpath testlog

$ mongo localhost/admin> show dbs> exit

$ mongo localhost/admin -u philipp -p --authenticationDatabase admin> show dbs> db.createUser({ user: "alice", pwd: "password", roles: [ { role: "read", db: "testA" }, { role: "readWrite", db: "testB" } ]})> db.system.users.find()> exit

Page 22: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

$ mongo localhost/testA -u alice -p --authenticationDatabase admin --norc> db.test.insert({ foo: "bar" })> db.test.find()> use testB> db.test.insert({ foo: "bar" })> db.test.find()> use testC> db.test.find()

Page 23: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

SSL CommercialOR SELF-COMPILED

Page 24: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript
Page 25: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Bound to all interfaces by default?

Page 26: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

SINCE 3.2.0 (2016/05)

Protected ModeANSWER LOCAL QUERIES

RESPOND WITH AN ERROR FOR REMOTE

Page 27: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Authentication & Authorization

Page 28: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

a tiny layer of authentication— http://redis.io/topics/security

Page 29: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

AUTH <password> COMMAND

PLAIN-TEXT PASSWORD IN REDIS.CONF

NO (BUILT-IN) SSL OR RATE LIMITS

Page 30: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Hiding Commands

Page 31: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

SET IN REDIS.CONF

RESET AFTER RESTART

Page 32: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

rename-command CONFIG mysecretconfigname

Page 33: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

rename-command CONFIG ""

Page 34: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

PS: Don't Pass in Random Lua Scripts

Page 35: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript
Page 36: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

HTTPS://WWW.ELASTIC.CO/COMMUNITY/SECURITYCVE-2014-3120 (6.8): Dynamic scriptingCVE-2014-6439 (4.3): CORS misconfigurationCVE-2015-1427 (6.8): Groovy sandbox escapeCVE-2015-3337 (4.3): Directory traversalCVE-2015-4165 (3.3): File modificationsCVE-2015-5377 (5.1): RCE related to GroovyCVE-2015-5531 (5.0): Directory traversal

Page 37: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

HTTPS://WWW.ELASTIC.CO/COMMUNITY/SECURITYCVE-2014-3120 (6.8): Dynamic scripting

CVE-2015-1427 (6.8): Groovy sandbox escape

CVE-2015-5377 (5.1): RCE related to Groovy

Page 38: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Painless

Page 39: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

HIRED DEVELOPER

1 YEAR DEVELOPMENT

Page 40: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Why build a brand new language when there are already so many to choose

from?— https://www.elastic.co/blog/painless-a-new-scripting-language

Page 41: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

GoalSECURE & PERFORMANT

Page 42: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

{"name": "Philipp", "goals": [9,27,15], "assists": [0,0,0]}

GET /hockey-stats/_search{ "query": { "function_score": { "script_score": { "script": { "lang": "painless", "inline": "int total = 0; for (int i = 0; i < input.doc.goals.size(); ++i) { total += input.doc.goals[i]; } return total;" } } } }}

Page 43: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

STATIC & DYNAMIC TYPESLIST, MAP, AND ARRAY INITIALIZERS

SHORTCUTS RELATED TO MAPS AND LISTSBUILT-IN REGULAR EXPRESSIONS

LAMBDA EXPRESSIONSPERFORMANCE SIMILAR TO JAVA

METHOD AND FIELD LEVEL WHITELISTING (NO <class>.forName)SCORING SCRIPTS

Page 44: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

PAINLESS DEFAULT

GROOVY, PYTHON, JAVASCRIPT DEPRECATED

Page 45: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

PS: Authentication, Authorization & SSL

Page 46: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Conclusion

Page 47: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Injections Are Still a Thing

Page 48: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Enable Security by Default

Page 49: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Be Creative — or not

Page 50: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Custom Scripting Can Make Sense

Page 51: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Security Takes Time

Page 52: INFRASTRUCTURE | DEVELOPER ADVOCATE · NoSQL MEANS no SECURITY? Philipp Kre! 4 4 4 4@xer" INFRASTRUCTURE | DEVELOPER ADVOCATE. Vie!aDB Papers We Love Vie!a. SQL Injections? JavaScript

Thanks!QUESTIONS?

Philipp Krenn @xeraaPS: STICKERS