Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

A7

...

Missing

...

Function

...

Level

...

Access

...

Control

Most web applications verify function level access rights before making that functionality visible in the UI. However, applications need to perform the same access control checks on the server when each function is accessed. If requests are not verified, attackers will be able to forge requests in order to access functionality without proper authorization.

A7.1 Failure to Restrict URL Access:

Enabling URL access control takes some careful planning. Among the most important considerations are:

  • Ensure the access control matrix is part of the business, architecture, and design of the application
  • Ensure that all URLs and business functions are protected by an effective access control mechanism that verifies the user's role and entitlements prior to any processing taking place. Make sure this is done during every step of the way, not just once towards the beginning of any multi-step process
  • Pay close attention to include/library files. Where feasible, they should be kept outside of the web root. They should verify that they are not being directly accessed, e.g. by checking for a constant that can only be created by the library's caller
  • Do not assume that users will be unaware of special or hidden URLs or APIs. Always ensure that administrative and high privilege actions are protected
  • Block access to all file types that your application should never serve. Ideally, this filter would follow the "accept known good" approach and only allow file types that you intend to serve, e.g., .html, .pdf, .php. This would then block any attempts to access log files, xml files, etc. that you never intend to serve directly.
  • Keep up to date with virus protection and patches to components such as XML processors, word processors, image processors, etc., which handle user supplied data.

A7.2 Implement ESAPI Access Controller

Based on: http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/AccessController.html

...

The

...

AccessController

...

interface

...

defines

...

a

...

set

...

of

...

methods

...

that

...

can

...

be

...

used

...

in

...

a

...

wide

...

variety

...

of

...

applications

...

to

...

enforce

...

access

...

control.

...

In

...

most

...

applications,

...

access

...

control

...

must

...

be

...

performed

...

in

...

multiple

...

different

...

locations

...

across

...

the

...

various

...

application

...

layers.

...

This

...

class

...

provides

...

access

...

control

...

for

...

URLs,

...

business

...

functions,

...

data,

...

services,

...

and

...

files.

...

The

...

implementation

...

of

...

this

...

interface

...

will

...

need

...

to

...

access

...

the

...

current

...

User

...

object

...

(from

...

Authenticator.getCurrentUser())

...

to

...

determine

...

roles

...

or

...

permissions.

...

In

...

addition,

...

the

...

implementation

...

will

...

also

...

need

...

information

...

about

...

the

...

resources

...

that

...

are

...

being

...

accessed.

...

Using

...

the

...

user

...

information

...

and

...

the

...

resource

...

information,

...

the

...

implementation

...

should

...

return

...

an

...

access

...

control

...

decision.

...

Implementers

...

are

...

encouraged

...

to

...

implement

...

the

...

ESAPI

...

access

...

control

...

rules,

...

like

...

assertAuthorizedForFunction()

...

using

...

existing

...

access

...

control

...

mechanisms,

...

such

...

as

...

methods

...

like

...

isUserInRole()

...

or

...

hasPrivilege().

...

While

...

powerful,

...

methods

...

like

...

isUserInRole()

...

can

...

be

...

confusing

...

for

...

developers,

...

as

...

users

...

may

...

be

...

in

...

multiple

...

roles

...

or

...

possess

...

multiple

...

overlapping

...

privileges.

...

Direct

...

use

...

of

...

these

...

finer

...

grained

...

access

...

control

...

methods

...

encourages

...

the

...

use

...

of

...

complex

...

boolean

...

tests

...

throughout

...

the

...

code,

...

which

...

can

...

easily

...

lead

...

to

...

developer

...

mistakes.

...

The

...

point

...

of

...

the

...

ESAPI

...

access

...

control

...

interface

...

is

...

to

...

centralize

...

access

...

control

...

logic

...

behind

...

easy

...

to

...

use

...

calls

...

like

...

assertAuthorized()

...

so

...

that

...

access

...

control

...

is

...

easy

...

to

...

use

...

and

...

easy

...

to

...

verify.

...

Here

...

is

...

an

...

example

...

of

...

a

...

very

...

straightforward

...

to

...

implement,

...

understand,

...

and

...

verify

...

ESAPI

...

access

