Using "CALL TRANSACTION" statements without an authority check is security sensitive. Its access should be restricted to specific users.
This rule raises when a CALL TRANSACTION has no explicit authorization check, i.e. when:
- the
CALL TRANSACTION statement is not followed by WITH AUTHORITY-CHECK.
- the
CALL TRANSACTION statement is not following an AUTHORITY-CHECK statement.
- the
CALL TRANSACTION statement is not following a call to the AUTHORITY_CHECK_TCODE function.
Ask Yourself Whether
- the
CALL TRANSACTION statement is restricted to the right users.
There is a risk if you answered no to this question.
Recommended Secure Coding Practices
Check current user’s authorization before every CALL TRANSACTION statement. Since ABAP 7.4 this should be done by appending WITH
AUTHORITY-CHECK to CALL TRANSACTION statements. In earlier versions the AUTHORITY-CHECK statement or a call to the
AUTHORITY_CHECK_TCODE function can be used.
Note that since ABAP 7.4 any CALL TRANSACTION statement not followed by WITH AUTHORITY-CHECK or WITHOUT
AUTHORITY-CHECK is obsolete.
Sensitive Code Example
CALL TRANSACTION 'MY_DIALOG'. " Sensitive as there is no apparent authorization check. It is also obsolete since ABAP 7.4.
Compliant Solution
AUTHORITY-CHECK OBJECT 'S_DIAGID'
ID 'ACTVT' FIELD '03'.
IF sy-subrc <> 0.
" show an error message...
ENDIF.
CALL TRANSACTION 'MY_DIALOG'. " Ok but obsolete since ABAP 7.4.
or
CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
exporting
tcode = up_fdta
exceptions
ok = 0
others = 4.
IF sy-subrc <> 0.
" show an error message...
ENDIF.
CALL TRANSACTION up_fdta USING up_bdc mode 'E'. " Ok but obsolete since ABAP 7.4.
or
CALL TRANSACTION 'MY_DIALOG' WITH AUTHORITY-CHECK. " Recommended way since ABAP 7.4.
Exceptions
No issue will be raised when CALL TRANSACTION is followed by WITHOUT AUTHORITY-CHECK as it explicitly says that the
TRANSACTION does not require an authorization check.
See