doing drupal security right

54
Doing Drupal security right Gábor Hojtsy , Acquia May 7th 2011., Drupalcamp Stockholm With special thanks to Four Kitchens, Greg Knaddison and Jakub Suchy

Upload: gabor-hojtsy

Post on 08-May-2015

2.210 views

Category:

Technology


0 download

DESCRIPTION

Slides from Drupalcamp Stockholm 2011

TRANSCRIPT

Page 1: Doing Drupal security right

Doing Drupal security right

Gábor Hojtsy , Acquia

May 7th 2011., Drupalcamp StockholmWith special thanks to Four Kitchens, Greg Knaddison and Jakub Suchy

Page 2: Doing Drupal security right

Why I’m here?

• Maintainer for Drupal 6

• De-facto member of the security team

Page 3: Doing Drupal security right

Why are you here?

• Managers?

• Site builders?

• Themers?

• Developers?

Page 4: Doing Drupal security right
Page 5: Doing Drupal security right

Are you affected?

Page 6: Doing Drupal security right

With relatively simple holes, your administrator user can be taken over.

Page 7: Doing Drupal security right

Open Web Application Security Project’sTop 10 risks

http://owasptop10.googlecode.com/files/OWASP Top 10 - 2010.pdf

Page 8: Doing Drupal security right

Security misconfiguration

Page 9: Doing Drupal security right

Heard of the wordpress.com

attack?

Page 10: Doing Drupal security right

Secure server

• Avoid using FTP at all cost (Total Commander is an enemy)

• Who do you share your server with? Are you confident? Run other apps?

• Keep your OS, PHP, SQL server, etc. up to date

Page 11: Doing Drupal security right

Secure Drupal

• Is your admin password “admin”?

• Look at all “administer *” permissions

• “administer filters” can take over a site

• Use update.module, watch the security news (Wednesdays)

Page 12: Doing Drupal security right

Secure Drupal

• Avoid any kind of PHP input, write your own modules instead

• Look into using paranoia.module

• Watch your input formats (you can be googled)

Page 13: Doing Drupal security right

Injection

Page 14: Doing Drupal security right

index.php?id=12

mysql_query(“UPDATE mytable SET value = ‘”. $value .”’ WHERE id = ”. $_GET[‘id’]);

Page 15: Doing Drupal security right

Drupal approach

