Mais um blog (Marcos Placoná)

Marcos Placoná, programador ColdFusion da Tesla está com seu blog no ar. Trata-se do “Placoná’s Blog” (nome bastante original! :-). Já está recheado de posts interessantes sobre ColdFusion. Não deixem de conferir:

http://www.cfdevelopers.com.br

BTW: foi adicionado ao CFUG-SP Blog Aggregator também.


Blackstone manipulando imagens

Se você não está acompanhando o blog de Tim Buntel, deveria. Ele tem soltado (em pequenas doses, é verdade) informações interessantes sobre o novo ColdFusion server, conhecido como Blackstone. Hoje Tim soltou uma informação que muitos esperavam: o ColdFusion irá manipular imagens de forma nativa (com a versão atual somente usando elementos externos).

Esta versão, ao que parece, virá recheada de add-ons e features que antes só estavam presentes utilizando-se pacotes, custom tags e outros aplicativos separados. Do que já sabemos (das palestras do Ben e do blog do Tim) temos:

1) Geração nativa de arquivos PDF e FlashPaper “on the fly”, através da tag CFDOCUMENT (já comentei aqui);
2) Geração nativa de relatórios precisos para impressão (no estilo dos feitos pelo Crystal Reports);
3) Adições e muitos melhoramentos na área de “charting” (cfchart);
4) Deploy de aplicações CFML sem a necessidade do código fonte;
5) Manipulação de imagens (que tal uma tag chamada CFIMAGE?);
6) Melhoramentos ou completa reformulação do que hoje conhecemos como CFFORM, usando interfaces em Flash inclusive (isso foi mostrado na MAX2003);
7) Agrupamento e cascateamento de paineis de formulários através de uma tag CFGROUP;
8) Novidades e avanços grandes em termos de IDE (só espero que não se esqueçam do HomeSite) no que o Ben Forta vêm chamando de “Radical new productivity gains”.

E algo que um passarinho me contou:

– Novos recursos de logging e messaging, incluindo troca de mensagens com streamming de XML (procurem conhecer o conceito por trás de um IM chamado Jabber) e SMS;

Mas o que eu realmente gostaria de ver:

– Melhorias fundamentais para tornar o ColdFusion Server um produto viável em ambiente compartilhado (provedores de hospedagem). Na minha opinião isso é fundamental para a massificação da tecnologia e sua consequente adoção desde o pequeno até o grande desenvovedor/empresa. Leia meus comentários no blog do Ben Forta (veja este post)

O único porém: parece que o Blackstone só sai no começo de 2005… Até lá haverão programadores CFML mais curiosos do que gatos. Outro dia li num outro blog (realmente não me lembro qual): “a curiosidade matou o programador.” É esperar para ver… :o)


Macromedia confirma o óbvio: USE SANDBOX SECURITY!

Com referência ao post “Pintando e bordando com a senha do CF Administrator” um dos engenheiros de segurança da Macromedia acaba de me responder o óbvio: não se trata de uma vulnerabilidade, mas sim de má configuração. Por isso use sandbox security. Veja a mensagem:

—–Mensagem original—–
De: Tom Donovan [mailto:XXXXXXXX@macromedia.com]
Enviada em: quarta-feira, 9 de junho de 2004 13:29
Para: ‘XXXXX@hubner.org.br’
Assunto: RE: [Security Issue] [I’m pretty sure you guys]

Hello Alex,

Thanks for submitting a ColdFusion security issue.

Yes – read or write access to files in {cf_root}/lib constitutes privileged use.

If your hosting provider is not using ColdFusion MX Enterprise sandbox security, and grants unrestricted access to customers – then yes – ColdFusion developers are fully trusted and can read/write all files, registry entries, execute COM objects, etc.

The ability to read and write password.properties amounts to control of the ColdFusion Administrator and RDS passwords. Of course, the ability to read or write the files in {cf_root}/lib also gives a similar ability to learn and change ColdFusion settings without using ColdFusion Administrator at all.

Running the ColdFusion service as an unprivileged user does not constitute adequate security for a hosted environment if the developers are not trusted. We are aware that some hosting providers try to make this technique substitute for ColdFusion security. Your example is just one of the many weaknesses of this approach.

If it is possible to bypass ColdFusion sandbox security to learn or alter the ColdFusion Administrator password, then this would constitute a security problem like the ServiceFactory problem in CFMX 6.0. We do not believe this is possible with CFMX 6.1 when sandbox security is correctly configured.

Regards,
Tom Donovan
Macromedia ColdFusion


Feeds Microsoft

A Microsoft está fornecendo feeds RSS para seus Security Bulletins.

http://www.microsoft.com/technet/security/bulletin/secrssinfo.mspx


Pijama 2

Da série “pijamas“…

pijama2.jpg

Este até brilha no escuro… Há até quem diga que é sexy! 😉


Curiosidade: have you been playing with the configuration?

Trocando códigos via MSN com o Terracini hoje de madrugada ele me dizia: “não está funcionando aqui!” (e não podia estar mesmo). Ele continua: “o raio do servidor está retornando uma mensagem maluca de erro, e olha, ela é um tanto quanto engraçada!“…

Pois eis que um pedaço de código legado do beta do CFMX 6.0 (codinome Neo) surge na tela com um comentário engraçadinho no final. Basta você errar o nome de qualquer tag (ou inventar uma) para que a mensagem apareça, como por exemplo rodando isso aqui:

<cfalex teste="teste">

A mensagem de erro que será mostrada é: You are using tags whose name begins with CF, but the tag is not registered with Neo. Either the tag is not completed yet, or have you been playing with the configuration?.

Me fez lembrar do ovo de páscoa que existia no CFMX 6.0 e outras gracinhas que os engenheiros de software costumam esconder em seus programas… Também pudera, você já viu a cara dos figuras que fazem parte da equipe de desenvolvimento do CF na Macromedia?


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”.


Garbage collector

Pete Freitag fez um interessante post sobre as opções de tunning para o Java garbage collector no CFMX. Vale a pena dar uma conferida:

ColdFusion Garbage

Veja também esta apresentação sobre tunning de ColdFusion MX que apresentei no CFUG-Rio em 2003.


Morte ao SELECT *

Eu sempre comentei, principalmente para o pessoal que faz treinamento comigo, como pode ser uma má idéia utilizar SELECT * em consultas SQL, e tinha que argumentar falando da documentação e do consumo extra fazendo frente à preguiça do programador.

E hoje por acaso achei esse link no blogmarks do Jonas Galvez. 🙂