Tuesday, 11 April 2006

Oracle เตือนลูกค้ามีรูโหว่ใน Oracle 9i,10g

เมื่อวันที่ 6 เมษา ที่ผ่านมา oracle ออกประกาศเตือนไปยังลูกค้าของ Metalink (เว็บไซต์สำหรับ support ลูกค้าของ oracle)
ว่ามีช่องโหว่ที่ยังไม่ได้แก้ไขใน oracle 9.2.0.0 ถึง 10.2.0.3 ประกาศนี้มีข้อความว่า
"363848.1 - A User with SELECT Object Privilege on Base Tables Can Delete Rows from a View"

ใน Oracle versions (9.2.0.0-10.2.0.3) ช่องโหว่นี้ จะทำให้ผู้ใช้ที่มี "SELECT" privilege เท่านั้น
สามารถ insert/update/delete ข้อมูลผ่าน view (specially crafted view) ได้
ซึ่งช่องโหว่นี้มีผลกระทบกับ application ที่ใช้ oracle อย่างมาก เพราะ ทำลายโครงสร้างการออกแบบฐานข้อมูลที่สร้างไว้
ถ้าผู้ใช้ระดับ low privilege (read-only role) สามารถสร้าง view ได้ ใน Oracle 9.2.x ถึง 10 g R1
พวกเขาสามารถ insert,update,และลบข้อมูลผ่าน view (specially crafted view) ได้ด้วย

ตอนนี้ยังไม่มี patch แต่ oracle จะออก security patch อันใหม่ภายใน 18 เมษายน นี้ แต่ oracle ได้แนะนำทางแก้เฉพาะหน้าไว้ คือ
ปรับปรุง connect role และลบ CREATE VIEW (และ CREATE DATABASE LINK, ...) privilege จาก connect role
นอกจากนี้การตัด primary key จาก base table ก็ช่วยได้ แต่อาจเกิดปัญหา performance และ integrity กับ application ได้
oracle ยังแนะนำให้สร้าง view ด้วย option "WITH CHECK OPTION" ซึ่งช่วยป้องกันการแก้ไขโดยไม่ตั้งใจได้ แต่ป้องกัน hacker ไม่ได้

ข้างล่างคือตัวอย่างของการทดสอบช่องโหว่

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.

ที่มา http://www.red-database-security.com/advisory/oracle_modify_data_via_views.html
http://www.computerworld.com/securitytopics/security/holes/story/0,10801,110387,00.html