Pintando e bordando com a senha do CF Administrator

Fabio Terracini e eu nos deliciamos ao encontrar servidores ColdFusion desprotegidos. Esta semana ficamos brincando com um servidor CFMX 6.1 de uma grande instituição brasileira e eis que de tanto fuçar conseguimos descobrir a senha do ColdFusion Administrator. Até aí nada demais, afinal de contas o servidor não usava sandbox security (!!), contudo fomos checar e esta senha era a mesma usada no gerenciamento remoto (VNC, PCAnywhere, etc), era a mesma da conta “Administrator” e pasmem: a mesma em toda a rede de de 5 servidores, entre ColdFusion Servers, SQL e outros, que pudemos ver através do “My Network Places” do primeiro servidor que entramos. Antes que comecem a chiar: os administradores já foram avisados do problema e já estão cientes do que devem fazer para corrigí-lo. Exemplo típico da fileira de dominós, cai um, cai todos. Por isso lembre-se: use senhas diferentes!!

O que nos motiva a procurar brechas e explorá-las? (importante: sem causar estragos). Bem, não existe nenhuma questão filosófica, nenhuma necessidade de burlar as regras, falta do que fazer e muito menos posar como script-kiddies e ficar “bonito na fita” junto da meninada que vara as madrugadas tentanto sacanear sites. A motivação é a mesma que deveria nortear todos os programadores e administradores de sistemas (por isso este post): tornar o ambiente de produção mais seguro, não importa se ele é seu (co-location, dedicado, etc) ou se é de alguém e você está fazendo uso (empresa de hosting, servidores de clientes – que aliás é justamente o caso, etc). Para fazer isso, você deve ignorar todo o blá, blá do administrador do servidor (que normalmente é um metido e não sabe por%#@ nenhuma e ainda faz desdém de programadores CF) e testar o ambiente ao máximo, antes de fazer o deploy final. Isso é especialmente válido se neste servidor existirem outras contas de hospedagem de gente que você não conhece.

Existem diversas abordagens e testes que você pode (e deve) fazer, porém existe um ponto de partida que é batata e que bato sempre na mesma tecla aqui: o número de instalações de ColdFusion inseguras no país é impressionante. Fica fácil começar a checar brechas por este ponto. Notoriamente o ColdFusion Administrator sempre teve um calcanhar de aquiles que é sua autenticação, constituido por um único campo de senha e que ainda por cima é armazenada de forma pessimamente criptografada (eu diria apenas “codificada”) em algum arquivo ou entrada do registro. Eu sinceramente não entendo porque as pessoas insistem em deixá-lo aberto e desprotegido, sem usar de outros artifícios adicionais de proteção como senhas NTFS ou via .htaccess. Os exemplos são inúmeros como vocês devem saber.

Com o CFMX temos duas ou três maneiras de se “recuperar” a senha de administrador (no Google você vai encontrar estas informações), mas atualmente, com as “correções” feitas pela Macromedia, especialmente no Updater 2 do CFMX 6.0, só existe uma maneira de fazê-lo, mesmo assim somente em servidores não sandboxeados. Você só vai precisar usar CFFILE e a função Decrypt(), nada mais. Sim apenas isso. Engraçado perceber que este método de “recuperação de senhas” não tem nenhuma descrição ou comentário/referência na Internet (procure no Google), apesar de ser o mais fácil deles (não requer acesso ao ServiceFactory nem invocar o runtime do CFMX). Creio que Terracini e eu somos os primeiros a explorá-la. Eu (mente suja) percebi a brecha logo quando soube da existência deste arquivo nas instalações ColdFusion e pelo fato de a senha estar armazenada no que parece ser um formato “descriptografável”, o Terracini (o grande “célebro”) em adivinhar a key e fazer as mudanças necessárias na string para que ela ficasse bonitinha e “descriptografável”. As pizzadas aqui em casa rendem um bocado… Justamente por não encontrarmos estas informações é que já enviamos uma descrição mais detalhada para o serviço de notificação de segurança da MM. É importante frisar: esta brecha só é possível em servidores SEM o uso de sandbox security. Por isso mesmo, se você ainda não se convenceu de que sandbox security é algo fundamental ou está hospedando seu site em um provedor que também não acredita ou não sacou, está comendo uma bola tremenda. Talvez esteja na hora de você dar um puxão de orelha no seu administrador (ou em você mesmo). Mostre a ele este post, quem sabe aí não se encontra mais um motivo para implementá-la. E olha que informações sobre como fazer isso não faltam.

Pouca gente sabe, mas o ColdFusion armazena a senha de RDS e do Administrador num arquivo chamado “password.properties” (sim, ele não tem nenhuma extensão), localizado em “cf_root/lib/”. Esta informação não é obviamente muito divulgada, mas achei interessante ter sido comentada numa apresentação pública entitulada “Undocumented ColdFusion MX 6.1” feita por Ben Forta e Brandon Purcell algum tempo atrás (primeiramente esta apresentação era fechada, depois tornou-se pública), que explica uma segunda maneira de se resetar a senha do CFMX caso você a tenha perdido (além do método oficial que é editando o arquivo xml). É absolutamente vergonhoso que a Macromedia armazene senhas em arquivos plain-text e de forma tão fracamente “criptografada”. Ao analisar o arquivo vemos que ele tem o seguinte formato:

#Sun Feb 16 20:17:57 EST 2004
rdspassword=^%12/#99'D n
password=(a1812k=:@ n
encrypted=true

Obviamente a senha final não é “(a1812k=:@ n”, esta string foi “encodificada” pelo ColdFusion e você pode fazer o caminho inverso usando a função Decrypt(). Deve antes, “limpar” caracteres extras e que não serão entendidos pelo CF no formato em que estão mas que fazem parte da string plain-text que você tem em mãos. Feito isso você terá uma string “limpa” que poderá ser decodificada pela função Decrypt. A função Decrypt, como sabem, leva dois argumentos: a string e a chave. Resta-nos portanto conhecer a chave para ter o serviço completo. Não vou divulgar esta chave por motivos óbvios, mas adianto que ela é ridícula (no sentido de complexidade) e também é ridiculamente fácil de se descobrir (o Terracini que o diga). Apesar desta facilidade você não vai encontrá-la no Google, mas qualquer um com um pouco mais de boa vontade (não precisa de tempo não), é capaz de descobrí-la. O nosso código ficaria assim então:

<cfset string_codificada="(a1812kqqq1">
<cfset key_decripta="descubra voce também!">
<cfoutput>
A senha do Administrator é:<br>
#Decrypt(string_codificada, key_decripta)#
</cfoutput>

Pimba! Eis que você obteve a senha do CFAdministrator (ou do RDS, o que tiver escolhido) e dependendo do lugar onde você hospeda, será fácil (e triste) constatar que esta senha é a mesma usada em diversos outros serviços deste servidor (ou até mesmo de outros na mesma rede), no e-mail do cara, na conta do banco, etc, etc…

Ficou interessado neste assunto? O CFGIGOLÔ tem diversos outros posts que tratam de segurança de aplicações e servidores ColdFusion. A leitura é recomendada e ainda “de gratis”.


15 Comments on “Pintando e bordando com a senha do CF Administrator”

  1. Tenho um certo receio que crie uma onda de malandragens por aí, mas ao menos irá servir para os provedores e instituições ficarem mais antenados, levando essa questão mais a sério.

    O interessante desse método é a *fragilidade* do servidor ColdFusion no *armazenamento* da senha.

    Ela não é armazenada em um formato seguro, de encriptação de mão única, como um MD5 ou como faz a própria função Hash() do ColdFusion, mas sim, como você expôs, utilizando a função Encrypt, que como utiliza-se de uma key (ou “seed”, como queiram), pode ser desencriptada, sabendo-se a key.

    O intuíto de divulgar isso, que fique mais claro do que o que Alex postou, não é provocar uma balburdia por aí, nem o caos revelando senhas de provedores e instituições, mas sim alertar como o trabalho dos administradores de sistemas deve ser levado mais a sério e como é necessário *conhecimento* para exercer tal função.

    O próprio Hubner já teclou isso aqui uma vez: Não há sistemas inseguros, há administradores inseguros. E eu uma vez postei algo como: “As empresas investem menos de 0,01% do faturamento em segurança. Elas com certeza gastam mais com café, e merecem ser hackeadas. E com certeza serão.”

  2. Alex Hubner disse:

    Fabio, você é mesmo um rapaz de bom coração… ;o)

  3. Marcio disse:

    Sinceramente não acredito que a divulgação desses fatos com fartos detalhes técnicos possa servir para algo de construtivo. Aliás, creio que o resultado seja muito mais devastador, já que se as pessoas percebem que é tão difícil assim entrar em sistemas por aí, invadir servidores e descobrir senhas vulneráveis, elas mesmas serão compelidas a tal.

    Acho que a intenção é muito boa, mas bastava você entrar em contato com a empresa com vulnerabilidades e ponto final. Acabava por aí. Mas não, vc vai mais longe ainda e divulga os detalhes técnicos de como foi feito, e mostra ainda como o ataque pode ser simulado novamente, dando detalhes sobre as fraquezas do “inimigo”.

    E se era pra fazer notícia do fato, faltou o mais importante: divulgar o nome da empresa! Isso sim é jornalismo de fato! Afinal quem vai acreditar que realmente o que foi escrito é verdade? Acho que a divulgação do nome da empresa deveria ser feita, e a empresa deveria ter o direito de resposta. É assim como funciona! Pegue o exemplo da seção de reclamações de grandes jornais como “Estadão”, “Folha”, e revistas como “InfoExame”. As falhas e erros são divulgados, e imediatamente após a acusação está postada a resposta da empresa acusada.

    Simples como deve ser! Se vcs fizessem isso, realmente teríamos verdadeiro jornalismo e esclarecimento público.

    Aliás, recentemente vcs divulgaram vulnerabilidades do CFMX Administrator, lembram? Alguns provedores foram listados e neles o CFMX Administrator estava “aberto” para a Internet, para quem quisesse usar.

    Por que nesse caso o nome das empresas foi divulgado, e nesse último caso, não foi?

    Ainda, será que vcs entraram em contato com aquelas empresas listadas antes de postarem sobre os “defeitos” das mesmas? Sinceramente duvido que sim….

    Pra terminar, basta dizer que após a leitura do artigo fiquei quase uma hora tentando “invadir” servidores de provedores de acesso para ver se era realmente tão fácil assim. Com o detalhe que não sou hacker, não sou cracker e tampouco administrador de sistemas.

    Isso para que você veja até onde um artigo nada informativo desses pode levar pessoas comuns e desinteressadas no assunto a ser compelidas a repetir o seu “feito”.

  4. Alex Hubner disse:

    Marcio,

    Acho que você anda lendo essas revistas “Hackers” demais e pensando de menos. Vamos aos comentários:

    1) Onde estão os “fartos detalhes técnicos” que você citou? Oras, se você mesmo disse que passou quase uma hora tentando encontrar a vulnerabilidade e não conseguiu, é fácil perceber que estes detalhes não estão disponíveis tão “fartamente” assim, não é mesmo? Releia o post e perceba que, apesar de mostrar algumas linhas de código (simplesmente para mostrar o quão ridícula é esta vulnerabilidade) você não vai encontrar alí detalhes e informações fundamentais para explorá-la. Em resumo o que se diz é: (1) a senha do CF é armazenada num arquivo X (isso é público e divugado até em apresentações oficiais da MM – como se fosse uma “feature” desejada!…) e (2) esta senha está fracamente criptografada (algo que não é nenhuma novidade no ColdFusion), o resto… oras, se vire! (e você pelo visto tentou)… O post mostra que existe uma vulnerabilidade, diz exatamente onde ela se encontra e como você pode (leia duas vezes: PODE) explorá-la, mas em nenhum momento divulga informações de maneira irresponsável (estilo receita de bolo) como você parece ter lido. Você já leu notas técnicas de segurança divulgadas pela Microsoft, Macromedia e tantas outras empresas (incluindo as de segurança)? Pois então deve saber que nestas notas são informados o local, o porquê e como as vulnerabilidades são exploradas (além de como devem ser corrigidas). Obviamente não são mostrados detalhes (“fartos detalhes técnicos”…) e nem o caminho das pedras. É mais ou menos como dizer: “está vendo aquele morro? Pois então, você vai precisar de um bom tenis de escalada, um bom cajado e força de vontade para subir sua face sul”… nada mais, o cara que quiser tentar que se vire. Deixemos de hipocrisia, eu não tenho vergonha nem medo de divulgar informações.

    2) Coisa bobinha essa de “inimigo” e “direito de defesa” heim? Típico de quem leu e não entendeu nada;

    3) Postar em blogs está longe de ser jornalismo e não deve ser levado como tal. Se você espera “textos jornalísticos” deste blog, está no lugar errado, sinto. Além disso a comparação que você fez não tem nada a ver. Uma pessoa/cliente X escreve para a revista reclamando algo do tipo “minha impressora não funciona e o suporte é uma porcaria” e a empresa Y responde “estamos tomando as providências necessárias, blá, blá”… O que isso tem a ver com o post? Não sou cliente de ninguém, não estou reclamando de nada, muito menos reinvidicando algo. Estou apenas alertando sobre um problema que deve acontecer em muitos locais e além disso: informando sobre quais providências tomar no caso de isso estar acontecendo (essa parte você não leu né?);

    4) Sobre a menção feita aos posts onde listo provedores que estavam (leia outra vez: ESTAVAM) com problemas no CFAdministrator (http://www.cfgigolo.com/archives/2003/12/coldfusion_admi.html e http://www.cfgigolo.com/archives/2004/01/coldfusion_admi_1.html). Sugiro reler os posts e principalmente os comentários para entender o que aconteceu. É engraçado ler que você duvida que eu não tenha entrado em contato com eles… Bem, se você “por um acaso”… é um destes provedores, certamente tem muito que agradecer pelas informações que encontra neste blog sobre como proteger seus servidores e está reclamando de boca cheia. De boca cheia ainda mais se “por acaso” seu servidor faça parte daqueles que possuem apenas um mísero formulário de suporte (ou um UIN/MSN – que profissionalismo!), sem telefone, que sequer possuem uma licença correta (e comercial) do CFServer – mas o usam assim mesmo (chamam de “licença genérica”, para não dizer pirata) – e talvez, refletindo a qualidade do serviço, tenha retornado como “unreachable destiny” a mensagem que eu enviei.

    5) Você diz: “isso para que você veja até onde um artigo nada informativo desses pode levar pessoas comuns e desinteressadas no assunto a ser compelidas a repetir o seu “feito””. Eu achei ótimo este comentário, principalmente porque é justamente este o objetivo do post (ou “artigo”, como queira chamá-lo): fazer as pessoas aprenderem mais sobre o que estão usando, buscar mais conhecimento e informações sobre este e usarem (ou oferecerem) um serviço mais seguro e de qualidade. O resto é historinha para boi dormir.

    Como já frisou o Terracini aqui mesmo: “O intuíto de divulgar isso, que fique mais claro do que o que Alex postou, não é provocar uma balburdia por aí, nem o caos revelando senhas de provedores e instituições, mas sim alertar como o trabalho dos administradores de sistemas deve ser levado mais a sério e como é necessário *conhecimento* para exercer tal função.” Entenda quem entender, eu não tenho papa na língua. Falo/divulgo aquilo que acho interessante, sem ficar escondendo informações (algo que muita gente gosta de fazer) que devem ser compartilhadas com a comunidade. Pena que alguns se sintam tão ameaçados e procurem na sua incompetência uma defesa.

    A propósito “Marcio” (vou chamá-lo assim apesar de desconfiar que este não seja o seu nome): a conta de e-mail que você usou para assinar seu comentário não existe (quero dizer, não existia), pois acabo de registrá-la no Hotmail… Obviamente eu não vou usar esta conta para nada, apenas para mostrar que hipocrisia não tem nome.

  5. Marcio disse:

    Opa…..parece que dei um tiro inocente pra cima e sem querer acertei um elefante!

    Vamos lá:

    1) Alex, acho seu blog fantástico, mas também fico assombrado com certa ingenuidade sua. Sobre minha identidade, sim, eu sou Márcio, 33 anos, morador em São Paulo, consultor de sistemas e desenvolvimento de software que sobretudo trabalha com cf. É lógico que não vou colocar meu email aqui, afinal não quero ser vítimas desses malditos programinhas que varrem a Internet em busca de emails para gerar spam. Simples quanto isso.

    2) Assusta a sua ingenuidade sobre o seu poder de informação e persuasão nesse forum. Afinal para seus leitores você não precisa dar a receita do bolo completa. 1/10 da receita já serve! Para a maioria das pessoas que te lê, o que está escrito lá já serve pra muita coisa. O resto está nas entrelinhas ou no Google! Basta dar a dica…

    3) Falando em hipocrisia, você acabou respondendo um monte de coisas mas não falou o principal: por que no post do cfmx vc divulgou o nome das empresas e neste não? A pergunta permanece no ar e pronta pra ser respondida. Tem a palavra…

    4) Vc não acha que seu blog é de natureza informativa e jornalística?
    Acredite, muita gente te lê e segue suas orientações, dicas, informações, e sobretudo opiniões, quase que diariamente. E eu me incluo nesse monte.

    Dica: nunca duvide do seu poder de informação e geração de notícias nesse blog.

    5) É mais transparente do que água que você não entrou em contato com as empresas citadas no post do cfmx administrator antes de postar as mensagens sobre elas!

    Afinal se elas tivessem sido avisadas, todas elas teriam resolvido o problema e não dependeriam de terceiros para serem notificadas sobre o problema.

    OBS: Eu era cliente de 2 delas e em ambos os casos tive que avisá-las sobre os problemas citados no post. E basta reler aquele post e verificar que metade das empresas citadas ainda continuam com o problema do CFMX Administrator aberto!!!

  6. Alex Hubner disse:

    Marcio, o que você chama de ingenuidade eu chamo de liberdade. Acredito, sinceramente, que todos (sem exceção) devem ter acesso à informações importantes e sobre segurança envolvendo uma determinada tecnologia, estejam eles na ponta como clientes ou atrás como administradores. Isso é ainda mais verdade quando existe uma maneira muito simples e fácil de se contornar o problema, ou você já me viu falando de furos de segurança sem solução?

    O que temos aqui não é propriamente um furo de segurança, mas sim uma conseqüência da falta mais básica desta (algo inaceitável na minha opinião). Digo isso porque você só terá acesso a este arquivo se (1) estiver hospedando seu próprio servidor (a senha é sua) ou (2) estiver hospedando num servidor mal configurado e inseguro. E se este for o seu caso, aqui mesmo (e no site da MM em inglês e em outros tantos blogs) você encontra a solução para o problema (que vêm de forma direta, sem rodeios, no formato “receita de bolo”) e disponível há um bom tempo.

    Quando a Microsoft lança um patch de segurança para digamos o IIS, ela divulga até mais do que 1/10 do problema (o que você disse ser o suficiente, e que eu não concordo). Lembre-se: existe um patch e cabe a você instalá-lo o quanto antes. Caso não exista um patch, certamente haverá um workaround. O que estamos dizendo aqui é simples e claro: USE SANDBOX SECURITY! E o que a Microsoft está dizendo é: instale o patch! Em ambos os casos você é informado sobre o que pode (e como também) acontecer caso isso não seja feito. Ainda sobre a questão da sandbox: o não uso desta feature pode levar a problemas bem mais elementares como, por exemplo, a substituição de arquivos importantes do servidor (ou de outras contas hospedadas no mesmo lugar) através de CFFILE, algo que na segunda semana de programação CFML eu já tinha sacado (até porque costumo ler a respeito).

    Eu não vou discutir mais sobre a questão dos servidores listados, acredite se você quiser (aliás, pode postar por lá). Mas é interessante notar que “apesar” do post (entre aspas porque você e muitos outros não acharam-no adequado), todas elas ainda estão de pé e funcionando, umas mais protegidas e outras do mesmo jeito. Sinal de que apesar de divulgar a informação, ela não foi suficiente para que sujeitos mal intencionados (que não faltam) fizessem bagunça com o serviço no ar em NENHUMA delas, mas foi suficiente para mais da metade eliminar esta pequena brecha. Estou certo? E olha que estamos falando de uma coisa tão boba e simples quanto a presença de um campo de login e senha aberto na Internet, algo tão comum quanto saber o número da minha conta bancária (basta te passar um cheque) e tentar entrar no meu homebank. É possível? É de conhecimento público e notório? Claro que sim, mas existe uma grande diferença entre dizer: é possível e efetivamente mostrar como, tim-tim por tim-tim.

    Na há problema algum em dizer os nomes, já disse e repito: não tenho rabo preso com ninguém, mas neste caso eu prefiro não falar, afinal de contas trata-se de um furo um “pouco” maior do que uma simples interface aberta pedindo a senha (que precisa de um brute-force bem calibrado – brain-force é um pouco mais delicado e mecanicamente mais fácil), mas saiba que não se trata de nenhuma empresa de hospedagem de sites destas que gosto de pegar no pé e fazer picuinha… (Daqui a pouco estou vendo que vou precisar usar uma identidade falsa para abrir contas de hospedagem CF por aqui… ;-)), mas o alerta serve para qualquer um, afinal de contas a tecnologia é a mesma. Se você tiver um e-mail de verdade eu terei prazer em dizer-lhe quem é, mas divulgar jamais, até porque admito que talvez tenha passado um pouco da conta naquele post onde meti a boca no trombone.

    Olha, eu penso um bocado antes de postar coisas de segurança no CFGIGOLO. Por definição só o faço quando elas tem solução (e sou capaz de apresentá-las juntamente do problema). Este é obviamente um assunto bastante polêmico e é óbvio que haverão críticas. Mas tenha certeza que o resultado final é sempre bom, pelo menos é assim que tem sido. Eu sei que não sou o cara mais amável do mundo (aliás tenho certeza que muita gente me odeia), mas ao menos sou sincero e tento, na medida do possível, compartilhar o que sei para ajudar a vida de muita gente por aí que patina nesta maravilhosa ferramenta que é o ColdFusion.

    Fico feliz em saber que você gosta do blog, de verdade. Me desculpe pelas farpas do último comentário, mas o fato de você usar um e-mail (e aparentemente um nome) falso te tira toda e qualquer razão.

  7. Marcio disse:

    Caro Alex,

    Usar um email falso no seu blog é meramente uma questão de produtividade pessoal e sobrevivência na Internet.

    E como o seu form exige o campo “Email”, não tem outro jeito…vai falso mesmo!

    DICA: transforme o email em imagens, e não publique os mesmos como texto, assim os seus usuários ficam livres daquelas porcarias de varredura de emails.

  8. Alex Hubner disse:

    Tá certo Marcio, a gente entende… mas não posso negar que é estranho este e-mail “falso”, mas com cara de verdadeiro… (coitado do cara que por um acaso tem a conta “marciomandr@hotmail”)… Eu costumo ver por aqui gente usando alguma coisa como “nao@tenho.com” ou “fulano_NOSPAM@qualquer_provedor.com”), mas não e-mails com cara de verdadeiros… Deve ser uma nova técnica anti-spam, vai saber…

    Um dado técnico sobre o CFGIGOLÔ: os e-mails são mostrados no formato & #58;login& #64;hotmail& #46;com, que é suficiente para proteger os e-mails de quem comenta aqui. Se mesmo assim isso não for suficiente, que tal usar o TypeKey – http://www.typekey.com – assim como eu faço? ;o)

  9. Jeferson disse:

    Tenho necessidade de encontrar senha de um e-mail na bol e outro no estadão; pergunto: onde posso localizar programas e/ou macete que auxilie-me???

  10. cristiano disse:

    ola………por favor me hackearam…….descobri a senha desse msn pra mim………..to esporando……..flw…………>>> sk8er_rockeiro@hotmail.com

    t ++ espero receber uma resposta sua ainda hj blz……vlw grande!!!!!

  11. Rodrigo disse:

    Oi…gostaria de conseguir a senha do e-mail laimn@bol.com.br…Seria possível?

  12. Daniel disse:

    Olá pessoal. Estou desesperado. A minha namorada anda me traindo com um cara q ela conversa todo dia no msn. Eu gostaria de saber onde eles constumam se encontrar, e então para isso peço q vcs descubram e me enviem por mail a senha do hotmail lyarcn@hotmail.com. Bom amigos, as suas dicas são muito bacanas, e eu costumo frequentar o site . Obrigado desde já

  13. Léo disse:

    Olá, estou com uns problemas c/ minha noiva e preciso descobrir a senha do e-mail dela: ma_leo_principe@hotmail.com
    Se possível a descoberta da senha enviem a meu e-mail, obrigada.

  14. eduardo disse:

    olá gostaria de descobrir a senha do MSN de uma pessoa que está prejudicando no trabalho o msn dela É destineslaver@hotmail.com

  15. Fialho disse:

    preciso descobrir a senha de uma pessoa o email é je_540@hotmail.com Obrigado