[Zope-dev] Re: Security audit introduced problem in PageTemplates/Expression.py

Dieter Maurer dieter at handshake.de
Sat Jan 17 16:28:59 EST 2004


Jim Fulton wrote at 2004-1-16 18:54 -0500:
> ...
>>   For security checks, the accessed object should be the driving factor
>>   and not the particular way the access is made.
>
>Well, sorry, that's not what this is about.  We are talking about what
>to do when accessing objects without roles.  The ability to take
>the name into account is a feature that only makes sense for named, ie
>attribute access, imo.

"item" is a blurred term in Python:

  As you know, it refers both to sequences (indexed via integers)
  and mappings (indexed via something hashable; often a string).

When some mechanism checks whether access should be granted to
individual items in a mapping, this mechanism will (almost surely) need
to know the key used in the access -- and I do not see any reason
why it should not be informed about the key.


I do not argue that the handler registered with "setDefaultAccess"
should be used for "__getitem__" access checking.

However, when it is called (as it seems to be the case),
then it should be called consistently and provide
as much information as useful -- this includes information
about both arguments to the "__getitem__" method.


Even more essential for security related issues:

  A precise description when what security related functions
  are called with what arguments.

The current state in this respect is far from optimal.
Special points of my concern:

  *  I never saw a description of the difference between the
     "accessed" and "container" parameters to "validate".

  *  I never saw a description for the three way outcome
     of "validate": "0", "1" and "raise Unauthorized".
     Why in hell is "unauthorized" encoded sometimes
     as "return 0" and sometimes as "raise Unauthorited".
     Looking at the code, I see that "accessed/container"
     has to do with this destinction. However, as
     "accessed/container" is unspecified, this does not clarify
     much.

>>   When we do not get this consistent, we open new hidden
>>   security holes (as one must always think: can this
>>   same object be accessed also in a different way
>>   and how have I to secure this way).
>
>Certainly, you have to think about how you provide access to data.
>Lots of data we provide access to has no security assertions of it's
>own.

Maybe, we should change this for Zope 3?

It would have been possible for Zope 2 since a long time --
but tightening security has high risk to break many applicitation
(as the latest security fixes demonstrated again).

> Think of accessor methods that return data. If data needs to be
>protected, you need to think about the access methods you provide.
>
>In the future, item access will work like this:
>
>     You will be able to protect __setitem__ operations.  Once
>     someone can use setitem, they can access any key.  The value
>     stored with that key may have pretections of it's own, or not.
>     That's a matter of application design.

Fine!

However, security related rules are important enough that
they deserve thourough and prominent specification/documentation.

-- 
Dieter



More information about the Zope-Dev mailing list