...

control

...

check:

...

Code Block

try { 
     ESAPI ESAPI.accessController().assertAuthorized("businessFunction", runtimeData);

     // execute BUSINESS_FUNCTION

 } catch (AccessControlException ace) {

 ... attack in progress
  }\\

Note

...

that

...

in

...

the

...

user

...

interface

...

layer,

...

access

...

control

...

checks

...

can

...

be

...

used

...

to

...

control

...

whether

...

particular

...

controls

...

are

...

rendered

...

or

...

not.

...

These

...

checks

...

are

...

supposed

...

to

...

fail

...

when

...

an

...

unauthorized

...

user

...

is

...

logged

...

in,

...

and

...

do

...

not

...

represent

...

attacks.

...

Remember

...

that

...

regardless

...

of

...

how

...

the

...

user

...

interface

...

appears,

...

an

...

attacker

...

can

...

attempt

...

to

...

invoke

...

any

...

business

...

function

...

or

...

access

...

any

...

data

...

in

...

your

...

application.

...

Therefore,

...

access

...

control

...

checks

...

in

...

the

...

user

...

interface

...

should

...

be

...

repeated

...

in

...

both

...

the

...

business

...

logic

...

and

...

data

...

layers.

...

Code Block

<% if ( ESAPI.accessController().isAuthorized( "businessFunction", runtimeData ) )
ADMIN" <%="" "="" macrohasbody="false" wikihasprecedingnewline="false" wikihastrailingnewline="false">
ADMIN" &nbsp;<%="" "="" macrohasbody="false" wikihasprecedingnewline="false" wikihastrailingnewline="false">
       { %>
 &nbsp;<a href="/doAdminFunction">ADMIN</a>
 &nbsp;<% } else
NORMAL" <%="" "="" macrohasbody="false" wikihasprecedingnewline="false" wikihastrailingnewline="false">
NORMAL" &nbsp;<%="" "="" macrohasbody="false" wikihasprecedingnewline="false" wikihastrailingnewline="false">
       { %>
 &nbsp;<a href="/doNormalFunction">NORMAL</a>

&nbsp;<%a><% } %>

h3. 

A7.3

...

Guide

...

to

...

Authorization

...

Based

...

on

...

https://www.owasp.org/index.php/Guide_to_Authorization

...

A7.3.1

...

Principle

...

of

...

least

...

privilege

...

  • Development,

...

  • test,

...

  • and

...

  • staging

...

  • environments

...

  • must

...

  • be

...

  • set

...

  • up

...

  • to

...

  • function

...

  • with

...

  • the

...

  • lowest

...

  • possible

...

  • privilege

...

  • so

...

  • that

...

  • production

...

  • will

...

  • also

...

  • work

...

  • with

...

  • lowest

...

  • possible

...

  • privileges.

...

  • Ensure

...

  • that

...

  • system

...

  • level

...

  • accounts

...

  • (those

...

  • that

...

  • run

...

  • the

...

  • environment)

...

  • have

...

  • privileges

...

  • limited

...

  • to

...

  • the

...

  • greatest

...

  • degree

...

  • possible.

...

  • Web

...

  • and

...

  • application

...

  • servers

...

  • should

...

  • never

...

  • execute

...

  • as

...

  • "Administrator",

...

  • "root",

...

  • "sa",

...

  • "sysman",

...

  • "Supervisor",

...

  • or

...

  • any

...

  • other

...

  • privileged

...

  • account.

...

  • User

...

  • accounts

...

  • should

...

  • possess

...

  • just

...

  • enough

...

  • privileges

...

  • within

...

  • the

...

  • application

...

  • to

...

  • perform

...

  • their

...

  • assigned

...

  • tasks.

...

  • These

...

  • user

...

  • accounts

...

  • should

...

  • be

...

  • created

...

  • unprivileged

...

  • and

...

  • be

...

  • given

...

  • permissions

...

  • incrementally

...

  • until

...

  • they

...

  • have

...

  • the

...

  • full

...

  • capabilities

...

  • required.

...

  • They

...

  • should

...

  • not

...

  • be

...

  • created

...

  • with

...

  • high

...

  • privileges

...

  • and