• db_query(“UPDATE {mytable} SET value = :value WHERE id = :id”, array(‘:value’ => $value, ‘:id’ => $id);

• If you need to include dynamic table or column names in your query, see db_escape_table()

Page 16: Doing Drupal security right

Cross Site Scripting (XSS)

Page 17: Doing Drupal security right

index.php?id=12print $_GET[‘id’];

$output .= $node->title;

Giving full HTML access.

Page 18: Doing Drupal security right

likeliness a website hasCross site scripting issues

64%https://www.whitehatsec.com/assets/presentations/11PPT/PPT_topwebvulns_030311.pdf

Page 19: Doing Drupal security right

Example from Heine Deelstra, Drupal Security team leadhttp://heine.familiedeelstra.com/change-password-xss

jQuery.get('/user/1/edit', function (data, status) { if (status == 'success') { var p = /id="edit-user-edit-form-token" value="([a-z0-9]*)"/; var matches = data.match(p); var token = matches[1]; var payload = { "form_id": 'user_edit', "form_token": token, "pass[pass1]": 'hacked', "pass[pass2]": 'hacked' }; jQuery.post('/user/1/edit', payload); } });

Page 20: Doing Drupal security right

Drupal approach

• check_plain() to escape text to HTML

• check_markup() to format text to HTML

• filter_xss() to filter text to HTML

• filter_xss_admin() to filter admin text to HTML

• node_view($node) instead of $node->body

Page 21: Doing Drupal security right

Drupal approach

• t(), format_plural() placeholders:%name, @url, !insecure

t(‘%name has a blog at <a href=”@url”>@url</a>’, array(‘@url’ => valid_url($user->profile_blog), ‘%name’ => $user->name));

• Use Drupal.t(), Drupal.formatPlural() in JS.

Page 22: Doing Drupal security right

Always consider the type of output needed

Page 23: Doing Drupal security right

Authentication& sessions

Page 24: Doing Drupal security right

•Weak password storage and account management

•Session hijacking / fixation

•Lack of session timeout / logout

Page 25: Doing Drupal security right

Drupal approach

• Passwords are stored encrypted

• Session IDs changed when permissions change

• Drupal works with Apache’s SSL transport

• Modules to set certain URLs to use SSL

Page 26: Doing Drupal security right

Insecure direct object references

Page 27: Doing Drupal security right

index.php?id=12

db_query(“SELECT * FROM {node} WHERE nid = :id”, array(‘:id’ => $_GET[‘id’]));

Page 28: Doing Drupal security right

Drupal approach

• Menu system handles permission checking

• user_access(‘administer nodes’, $account)

• node_access(‘edit’, $node, $account);

• $select->addtag(‘node_access’);

• Form API checks for data validity

Page 29: Doing Drupal security right

Cross Site Request Forgery (CSRF)

Page 31: Doing Drupal security right

http://example.com/index.php?delete=12

<img src=”http://example.com/index.php?delete=12” />

Page 32: Doing Drupal security right

Drupal approach

• Form API works with POST submissions by default (makes it harder)

• Form API includes form tokens, requires form retrieval before submission, checks valid values

• drupal_valid_token() provided to generate/validate tokens for GET requests

Page 33: Doing Drupal security right

Insecure cryptographic

storage

Page 34: Doing Drupal security right

Drupal approach

• Drupal stores user passwords encrypted with a one-way hash

• Different randomly generated private key is provided on each site, which can be used to do reversible encryption

• Up to you to ensure backups are properly protected

Page 35: Doing Drupal security right

Failure to restrictURL access

Page 36: Doing Drupal security right

Drupal approach

• Menu system uses access callback and access arguments

• Continually review permissions

Page 37: Doing Drupal security right

Insufficient transport protection

Page 39: Doing Drupal security right

Unvalidated redirects

Page 41: Doing Drupal security right

Drupal approach

• Drupal has various internal redirections, which use local paths and generate URLs based on them

• Look for use of drupal_goto() and Form API #redirect instances in your modules to validate their compliance

Page 42: Doing Drupal security right

Is Open Source secure?

Page 43: Doing Drupal security right

“Open Source is secure”

• Open Source makes people look at it

• Popularity gets more eyes

• There are always more smart people to find and fix problems

Page 44: Doing Drupal security right

“Open Source is insecure”

• People can equally find holes

• Some people (inadvertently) disclose issues in the public

• Fix becomes public and can / will be reviewed

Page 45: Doing Drupal security right

Is Drupal secure?

Page 46: Doing Drupal security right

Developers and users

• Drupal APIs are designed to be secure

• It is eventually up to programmers to use them that way

• http://drupal.org/writing-secure-code

• Tools designed for security can still be misconfigured

Page 47: Doing Drupal security right

Drupal security team

A team of volunteers working to ensure best security of Drupal and thousands of contributed modules

Page 48: Doing Drupal security right

Design. Educate. Fix.

Page 49: Doing Drupal security right

What’s supported?

• Drupal core and all(!) contributed projects on drupal.org

• Not actively looking for vulnerabilities in contributed modules

• Stable releases (development versions only for very popular modules)

• Only current and one earlier versions are supported: now 7.x and 6.x

Page 51: Doing Drupal security right
Page 52: Doing Drupal security right

These slides are (CC)Images used:

http://www.flickr.com/photos/rtv/2398561954/

http://www.flickr.com/photos/jonk/19422564/

http://www.flickr.com/photos/duncan/2693141693/

http://www.flickr.com/photos/duncan/2742371814

http://www.flickr.com/photos/jontintinjordan/3736095793/

http://www.flickr.com/photos/djbrady/2304740173/

http://www.flickr.com/photos/inkytwist/2654071573/

http://www.flickr.com/photos/duncan/2741594585/

http://www.flickr.com/photos/shellysblogger/2924699161/

http://www.flickr.com/photos/blogumentary/434097609/

http://www.flickr.com/photos/glamhag/2214986176/

http://www.flickr.com/photos/duncan/2693140217/

This presentation created by Gábor HojtsyLicensed: http://creativecommons.org/licenses/by-nc-sa/2.0/

Page 53: Doing Drupal security right

Questions?

Page 54: Doing Drupal security right

Thank you!Gábor Hojtsy, Acquia

@gaborhojtsy