Oracle DBMS_XS_SESSIONS Built-In Package Versions 12.1 - 19.3 |
---|
Security Advisory | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This package is part of Oracle Database Real Application Security (RAS) and is used to manage sessions and security.
Based on that small bit of information alone you may be, like we are, amazed in a not very good way, that execute has been granted to PUBLIC. It should be revoked. Clearly DBMS_XS_SESSIONS relates to database security so make securing this package and monitoring any usage a very high priority. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Recommended Security Rules | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NEVER
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
How Oracle Works | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
We were left nearly speechless when we found, new in Oracle 12c, a built-in package that is part of Real Application Security with EXECUTE granted to PUBLIC. It was as though no one in Redwood Shores could figure how to grant minimum privileges to an application only when required. Why would a user with no privilege other than CREATE SESSION need EXECUTE on a package containing objects with names like DELETE NAMESPACE and DESTROY SESSION? Perhaps we should contact us and ask for help. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DBMS_XS_SESSIONS Package Information | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AUTHID | CURRENT_USER |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Constants |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Data Types | CREATE OR REPLACE TYPE DBMS_XS_NSATTR AS OBJECT ( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Dependencies |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Documented | Yes: In both the Packages and Types and in the Real Application Security Administrator's & Developer's Guide docs | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Exceptions |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
First Available | 12.1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Security Model | Owned by SYS with EXECUTE granted to PUBLIC For attaching to a RAS session, the executing user requires ATTACH_SESSION privilege. If dynamic roles are specified ADMINISTER_SESSION privilege is required. If namespaces are specified, appropriate privilege (MODIFY_NAMESPACE, MODIFY_ATTRIBUTE) on the namespaces or ADMIN_ANY_NAMESPACE system privilege is required. >>> According to the Oracle docs, for a user to administer objects in their own schema requires the RESOURCE role. Another good reason to never grant the RESOURCE role to any user. The docs further state that the RESOURCE role and the XS_RESOURCE application role include the ADMIN_SEC_POLICY privilege but we have yet to verify this statement. The docs say this is required to administer schema objects in the schema, whatever that is supposed to mean, as well as administering the policy artifacts within the granted schema to achieve policy management within an application. Based on the preceding statement perhaps the intention is security through abuse of the English language. We will try to unravel this and write it in clear and meaningful sentences. The docs also state: "Users can administer policy enforcement on the schema if they have been granted APPLY_SEC_POLICY privilege. With this privilege, the user can administer policy enforcement within granted schemas to achieve policy management within an application. We have no idea what this means either but, again, will try to get it translated into English. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Source | {ORACLE_HOME}/rdbms/admin/xssess.sql | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Subprograms |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ADD_GLOBAL_CALLBACK | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Registers a PL/SQL procedure as the event handler with the session operation specified by the event_type parameter | dbms_xs_sessions.add_global_callback( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
conn sys@pdbdev as sysdba |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ASSIGN_USER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Assigns a named application user to the currently attached anonymous application session | dbms_xs_sessions.assign_user( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SQL> exec sys.xs_principal.create_user('SEC_USER', 'HR', start_date=>SYSDATE, end_date=>SYSDATE+30); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ATTACH_SESSION | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Attach to an already created RAS session specified by the sessionid | dbms_xs_sessions.attach_session( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
See CREATE_SESSION Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE_ATTRIBUTE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Creates a new custom attribute in the specified namespace in the currently attached application session | dbms_xs_sessions.create_attribute( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BEGIN |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE_NAMESPACE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Creates a new namespace in the currently attached application session | dbms_xs_sessions.create_namespace(namespace IN VARCHAR2); |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- log in and attach to a RAS sessionexec dbms_xs_sessions.create_namespace('UWNS'); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CREATE_SESSION | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Create a RAS session with specified 128 char case sensitive username string | dbms_xs_sessions.create_session( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DECLARE |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DELETE_ATTRIBUTE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Deletes the specified attribute and its associated value from the specified namespace in the currently attached session | dbms_xs_sessions.delete_attribute( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
See CREATE_ATTRIBUTE Demo Above | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DELETE_GLOBAL_CALLBACK | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Deletes the global callback procedure for the session event specified by event_type | dbms_xs_sessions.delete_global_callback( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
See ADD_GLOBAL_CALLBACK Demo Above | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DELETE_NAMESPACE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Delete the specified namespace from the currently attached RAS session | dbms_xs_sessions.delete_namespace(namespace IN VARCHAR2); |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
See CREATE_NAMESPACE Demo Above | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DESTROY_SESSION | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Implicitly detaches all traditional sessions from the application session and destroys the specified session | dbms_xs_sessions.destroy_session( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
See ASSIGN_USER Demo Above | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DETACH_SESSION | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Detaches the current traditional database session from the application session to which it is attached | dbms_xs_sessions.detach_session(abort IN BOOLEAN DEFAULT FALSE); |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
See ASSIGN_USER Demo Above | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DISABLE_ROLE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Disables a real application role from the specified application session | dbms_xs_sessions.disable_role(role IN VARCHAR2); |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exec xs_principal.create_role('RAS_ROLE', TRUE, SYSDATE, SYSDATE+30, description=>'RAS Test Role'); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ENABLE_GLOBAL_CALLBACK | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Enables or disables the global callback for the session event specified by event_type | dbms_xs_sessions.enable_global_callback( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
See ADD_GLOBAL_CALLBACK Demo Above | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ENABLE_ROLE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Enables a real application role in the currently attached application session | dbms_xs_sessions.enable_role(role IN VARCHAR2); |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
See DISABLE_ROLE Demo Above | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET_ATTRIBUTE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gets the value of the specified attribute in the namespace in the currently attached session | dbms_xs_sessions.get_attribute( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DECLARE |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GET_SESSIONID_FROM_COOKIE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Get SID for the specified cookie. Raises an exception if no session with specified cookie exists | dbms_xs_sessions.get_sessionid_from_cookie( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
See SET_SESSION_COOKIE Demo Below | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
REAUTH_SESSION | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Updates the last authentication time for the specified session ID as the current time. Applications must call this procedure when it has reauthenticated an application user. | dbms_xs_sessions.reauth_session(sessionid IN RAW DEFAULT NULL); |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exec dbms_xs_sessions.reauth_session('4973DC2F46B643F6913A7C5D99AF78CF'); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RESET_ATTRIBUTE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Resets the value of an attribute to its default value (if present) or to NULL in the namespace in the current attached session | dbms_xs_sessions.reset_attribute( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exec dbms_xs_sessions.reset_attribute('UWNS', 'item_no'); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SAVE_SESSION | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Persist the changes done in currently attached Triton session to the metadata table. It can only be performed from an attached session. | dbms_xs_sessions.save_session; |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
dbms_xs_sessions.save_session; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SET_ATTRIBUTE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sets the value for the specified attribute to the specified value in the namespace in the currently attached session | dbms_xs_sessions_ffi.set_attribute( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exec dbms_xs_sessions_ffi.set_attribute('UWNS', 'item_type', 'generic'); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SET_INACTIVITY_TIMEOUT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Sets the inactivity timeout (in minutes) for the session which is the maximum period of inactivity allowed before the session can be terminated and resource be reclaimed | dbms_xs_sessions.set_inactivity_timeout( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exec dbms_xs_sessions.set_inactivity_timeout('4973DC2F46B643F6913A7C5D99AF78CF', 10); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SET_SESSION_COOKIE | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Set the cookie, which must be a unique string, for the session specified by sessionid | dbms_xs_sessions.set_session_cookie( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
DECLARE |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SWITCH_USER | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Switch / proxy from current user to another user in currently assigned RAS session | dbms_xs_sessions.switch_user ( |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
exec dbms_xs_sessions.switch_user ('SEC_USER', TRUE, 'UWNS'); |
Related Topics |
DBMS_XS_PRINCIPALS |
DBMS_XS_SESSIONS_FFI |
DBMS_XS_SIDP |
DBMS_XS_SYSTEM |
DBMS_XS_SYSTEM_FFI |
XS_ACL |
XS_ADMIN_UTIL |
XS_ADMIN_UTIL_INT |
XS_DATA_SECURITY |
XS_DATA_SECURITY_UTIL |
XS_DIAG |
XS_DIAG_INT |
XS_NAMESPACE |
XS_PRINCIPAL |
XS_SECURITY_CLASS |