...

  • then

...

  • arbitrarily

...

  • limited.

...

  • Business

...

  • user

...

  • accounts

...

  • should

...

  • not

...

  • be

...

  • administrator

...

  • accounts

...

  • and

...

  • vice

...

  • versa.

...

  • Separate

...

  • accounts

...

  • should

...

  • be

...

  • used

...

  • to

...

  • perform

...

  • these

...

  • different

...

  • sets

...

  • of

...

  • tasks

...

  • even

...

  • if

...

  • the

...

  • same

...

  • user

...

  • needs

...

  • to

...

  • be

...

  • able

...

  • to

...

  • perform

...

  • tasks

...

  • in

...

  • both

...

  • realms.

...

  • Web

...

  • applications

...

  • should

...

  • access

...

  • the

...

  • database

...

  • through

...

  • one

...

  • or

...

  • more

...

  • limited

...

  • accounts

...

  • that

...

  • do

...

  • not

...

  • have

...

  • schema-modification

...

  • privileges

...

  • unless

...

  • required.

...

  • If

...

  • the

...

  • web

...

  • application

...

  • requires

...

  • the

...

  • ability

...

  • to

...

  • modify

...

  • the

...

  • database

...

  • schema,

...

  • then

...

  • the

...

  • design

...

  • should

...

  • be

...

  • analyzed

...

  • to

...

  • determine

...

  • if

...

  • and

...

  • why

...

  • functionality

...

  • must

...

  • be

...

  • implemented

...

  • in

...

  • such

...

  • a

...

  • potentially

...

  • hazardous

...

  • manner.

...

  • Database

...

  • access

...

  • should

...

  • be

...

  • performed

...

  • through

...

  • parameterized

...

  • stored

...

  • procedures

...

  • (or

...

  • similar)

...

  • to

...

  • allow

...

  • all

...

  • table

...

  • access

...

  • to

...

  • be

...

  • revoked

...

  • (i.e.

...

  • select,

...

  • drop,

...

  • update,

...

  • insert,

...

  • etc).

...

  • This

...

  • should

...

  • be

...

  • done

...

  • using

...

  • a

...

  • low

...

  • privilege

...

  • database

...

  • account.

...

  • This

...

  • account

...

  • should

...

  • not

...

  • hold

...

  • any

...

  • SQL

...

  • roles

...

  • above

...

  • "user"

...

  • (or

...

  • similar).

...

  • Code

...

  • access

...

  • security

...

  • should

...

  • be

...

  • evaluated

...

  • and

...

  • implemented

...

  • if

...

  • possible.

...

  • If

...

  • a

...

  • component

...

  • only

...

  • needs

...

  • the

...

  • ability

...

  • to

...

  • perform

...

  • DNS

...

  • queries,

...

  • it

...

  • should

...

  • only

...

  • be

...

  • granted

...

  • the

...

  • code

...

  • access

...

  • permissions

...

  • to

...

  • permit

...

  • this.

...

  • That

...

  • way

...

  • if

...

  • the

...

  • code

...

  • attempts

...

  • to

...

  • read

...

  • from

...

  • the

...

  • file

...

  • system

...

  • or

...

  • make

...

  • arbitrary

...

  • network

...

  • connections,

...

  • this

...

  • will

...

  • not

...

  • be

...

  • allowed

...

  • and

...

  • an

...

  • error

...

  • will

...

  • be

...

  • raised.

...

  • Minimize

...

  • the

...

  • use

...

  • of

...

  • custom

...

  • authorization

...

  • code

...

  • Use

...

  • built-in

...

  • platform

...

  • or

...

  • framework

...

  • authorization

...

  • facilities.

...

A7.3.2

...

Centralized

...

authorization

...

routines

A7.3.3

...

Authorization

...

Matrix

...

Either

...

use

...

the

...

built

...

in

...

authorization

...

facilities

...

of

...

the

...

framework,

...

or

...

place

...

the

...

call

...

to

...

a

...

centralized

...

authorization

...

check

...

at

...

the

...

beginning

...

of

...

sensitive

...

resource

...

views

...

or

...

actions.

...

A7.3.4

...

Controlling

...

access

...

to

...

