Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Дыра в INHERIT PRIVILEGES  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10042
SQL> connect scott/tiger
Connected.
SQL> drop user u1 cascade
  2  /
 
User dropped.
 
SQL> create user u1 identified by u1
  2  default tablespace users
  3  quota unlimited on users
  4  /
 
User created.
 
SQL> grant create session,
  2        create any index,
  3        create procedure
  4    to u1
  5  /
 
Grant succeeded.
 
SQL> drop table tbl purge
  2  /
 
Table dropped.
 
SQL> create table tbl(
  2                  txt varchar2(30)
  3                  )
  4  /
 
Table created.
 
SQL> connect u1/u1
Connected.
SQL> create or replace
  2    function echo(
  3                  p_str varchar2
  4                )
  5      return varchar2
  6      authid current_user
  7      deterministic
  8      is
  9      begin
10
11          -- Here user u1 could place code to save
12          -- table scott.tbl data somewhere u1 can
13          -- access it. I'll use dbms_output.put_line
14
15          dbms_output.put_line(p_str);
16          return p_str;
17  end;
18  /
 
Function created.
 
SQL> create index tbl_idx1
  2    on scott.tbl(
  3                echo(txt)
  4                )
  5  /
 
Index created.
 
SQL> connect scott/tiger
Connected.
SQL> set serveroutput on
SQL> insert
  2    into tbl
  3    values(
  4          'you just got hacked'
  5          )
  6  /
you just got hacked
 
1 row created.
 
SQL> -- And this is NOT addressed by 12C where INHERIT PRIVELEGES privilege was introduced:
 
SQL> select  u1.echo('test')
  2    from  dual
  3  /
 
U1.ECHO('TEST')
-----------------
test
 
test
SQL> revoke inherit privileges
  2    on user scott
  3    from public
  4  /
 
Revoke succeeded.
 
SQL> select  u1.echo('test')
  2    from  dual
  3  /
select  u1.echo('test')
        *
ERROR at line 1:
ORA-06598: insufficient INHERIT PRIVILEGES privilege
ORA-06512: at "U1.ECHO", line 1
 
SQL> -- As you can see we can't run function U1.ECHO as invoker SCOTT,
SQL> -- however FBI with U1.ECHO still leaves that security gap open:
 
SQL> insert
  2    into tbl
  3    values(
  4          'you just got hacked'
  5          )
  6  /
you just got hacked
 
1 row created.
 
SQL>


SY.
16 июн 17, 16:44    [20570652]     Ответить | Цитировать Сообщить модератору
 Re: Дыра в INHERIT PRIVILEGES  [new]
Elic
Member

Откуда:
Сообщений: 29977
SY
create any index
is
SY
security gap
16 июн 17, 17:05    [20570713]     Ответить | Цитировать Сообщить модератору
 Re: Дыра в INHERIT PRIVILEGES  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10042
CREATE ANY INDEX конечно плохо, но суть-то в том что FBI херит INHERIT PRIVILEGES .

SY.
16 июн 17, 17:52    [20570830]     Ответить | Цитировать Сообщить модератору
 Re: Дыра в INHERIT PRIVILEGES  [new]
Elic
Member

Откуда:
Сообщений: 29977
SY
CREATE ANY INDEX конечно плохо, но суть-то в том что FBI херит INHERIT PRIVILEGES
ХЕЗ. Any посильнее чего-либо пообъектного.
16 июн 17, 18:15    [20570883]     Ответить | Цитировать Сообщить модератору
 Re: Дыра в INHERIT PRIVILEGES  [new]
Elic
Member

Откуда:
Сообщений: 29977
SY
SQL> create index tbl_idx1
  2    on scott.tbl(
  3                echo(txt)
  4                )
  5  /
Кстати, возможность создать такой индекс появилась лишь в 12cR2. А до:
U1@elic12> grant execute on echo to scott;
U1@elic12>
U1@elic12> create index tbl_idx1
U1@elic12>   on scott.tbl(
U1@elic12>               echo(txt)
U1@elic12>               )
U1@elic12> /
              echo(txt)
              *
ERROR at line 3:
ORA-00904: "ECHO": invalid identifier
18 июн 17, 09:16    [20572611]     Ответить | Цитировать Сообщить модератору
 Re: Дыра в INHERIT PRIVILEGES  [new]
Elic
Member

Откуда:
Сообщений: 29977
Соломон, во-первых, чтобы "хакнуть" передаваемое в функцию значение вовсе не нужен authid current_user. А без него от (не)грантов Скотта ничего не зависит.
Во-вторых, даже если в функции разместить dml, он будет всё равно исполняться от имени владельца функции, а не от Скотта и по-настоящему хакнуть не выйдет:
+
U1@elic122> create table tbl(txt varchar2(30));
U1@elic122> insert into tbl values('But it''s still u1''s table :|');
U1@elic122> create function echo(p_str varchar2) return varchar2
U1@elic122>     authid current_user
U1@elic122>     deterministic
U1@elic122> is
U1@elic122>   x varchar2(1000);
U1@elic122> begin
U1@elic122>   select min(txt) into x from tbl;
U1@elic122>   dbms_output.put_line(p_str||'='||x);
U1@elic122>   return p_str;
U1@elic122> End;
U1@elic122> /

...

U1@elic122> connect scott/tiger
Connected.

Scott@elic122> set serveroutput on
Scott@elic122> insert into tbl values('you just got hacked');
you just got hacked=But it's still u1's table :|
Т.е. никакого сабжа вовсе нет.
18 июн 17, 09:44    [20572624]     Ответить | Цитировать Сообщить модератору
 Re: Дыра в INHERIT PRIVILEGES  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10042
Упс, был неправ. Дыры нет. Я создал индекс в U1 а надо-было в SCOTT (плюс grant execute on echo to scott). Тогда hack есть до 12C, а в 12C тaки решается черeз INHERIT PRIVILEGES.

SY.
18 июн 17, 14:16    [20572921]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить