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

Doing Drupal security right

Embed Size (px)

DESCRIPTION

Slides from Drupalcamp Stockholm 2011

Citation preview

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