Explorando vulnerabilidades em aplicações Ruby (Sinatra) – Cross-Site Scripting (XSS)

Neste artigo, exploraremos o Cross-Site Scripting (XSS), uma vulnerabilidade comum em aplicações web, incluindo aquelas desenvolvidas em Ruby com o framework Sinatra. Vamos entender o que é o XSS, como ele afeta suas aplicações Sinatra e as melhores práticas para mitigar esse risco.

O que é framework Sinatra?

Sinatra é um framework web minimalista e de código aberto para a linguagem de programação Ruby. Ele foi criado para simplificar o desenvolvimento de aplicações web.

O que é Cross-Site Scripting (XSS)?

O Cross-Site Scripting (XSS) é uma vulnerabilidade de segurança que permite que um invasor insira código malicioso, geralmente scripts JavaScript, em uma aplicação web. Esse código é então executado no navegador dos usuários que acessam a página afetada, permitindo que o invasor roube informações, manipule a aparência da página, redirecione os usuários para sites maliciosos e execute ações indesejadas em nome dos usuários afetados.

Criando uma aplicação web Ruby com Sinatra

Vamos criar uma aplicação web para simular a vulnerabilidade XSS.

Para utilizar o framework Sinatra, é preciso ter o Ruby instalado e mais a gem do Sinatra.

Para instalar a gem do Sinatra, basta digitar o código abaixo no terminal:

gem install sinatra

Crie um arquivo Ruby, vou chamar de app.rb, contendo o seguinte código:

require 'sinatra'

get '/user' do
   name = params['name']
   "Olá, #{name}"
end

No terminal, digite o seguinte comando para iniciar o servidor na porta 3000 e interpretar o código acima:

ruby app.rb -p 3000

Nossa aplicação exibe o nome do usuário inserido no parâmetro name da página user, ficando assim:

http://localhost:3000/user?name=Hackademy

Quando inserido um código HTML/JavaScript no parâmetro name, é executado pelo navegador, como no exemplo abaixo:

http://localhost:3000/user?name=<script>alert('Hackademy')</script>

Mitigando XSS em aplicações web Ruby

Uma forma de prevenir a vulnerabilidade de Cross-Site Scripting (XSS), é utilizando o método Rack::Utils.escape_html fornecido pela biblioteca Rack, que é amplamente utilizada em aplicações web Ruby.

A função escape_html substitui caracteres especiais no texto, como “<“, “>”,” &”, e outros, por suas entidades HTML correspondentes. Por exemplo, o caractere “<“ é substituído por “&lt;”, o caractere “>” é substituído por “&gt;”, e o caractere “&” é substituído por “&amp;”.

Abaixo está o código e um exemplo, já com a mitigação da vulnerabilidade:

require 'sinatra'
require 'rake'

get '/user' do
   name = params['name']
   Rack::Utils.escape_html("Olá, #{name}")
end

Esta é uma das formas de prevenir o XSS, existem outras práticas, talvez eu traga em outro artigo.

Espero que tenham gostado 😉