protected

...

resources

...

  • Use

...

  • logical

...

  • tier

...

  • separation

...

  • and

...

  • patterns

...

  • such

...

  • as

...

  • Model

...

  • View

...

  • Controller

...

  • instead

...

  • of

...

  • directly

...

  • accessing

...

  • protected

...

  • resources

...

  • from

...

  • the

...

  • web

...

  • tier.

...

  • Ensure

...

  • that

...

  • Model

...

  • code

...

  • checks

...

  • to

...

  • ensure

...

  • that

...

  • the

...

  • requesting

...

  • user

...

  • should

...

  • have

...

  • access

...

  • to

...

  • the

...

  • protected

...

  • resource.

...

  • Ensure

...

  • that

...

  • the

...

  • code

...

  • requesting

...

  • the

...

  • resource

...

  • has

...

  • adequate

...

  • error

...

  • checking

...

  • and

...

  • does

...

  • not

...

  • assume

...

  • that

...

  • access

...

  • will

...

  • always

...

  • be

...

  • granted.

...

  • Failure

...

  • cases

...

  • should

...

  • be

...

  • accounted

...

  • for.

...

  • Ideally

...

  • generate

...

  • sensitive

...

  • content

...

  • on

...

  • the

...

  • fly

...

  • and

...

  • send

...

  • directly

...

  • to

...

  • the

...

  • browser

...

  • rather

...

  • than

...

  • saving

...

  • to

...

  • the

...

  • web

...

  • server's

...

  • file

...

  • system.

...

  • If

...

  • protecting

...

  • static

...

  • sensitive

...

  • content,

...

  • implement

...

  • authorization

...

  • checks

...

  • to

...

  • prevent

...

  • anonymous

...

  • access.

...

  • If

...

  • you

...

  • have

...

  • to

...

  • save

...

  • to

...

  • disk

...

  • (not

...

  • recommended),

...

  • use

...

  • random

...

  • filenames

...

  • (such

...

  • as

...

  • a

...

  • GUID)

...

  • and

...

  • clean

...

  • up

...

  • temporary

...

  • files

...

  • regularly.

...

  • Do

...

  • not

...

  • store

...

  • sensitive

...

  • static

...

  • content

...

  • in

...

  • web-accessible

...

  • directory

...

  • paths.

...

  • Rather,

...

  • store

...

  • this

...

  • content

...

  • in

...

  • non-web

...

  • accessible

...

  • directories

...

  • and

...

  • proxy

...

  • access

...

  • to

...

  • this

...

  • content

...

  • through

...

  • a

...

  • handler

...

  • that

...

  • will

...

  • implement

...

  • proper

...

  • authorization,

...

  • logging,

...

  • and

...

  • other

...

  • security

...

  • functions..

...

  • NOTE:

...

  • Whenever

...

  • accessing

...

  • the

...

  • file

...

  • system

...

  • from

...

  • web-facing

...

  • code

...

  • be

...

  • sure

...

  • to

...

  • guard

...

  • against

...

  • potential

...

  • injection

...

  • attacks.

...

  • Always

...

  • prefer

...

  • to

...

  • write

...

  • less

...

  • code

...

  • in

...

  • applications,

...

  • particularly

...

  • when

...

  • frameworks

...

  • provide

...

  • presumably

...

  • high

...

  • quality

...

  • and

...

  • well-tested

...

  • alternatives.

...

  • If

...

  • custom

...

  • code

...

  • is

...

  • required

...

  • to

...

  • perform

...

  • authorization

...

  • functions,

...

  • consider

...

  • fail-safe

...

  • authentication

...

  • and

...

  • exception

...

  • handling

...

  • ensure

...

  • that

...

  • if

...

  • an

...

  • exception

...

  • is

...

  • thrown,

...

  • the

...

  • user

...

  • is

...

  • logged

...

  • out

...

  • or

...

  • at

...

  • least

...

  • prevented

...

  • from

...

  • accessing

...

  • the

...

  • protected

...

  • resource

...

  • or

...

  • function.

...

  • Ensure

...

  • that

...

  • coverage

...

  • approaches

...

  • 100%

...

  • by

...

  • default.

...

