advanced exploitation of oracle pl/sql flaws

16
NGS Consulting Advanced Exploitation of Oracle PL/SQL Flaws David Litchfield ([email protected])

Upload: dokhuong

Post on 01-Jan-2017

225 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.

Advanced Exploitationof

Oracle PL/SQL FlawsDavid Litchfield

([email protected])

Page 2: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.ObjectivesObjectives

• Discuss current “threat landscape”• Introduce a new class of vulnerability• Introduce a new method of attack• Show practical demonstrations• Look at some defences

Page 3: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.AgendaAgenda

• PL/SQL Risks• SQL Injection• “Dangling” Cursor Snarfing• Cursor Injection

• Demonstrations• Grant DBA Privileges• Indirect Privilege Escalation

Page 4: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.What is PL/SQL?What is PL/SQL?

• Procedural Language / Structured Query Language• Oracle’s extension to standard SQL

Programmable like T-SQL in the Microsoft world.• Used to create

• Stored Procedures• Functions• Packages (collections of procedures and functions)• Triggers• Objects

• Extends functionality with External Procedures andJava

Page 5: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.Privileges Privileges –– Definer vs. Invoker rights Definer vs. Invoker rights

• PL/SQL executes with the privileges of the definer• A procedure owned by SYS executes with SYS privileges

• AUTHID CURRENT_USER keyword• PL/SQL created using the AUTHID CURRENT_USER

keyword executes with the privileges of the invoker• A procedure owned by SYS but called by SCOTT executes

with the privileges of SCOTT

• Analogous to Suid programs in the *nix world.

Page 6: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.Running SQL from PL/SQLRunning SQL from PL/SQL

• EXECUTE IMMEDIATE ‘…’• OPEN• DBMS_SQL

• Key to Cursor Snarfing and Cursor Injection

Page 7: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.DBMS_SQLDBMS_SQL

DECLAREMY_CURSOR NUMBER;MY_RESULT NUMBER;BEGINMY_CURSOR:=DBMS_SQL.OPEN_CURSOR();DBMS_SQL.PARSE(MY_CURSOR,'SELECT 1 FROM DUAL',0);MY_RESULT:=DBMS_SQL.EXECUTE(MY_CURSOR);END;/

Page 8: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.DBMS_SQL CursorsDBMS_SQL Cursors

• Cursors are numbers… start from 1 to 300• Unique to a specific session• Like a handle – remains open ‘til closed• If an exception occurs and the cursor is not closed in

“cleanup” routines then the cursor is left “dangling”.

Page 9: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.Cursor SnarfingCursor Snarfing

• If an attacker can cause an exception in higherprivileged code where there are no cleanup routinesthen the attacker can re-use that cursor and gainaccess – sometimes limited, sometimes complete.

• Simple example – csnarf.txt

• We’ll come back to snarfing in a moment…

Page 10: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.Contrived Example vulnerable procedureContrived Example vulnerable procedure

CREATE OR REPLACE PROCEDURE GET_OWNER (P_OBJNM VARCHAR) ISTYPE C_TYPE IS REF CURSOR;CV C_TYPE;BUFFER VARCHAR2(200);BEGIN DBMS_OUTPUT.ENABLE(1000); OPEN CV FOR 'SELECT OWNER FROM ALL_OBJECTS WHERE

OBJECT_NAME = ''' || P_OBJNM ||'''';

LOOP FETCH CV INTO BUFFER; DBMS_OUTPUT.PUT_LINE(BUFFER); EXIT WHEN CV%NOTFOUND; END LOOP; CLOSE CV;END;

Page 11: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.Exploiting GET_OWNER() with only CREATE SESSIONExploiting GET_OWNER() with only CREATE SESSION

• UNION SELECT• Inject extant function• Inject a cursor

Example: get_owner.txt

Page 12: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.Real world exampleReal world example

MDSYS.SDO_DROP_BEFORE_USER contains thefollowing SQL:

EXECUTE IMMEDIATE'begin ' ||'mdsys.rdf_apis_internal.' ||'notify_drop_user(''' || dictionary_obj_name || '''); ' ||'end;';

Page 13: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.Exploiting SDO_DROP_USER_BEFOREExploiting SDO_DROP_USER_BEFORE

1) Find a table anyone can insert into (e.g. OL$ ownedby SYSTEM

2) Will inject into the SDO_DROP_USER_BEFORE tocreate another trigger on the OL$ table

3) This new trigger will give us DBA privileges

4) Insert into OL$ to fire the trigger

5) Demo – trigger.txt

Page 14: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.Possible defencesPossible defences

Revoke execute on DBMS_SQL from PUBLIC… not agood idea; too many dependencies.

Trigger to prevent DML…

Page 15: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.Questions and AnswersQuestions and Answers

Any questions?

Page 16: Advanced Exploitation of Oracle PL/SQL Flaws

NGS ConsultingNext Generation Security Software Ltd.

http://www.ngsconsulting.com/Copyright © 2004. Next Generation Security Software Ltd. All other trade marks are the property of their respective owner, and are used in an editorial context without intent of infringement.

Thank You