Critical Access in SAP: Sensitive Transactions & High-Risk Authorizations

Critical Access in SAP: Sensitive Transactions and High-Risk Authorizations

Critical access in SAP refers to transactions and authorization values that are inherently high-risk: dangerous in isolation, with no conflicting partner required. SU01, SE38, SCC4, SM59, and debug authorization all belong in this category. Critical access analysis is a distinct output of access risk analysis, separate from Segregation of Duties, and must be monitored on its own schedule.

Most organizations hunt SoD conflicts and ignore critical access. One user with SE38 + debug authorization in production is a bigger immediate threat than almost any two-sided conflict, and that user is usually already on the payroll. This guide explains what belongs on a critical access list and how to detect it as part of access risk analysis.

Why critical access is a separate risk category

An SoD conflict needs two sides. A user who can create a vendor but cannot approve payment is not the problem; the problem appears when one person holds both roles. Mitigation has options: split the role, reassign users, document a compensating control.

Critical access works differently. One transaction, significant damage:

  • A user with SU01 can create a new account with any profile they want, including SAP_ALL.
  • A user with SE38 can execute arbitrary ABAP code, including programs that bypass authorization checks or exfiltrate data.
  • A user with SM59 can redirect RFC connections to external systems.
  • A user with SCC4 can unlock a production client for changes.
  • A user with debug authorization (S_DEVELOP with OBJTYPE = DEBUG) can set variables at runtime and skip any business logic check.

None of these need a second side. Serious access risk programs treat critical access as its own finding category, scan it against a dedicated list, and review it on a tighter cycle than quarterly SoD.

The critical access list every SAP environment needs

Lists vary by industry and module footprint, but these transactions sit on almost every critical access list:

CategoryTransaction(s)Risk
User administrationSU01, SU10, SU02, PFCG, SU22/SU24, SUIMCreate users, modify roles, assign SAP_ALL, escalate own privileges
Development / ABAPSE38, SE80, SE37, SE09, SE10, CMOD, SMODExecute arbitrary code, modify function modules, release transports
Client / system adminSCC4, SCC5, SE06, STMS, SM51, SM59, RZ10, RZ11Unlock clients, modify system parameters, redirect RFC, control transport system
Direct table maintenanceSE16, SE16N, SM30, SM31 (with edit authorization)Modify any data without application controls or audit trail
Debug in productionAny transaction + S_DEVELOP (OBJTYPE=DEBUG, ACTVT=02)Bypass all authorization checks and business logic
Batch & backgroundSM36, SM37, SM64 (with broad job auth)Schedule programs running with elevated privileges
Remote function callsSM59, SE37 (RFC execution)Execute remote function modules, extract data across systems
Security audit logSM19, SM20Disable or review audit logging (a user who can disable logs can hide their own actions)
Basis utilitiesDB02, DB13, RZ20, DB50Database-level operations, system monitoring, backup control
Spool / printSP01, SP02 (with authority to view other users' output)Read confidential print output from other users

Industry-specific additions to consider:

  • FI/CO: FB05, FBV1 (parked document posting), OB52 (posting periods)
  • MM: MIRO + OMR6 (vendor payment approval limits)
  • HR: PU03 (payroll control record), PA30/PA40 in production
  • Security: SE43, SE91 (authorization default maintenance)

Authorization values matter, not just transaction codes

Critical access is not only about the tcode. Authorization values can be just as dangerous:

  • S_TCODE with * (any transaction): critical, even if no specific critical tcode is listed
  • S_TABU_DIS with * activity group: read any table data
  • S_RFC with FUGR = *: call any function module remotely
  • Organizational fields (BUKRS, WERKS, KOKRS) set to *: unrestricted scope

A user who does not technically have SE38 but holds S_DEVELOP with OBJTYPE = PROG, ACTVT = 03 combined with another debug path still has dangerous read access. Critical access analysis has to operate at the authorization-object level, not transaction code, to catch these cases. See our breakdown of authorization-level vs transaction-level analysis for why this matters.

Detecting critical access as part of access risk analysis

Critical access is the second pillar of access risk analysis, alongside SoD. The process:

  1. Maintain a ruleset entry for each critical transaction and authorization value, including the expected list of users who legitimately need the access.
  2. Run the ruleset against all users, roles, composites, and profiles. Include derived roles and composite expansions, not just direct assignments.
  3. Report any user outside the expected list who holds critical access, and any new critical access that was added since the last scan.
  4. For every user who legitimately holds critical access, record who approved it, when, and why.
  5. Review monthly for administrators, quarterly for the full population, and immediately after any role catalog change.

MTC Skopos does steps 2 and 3 in the same pass as SoD analysis, so critical access findings land in the same access risk report instead of on a separate audit track that nobody remembers to run.

Critical access vs SoD: different remediation paths

Remediation differs between the two categories:

SoD conflictCritical access
FixSplit the role, remove one side, or reassign user to a different role mixRemove the access, or reassign the transaction to a dedicated admin
Compensating controlDid-do monitoring, dual approval on one sideLogging, named-user restriction, privileged-access workflow
Review cadenceQuarterlyMonthly for admins, on-change for role catalog updates
Audit finding severityDepends on materiality and did-do evidenceUsually high; single-action risk

An access risk report that mixes the two categories in a single list hides which findings need immediate action and which can wait for the quarterly remediation sprint. Separate them.

What a good critical access report answers

A useful critical access report answers four questions:

  1. Who holds the access? Named list, with role and assignment date.
  2. Which transaction or authorization? Exact tcode, authorization object, and values.
  3. Is it approved? Cross-reference against an approved-users list.
  4. Did they use it? Did-do analysis evidence: execution count plus actual change documents.

Most commercial GRC tools answer questions 1 and 2. MTC Skopos adds 3 and 4 in the same pass and exports the full dataset as structured Power BI models, so you can slice by department, approval status, or usage pattern without writing custom queries.

« All posts