Security Fix verhindert Recovery

Im „Security Alert Advisory for CVE-2012-3132“ wird vor einer Bedrohung gewarnt, die wieder einmal von David Litchfield entdeckt wurde. Dabei kann mithilfe von Anführungszeichen in Objektnamen SQL-Code eingeschleust und mit SYS-Rechten ausgeführt werden, wenn man

  1. einen autorisierten Zugang zur DB hat,
  2. dieser User CREATE TABLE und CREATE PROCEDURE-Privilegien hat und
  3. dieser User DBMS_STATS ausführen darf.

Im Juli 2012 wurde ein Fix veröffentlicht, jedoch gibt es auch eine Empfehlung von Oracle, wie der Gefahr ohne Einspielung eines Patches zu begegnen ist. Diese Empfehlung hat jedoch Folgen für Recovery oder Klone einer derart behandelten DB:

Empfohlen wird das Anlegen eines Triggers, der vor der Ausführung von DDL prüft, ob Objektnamen mit einfachen Anführungszeichen versehen sind. Kopiert man den Code aus dieser Empfehlung hat man einen

  • Before-DDL-Trigger namens SYS.NAMECHECK_BEFORE_DDL_DB_TRG, der das
  • Package SYS.NAME_SECURITY aufruft.

Nach einem Recovery oder einem Klon kann jetzt aber folgendes passieren:

-- zuvor lief: CREATE CONTROLFILE
-- ALTER DATABASE OPEN RESETLOGS;

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/app/oradata/ORCL/data/temp_01.dbf' SIZE 2G;
ALTER TABLESPACE TEMP ADD TEMPFILE '/app/oradata/ORCL/data/temp_01.dbf' SIZE 2G
*
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-25153: Temporary Tablespace is Empty
ORA-06512: at "SYS.NAME_SECURITY", line 166
ORA-06512: at line 2

Hier beißt sich die Katze in den Schwanz: Um den Trigger bzw. das Package auszuführen, wird ein Temp-Tablespace benötigt, der aber unmittelbar nach dem Recovery ja noch nicht wieder mit (neuen) Tempfiles verknüpft ist! Automatische Klone und RMAN-Skripte schlagen damit also fehl.

Abhilfe verschafft ein zeitweiliges Abschalten des Triggers:

alter trigger SYS.NAMECHECK_BEFORE_DDL_DB_TRG disable;
ALTER TABLESPACE TEMP ADD TEMPFILE '/app/oradata/ORCL/data/temp_01.dbf' SIZE 2G;
alter trigger SYS.NAMECHECK_BEFORE_DDL_DB_TRG enable;

Das Problem ist damit aber nur umgangen; um vorhandene Recovery-Skripte wieder vollständig durchlaufen lassen zu können, sollte besser das passende Patch installiert werden. Dann ist nämlich kein Before-DDL-Trigger mehr nötig, da ein Exploit nicht mehr möglich ist.

Generell können DDL- und andere System-Event-Trigger solche Schwierigkeiten verursachen. Wenn also nicht dieser spezifische Trigger installiert ist, der Fehler aber dennoch auftaucht, hilft ein zeitweiliges Abschalten all dieser Trigger:

-- Generell keine System-Trigger ausführen lassen:
ALTER SYSTEM SET "_system_trig_enabled" = FALSE;
ALTER TABLESPACE TEMP ADD TEMPFILE '/app/oradata/ORCL/data/temp_01.dbf' SIZE 2G;
ALTER SYSTEM SET "_system_trig_enabled" = TRUE;

Weblinks

2 Gedanken zu „Security Fix verhindert Recovery

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s