Screencast: Brakeman

Brakeman ist ein Ruby-Gem mit dem der eigene Ruby-Code innerhalb einer Rails Applikation auf bekannte Sicherheitslücken geprüft werden kann. In diesem Screencast zeigt Ryan wie es eingesetzt werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

terminal

[bash]
gem install brakeman
rbenv rehash
brakeman
brakeman -o brakeman.html
bundle update rails
brakeman –rake
[/bash]

config/application.rb

[ruby]
config.active_record.whitelist_attributes = true
[/ruby]

products_controller.rb

[ruby]
def index
direction = params[:direction] == "desc" ? "desc" : "asc"
@products = Product.order("name #{direction}")
end
[/ruby]

sessions_controller.rb

[ruby]
redirect_to redirect_url, only_path: true
[/ruby]

models/user.rb

[ruby]
validates_format_of :name, with: /Aw+z/
[/ruby]

Gemfile

[ruby]
gem ‚brakeman‘, group: :development
[/ruby]

Screencast: Session Hijacking

Wenn nach einer Benutzer-Authentifizierung die zugehörigen Cookies über eine unsichere Verbindung ausgetauscht werden, kann dies das Ziel für Session-Hijacking-Angriffe werden. Was in einem solchen Fall getan werden muss und wie dies vermieden werden kann zeigt Ryan in diesem Screencast.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

terminal

[bash]
sudo tcpdump -i lo0 -A
curl http://todo.dev/
curl http://todo.dev/ -H ‚Cookies: …‘
curl https://todo.dev/ -k -H ‚Cookies: …‘
[/bash]

config/environments/production.rb

[ruby]
config.force_ssl = true
[/ruby]

sessions_controller.rb

[ruby]
cookies.signed[:secure_user_id] = {secure: true, value: "secure#{user.id}"}
# …
cookies.delete(:secure_user_id)
[/ruby]

application_controller.rb

[ruby]
def current_user
if !request.ssl? || cookies.signed[:secure_user_id] == "secure#{session[:user_id]}"
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
end
[/ruby]

Screencast: APIs schützen

Es gibt viele Möglichkeiten den Zugriff auf APIs zu schützen. In diesem Screencast zeigt Ryan erst einen möglichen Schutz über HTTP Basic Auth und später über Tokens die als Parameter übertragen werden.

 

Downloads in verschiedenen Formaten:

mp4
mp4
webm
ogg

 

Resourcen:

terminal

[bash]
rails g model api_key access_token
curl http://localhost:3000/api/products -I
curl http://localhost:3000/api/products -u ‚admin:secret‘
curl ‚http://localhost:3000/api/products?access_token=123‘ -I
curl http://localhost:3000/api/products -H ‚Authorization: Token token="c576f0136149a2e2d9127b3901015545"‘
[/bash]

api/v1/products_controller.rb

[ruby]
# http_basic_authenticate_with name: "admin", password: "secret"
before_filter :restrict_access

private

# def restrict_access
# api_key = ApiKey.find_by_access_token(params[:access_token])
# head :unauthorized unless api_key
# end

def restrict_access
authenticate_or_request_with_http_token do |token, options|
ApiKey.exists?(access_token: token)
end
end
[/ruby]

models/api_key.rb

[ruby]
before_create :generate_access_token

private

def generate_access_token
begin
self.access_token = SecureRandom.hex
end while self.class.exists?(access_token: access_token)
end
[/ruby]

Release Candidate Rails 3.1.0.rc6

Heute wurde ein weiterer Release-Kandidat für Rails 3.1 veröffentlicht. Wie Rails 3.0.10 und 2.3.14 enthält diese Version Fixes für ein paar Sicherheitslücken die entdeckt wurden.

Die Anpassung sind wie gewohnt in den Changelogs verfügbar:

Changelog Rails 3.1.0: https://github.com/rails/rails/compare/v3.1.0.rc5…v3.1.0.rc6

Security Update für Rails 3.0.10 und 2.3.14

Heute sind neue Version für Rails 3 und 2 erschienen. Die neue Version behebt ein paar Sicherheitslücken und Nutzer sollten wenn möglich auf Ihre Applikationen aktualisieren.

Die Liste der Fixes sind in den jeweiligen Changelogs aufgelistet:

Rails 3.0.10: https://github.com/rails/rails/compare/v3.0.9…v3.0.10

Rails 2.3.14: https://github.com/rails/rails/compare/v2.1.12…v2.1.14

 

 

 

 

 

 

 

 

Rails 3.0.6 Sicherheitsupdate veröffentlicht

Rails ist in der Version 3.0.6 als Sicherheitsupdate erschienen. Das geschlossene Sicherheitsleck betrifft einen möglichen Angriff über XSS. Dabei kann bei der Verwendung von auto_link Fremdcode eingeschleust werden.

Wenn folgendes in der View verwendet wird:

<%= auto_link(params[:content]) %>

Kann unter bestimmten Vorraussetzungen über „content“ unerwünschter JavaScript-Code eingeschleust werden.

Um sich gegen diese Lücke zu schützen, ….

  • … auf Rails 3.0.6 aktualisiert werden
  • … der folgende Patch eingespielt werden: Patch
  • … wenn Update oder das Patchen nicht möglich ist, kann händisch das Problem umgangen werden
    • <%= sanitize(auto_link(params[:content])) %>
    • bei vertrauenswürdigen Quellen
      <%= raw(auto_link(params[:content])) %>