A7.3.5

...

Protecting

...

access

...

to

...

static

...

resources

A7.3.6

...

Reauthorization

...

for

...

high

...

value

...

activities

...

or

...

after

...

idle

...

out

A7.3.7

...

Be

...

cautious

...

of

...

custom

...

authorization

...

controls

A7.3.8

...

Never

...

implement

...

client-side

...

authorization

...

tokens

...

Many

...

web

...

application

...

developers

...

wish

...

to

...

avoid

...

server-side

...

session

...

storage.

...

Instead,

...

they

...

rely

...

on

...

client-side

...

state

...

maintenance

...

mechanisms

...

such

...

as

...

cookies,

...

hidden

...

form

...

fields,

...

or

...

request/response

...

headers.

...

Often

...

this

...

is

...

misguided

...

when

...

applied

...

to

...

access

...

control

...

and

...

secrets

...

because

...

any

...

information

...

transmitted

...

from

...

the

...

client

...

is

...

open

...

to

...

manipulation

...

unless

...

properly

...

secured

...

using

...

cryptographic

...

techniques.

...

When

...

your

...

application

...

is

...

satisfied

...

that

...

a

...

user

...

is

...

authenticated,

...

associate

...

the

...

session

...

ID

...

with

...

the

...

authentication

...

tokens,

...

flags

...

or

...

state.

...

For

...

example,

...

once

...

the

...

user

...

is

...

logged

...

in,

...

a

...

flag

...

with

...

their

...

authorization

...

levels

...

is

...

set

...

in

...

the

...

session

...

object.

...

Code Block
if ( authenticated ) {
&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.getSession(true).setValue("AUTHLEVEL") = X_USER;
&nbsp;
}\*

Do

...

not

...

trust

...

any

...

client-side

...

authentication

...

or

...

authorization

...

tokens

...

in

...

headers,

...

cookies,

...

hidden

...

form

...

fields,

...

or

...

in

...

URL

...

arguments

...

unless

...

they

...

have

...

been

...

cryptographically

...

secured

...

via

...

signing

...

or

...

encryption.

...

  • If

...

  • your

...

  • application

...

  • uses

...

  • an

...

  • SSO

...

  • agent,

...

  • such

...

  • as

...

  • IBM's

...

  • Tivoli

...

  • Access

...

  • Manager,

...

  • Netegrity's

...

  • SiteMinder,

...

  • or

...

  • RSA's

...

  • ClearTrust,

...

  • ensure

...

  • your

...

  • application

...

  • validates

...

  • the

...

  • agent

...

  • tokens

...

  • rather

...

  • than

...

  • simply

...

  • accepting

...

  • them,

...

  • and

...

  • ensure

...

  • these

...

  • tokens

...

  • are

...

  • not

...

  • visible

...

  • to

...

  • the

...

  • end

...

  • user

...

  • in

...

  • any

...

  • form

...

  • (header,

...

  • cookie,

...

  • hidden

...

  • fields,

...

  • etc).

...

  • If

...

  • the

...

  • tokens

...

  • are

...

  • visible

...

  • to

...

  • the

...

  • end

...

  • user,

...

  • ensure

...

  • that

...

  • all

...

  • the

...

  • properties

...

  • of

...

  • a

...

  • cryptographically

...

  • secure

...

  • session

...

  • handler

...

  • are

...

  • taken

...

  • into

...

  • account.

...

A7.3.9

...

Never

...

implement

...

client-side

...

authorization

...

tokens

...

Many

...

web

...

application

...

developers

...

wish

...

to

...

avoid

...

server-side

...

session

...

storage.

...

Instead,

...

they

...

rely

...

on

...

client-side

...

state

...

maintenance

...

mechanisms

...

such

...

as

...

cookies,

...

hidden

...

form

...

fields,

...

or

...

request/response

...

headers.

...

Often

...

this

...

is

...

misguided

...

when

...

applied

...

to

...

access

...

control

...

and

...

secrets

...

because

...

any

...

information

...

transmitted

...

from

...

the

...

client

...

is

...

open

...

to

...

manipulation

...

unless

...

properly

...

secured

...

using

...

cryptographic

...

techniques

...

.

...