[Zope] Nasty subtle security bug - Me Too

Martijn Faassen faassen@vet.uu.nl
Mon, 25 Sep 2000 21:47:50 +0200


Brad Clements wrote:
> On 25 Sep 2000, at 21:01, Martijn Faassen wrote:
> 
> > In Zope 2.2.2, the user cannot execute the external method E either.
> > Instead, the calling DTML code raises a NameError, basically saying our
> > external method does not exist.
> 
> > I'll also dump this description into the collector, but posted to the
> > list because I like to complain. And who knows, perhaps someone else
> > ran into the same.
> 
> I also get the same problem in a different way. I posted a note the other 
> day about Login Manager and ownership generating NameError.
> 
> I thought it was a Login Manager thing. The results are about the same, 
> I get a NameError accessing an External method from a DTML method 
> when the current user has been authenticated using a Login manager 
> protectec sub folder of the root.

This was just plain vanilla user folder. I also get it with ZClass
instances, though I get a reauthentication request (impossible one) in that
case. In  2.1.6, I'd get reauthentication requests for both external
methods and ZClass instances.

> My fix, strangely enough, was to change the ownershipp of the DTML 
> method that was making the call to the External Method. It was owned 
> (somehow) by a user from Login Manager, rather than from the root 
> acl_users folder.
> 
> Changing the ownership fixed the problem.

I don't see how to accomplish this in my page. The root folder isn't
owned by anyone, and I can't change it to be owned, I think. The
external methods are all owned by my manager user, can I can't seem
to change that either.

> I didn't know who should look into this, Ty or DC, so I posted to the list. 
> Unfortunately it looks like no one has responded. I don't have the brains 
> to figure it out.

If it is indeed the same problem, it seems to be a Zope core bug.

In fact I misreported that moving the external method to a subfolder
solved all problems -- it still fails (at least in 2.2.2, perhaps it worked
in 2.1.6), as long as the local role needed to execute it is added to the
user in a subfolder below it). If the role is added in the same folder or
a folder above the definition of the external method, it works.

Regards,

Martijn