Weitere Details zu dem Release findet ihr unter folgendem Link: –> Link

Neue Rails Releases (Sicherheitsupdate)

Dieses Release schlißt eine Sicherheitslücke, die unter bestimmten Umständen von Angreifern ausgenutzt werden kann, um die CSRF Schutzmaßnahmen zu umgehen. Betroffen von diesem Problem sind die Rails-Versionebn 2.1.0 und neuer. Applikationen die den CSRF Schutz nicht verwenden sind nicht betroffen.

Das Problem wurde in  Rails 3.0.4  und Rails 2.3.11 behoben. Das Update kann über wie gewohnt über RubyGems erfolgen.

Wenn ein Update übr Gems nicht möglich ist, können folgende Patches verwendet werden:

Weitere Details sind hier erhältlich: http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+RidingRails+%28Riding+Rails%29

Security: Sicherheitsupdate für Mail (betrifft Rails)

Mikel Lindsaar hat eine neue Vesion des mail gems veröffentlicht, dass eine mögliche Sicherheitslücke mit der „sendmail delivery“ Methode schließt. Die Lücke ermöglicht unter bestimmten Umständen das Ausführen von Kommandos auf dem betroffenen System. Rails Applikationen welche die „sendmail delivery“ Methode nicht verwenden, sind nicht davon betroffen.

Betroffene Version:      2.2.14 und früher
Korrigierte Version:         2.2.15 und danach

 

Auswirkung
——————————————————————

Angreifer können unter bestimmten Bedingungen eine modifizierte Email verfassen, um Shell-Kommandos auf dem betroffenen System auszuführen. Benutzer früherer Version des gems (kleiner 2.2.14) wird empfohlen Ihr System baldsmöglich zu aktualisieren bzw. anzupassen.
Ab Mail-Version 2.2.15 ist der Fehler korrigiert und das Gem steht auf RubyGems.org zum Download bereit.

Bei der Verwendung von Bundler, sollte das Gemfile entsprechend angepasst…

[ruby]
gem "mail", "~> 2.2.15"
[/ruby]

…und danach die Aktualisierung über folgenden Befehl angestossen swerden

[bash]
$ bundle install
[/bash]

 

Workarounds
——————————————————————
Das Anpassen der Versand-Methode nach SMTP oder File behebt die Lücke in der Applikation ebenfalls.
Details wie SMTP oder File verwendet werden kann gibt es unter folgenden Links:
http://rdoc.info/github/mikel/mail/master/Mail/SMTP
http://rdoc.info/github/mikel/mail/master/Mail/FileDelivery

 

Patch
——————————————————————
Wenn ein komplettes Update nicht möglich oder nicht gewünscht ist, kann auch den entsprechenden Patch benutzen.
Der Patch steht hier zum Download bereit:
https://github.com/mikel/mail/raw/master/patches/20110126_sendmail.patch

Screencast: attr_accessible dynamisch setzen

Um Attribute eines Datenbank-Objekts zu schützen, kann in Rails auf attr_accessible zurückgegriffen werden. Damit wird verhindert, dass bei Mass Assingments bestimmte Attribute nicht verändert werden. Wenn der Zugriff/die Veränderung auf Basis von Zugriffsrechten erfolgen soll, muss attr_accessible dynamisch gesetzt werden. Wie dies funktioniert, zeigt Ryan in diesem Screencast

 

Download:

Download(16 MB, 9:12)
Alternativer Download für iPod & Apple TV(15 MB, 9:12)

 

Resourcen:

 

Quellcode:

[ruby]
# config/initializers/accessible_attributes.rb
class ActiveRecord::Base
attr_accessible
attr_accessor :accessible

private

def mass_assignment_authorizer
if accessible == :all
self.class.protected_attributes
else
super + (accessible || [])
end
end
end

# models/article.rb
class Article < ActiveRecord::Base
attr_accessible :name, :content
end

# articles_controller.rb
def create
@article = Article.new
@article.accessible = :all if admin?
@article.attributes = params[:article]
if @article.save
flash[:notice] = "Successfully created article."
redirect_to @article
else
render :action => ’new‘
end
end

def update
@article = Article.find(params[:id])
@article.accessible = :all if admin?
if @article.update_attributes(params[:article])
flash[:notice] = "Successfully updated article."
redirect_to @article
else
render :action => ‚edit‘
end
end
[/ruby]

Securtiy Update Für Rails 2.3.9 und 3.0

Für die aktuellen Rails Versionen der Reihe 2.3 und 3.0 wurde heute ein Securtiy-Update veröffentlicht. Die Schwachstelle kann unter bestimmten Umständen von Angreifern ausgenutzt werden, um eigenen Code in die Applikation einzuschleusen.

Die betroffenen Versionen sind 2.3.9 und 3.0.0. Die vorherigen Versionen sind ausgeschlossen.

Es gibt zwei Möglichkeiten bestehende Applikationen zu aktualisieren:

  1. Ein Update über die bekannten Wege via gem:
    [bash]
    gem update rails
    [/bash]
  2. Ein Update durch einen Patch (Falls ein Update über gem nicht Möglich sein sollte)
    Die Patches sind unter folgenden Links Verfügbar:

Mehr Details gibt unter folgendem Link http://weblog.rubyonrails.org/2010/10/15/security-vulnerability-in-nested-attributes-code-in-ruby-on-rails-2-3-9-and-3-0-0?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+RidingRails+%28Riding+Rails%29