Products
Repscan
Checkpwd

Services
Oracle Audit / Hardening
Security Trainings
Consulting

Information
Published AlertsRSS Published Alerts
Upcoming AlertsRSS Published Alerts
Patch Information
Whitepaper
Presentations
Oracle Fact Sheets
Exploits
Scripts

News & Events
Events
News

Company
Contact
People
Partner
Impressum
Sitemap


Search



Search Red-Database-Security
Read-only user can modify data via views

Name Read-only user can modify data via views
Systems Affected Oracle Database 9.2.0.0 - 10.2.0.3 (any platform)
Severity High Risk (unpatched)
Category Privilege Escalation
Vendor URL http://www.oracle.com/
Author Alexander Kornbrust (ak at red-database-security.com)
Date 10 April 2006 (V 1.01)
Founder of this vulnerability Dr. Christian Kleinewächter and Swen Thümmler from infinity3 GmbH


Preface
Last Thursday 6th April 2006, Oracle released a note on the Oracle knowledgebase Metalink with details about an unfixed security vulnerability (=0day) and a working test case (=exploit code) which effects all versions of Oracle from 9.2.0.0 to 10.2.0.3. This note "363848.1 – A User with SELECT Object Privilege on Base Tables Can Delete Rows from a View" was available last week to Metalink customers. The note was also displayed in the daily headlines section of the Metalink and sent to subscribers of the daily headline section.

That’s why this information can be assumed as public knowledge and DBAs/Developers which missed the note on Metalink should know this vulnerability in order to avoid / mitigate the risk (if possible) whilst waiting for a patch from Oracle.

After noticing the note, I informed Oracle secalert that releasing such information on Metalink is not a wise idea. Oracle normally criticises individuals and/or companies for releasing information about Oracle vulnerabilities (like David Litchfield from NGSSoftware for releasing information an ever not fixed bug in mod_plsql gateway). In this case, not only Oracle released detailed information on the vulnerability; they also included the working exploit code on the Metalink.

In an interview, the Oracle CSO Mary Ann Davidson stated: “I’ve known customers to terminate contracts … for releasing exploit code… you might get applause from hackers… but business will not pay you to slit their throats. With knowledge comes responsibility.

After my email, Oracle removed the note from Metalink.


Details
In Oracle versions (9.2.0.0-10.2.0.3) exists an unpatched vulnerability which allows users with “SELECT” only privileges on a base table to insert/update/delete data via a specially crafted view.

The impact of this vulnerability on the Oracle data dictionary is low because most data dictionary tables don’t have a primary key which is a requirement for this vulnerability.

The impact on custom applications can be huge and eliminate the entire role concept because in well designed applications there is normally a read-only role for low-privilege users (e.g. reporting or external auditors). If these low-privileged users are able to create a view, which is standard in Oracle 9.2.x to 10 g R1, they could also insert, update and delete data via a specially crafted view. Depending on the architecture, it is possible to modify data, escalate privileges, …


Patch Information
Currently there are no patches available. According to Oracle secalert Oracle will provide patches in a future critical patch update.
Red-Database-Security is not convinced that the April 2006 CPU will contain patches against this vulnerability.


Test case 1 (without the view)
The user dbsnmp has only the privilege "SELECT ANY DICTIONARY". dbsnmp can't update tables in the data dictionary
C:\>sqlplus dbsnmp/dbsnmp

SQL*Plus: Release 10.1.0.4.0 - Production on Thu Apr 8 19:20:27 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Production With the Partitioning, OLAP and Data Mining options

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.1.0.4.0 - Prod PL/SQL Release 10.1.0.4.0 - Production
CORE 10.1.0.4.0 Production
TNS for 32-bit Windows: Version 10.1.0.4.0 - Production NLSRTL Version 10.1.0.4.0 - Production


SQL> -- deleting data from the data dictionary does not work (as expected)
SQL> delete from sys.registry$;
delete from sys.registry$
*
ERROR at line 1:
ORA-01031: insufficient privileges


SQL> -- create a (specially crafted) custom view
SQL> create or replace view e as select [...censored...];

View created.

SQL> -- Dropping data via the view works !!! ==> security issue !!!
SQL> delete from e;

17 rows deleted.


Test case 1 (without the view from Jens)
set echo on
connect / as sysdba

create user tableowner
identified by abcd123
default tablespace tools
quota unlimited on tools;

grant create session, create table to tableowner;


create user readuser
identified by abcd123
default tablespace tools;

grant create session, create view to readuser;


connect tableowner/abcd123

create table t1
(id number primary key);
insert into t1 values (1);
grant select on t1 to readuser;


connect readuser/abcd123

create view del_view as
[censored]


select * from del_view;

delete from del_view;
commit;
select * from del_view;


insert into del_view values values (1);
commit;
select * from del_view;


update del_view set id=99;
commit;
select * from del_view;


connect / as sysdba
drop user tableowner cascade;
drop user readuser cascade;
exit


Workarounds / Risk Mitigation
Sanitize the connect role (9i - 10g R1) and remove the CREATE VIEW (and CREATE DATABASE LINK, …) privilege from the connect role.
Removing the primary key from the base table solves the problem too. Be aware that this could cause performance and integrity issues on the application.

The Oracle Metalink note recommends creating views the option “WITH CHECK OPTION”. This recommendation helps against accidental modification but not against hackers.


Credits
Special thanks to Jens Flasche who made Red-Database-Security aware of the Metalink note and for the first analysis + additional test cases.


Timeline
24-feb-2006 Dr. Christian Kleinewächter and Swen Thümmler from Infinity3 GmbH found and reported this bug to Oracle secalert
6-apr-2006 Oracle published vulnerability + test case on Metalink without mentioning the bug reporters
6-apr-2006 Oracle secalert informed about the note in Metalink
7-apr-2006 Note removed from Metalink
10-apr-2006 Advisory released


Timeline
1.00 - 10-apr-2006 - initial version
1.01 - 10-apr-2006 - Credits for the original founder added.




© 2006 by Red-Database-Security GmbH - last update 10-apr-2006